304 lines
7.3 KiB
JavaScript
304 lines
7.3 KiB
JavaScript
let mood = 0;
|
|
let moodPerClick = 1; // FOR TESTING PURPOSES, SHOULD BE 1 IN PRODUCTION
|
|
let purchasedUpgrades = [];
|
|
|
|
const upgradesContainer = document.getElementById('upgrades');
|
|
const moodCounter = document.getElementById('mood-counter');
|
|
const favicon = document.getElementById('favicon');
|
|
|
|
const upgradeInfoContainer = document.getElementById('upgrade-info');
|
|
const upgradeName = document.getElementById('upgrade-name');
|
|
const upgradeDesc = document.getElementById('upgrade-desc');
|
|
const upgradeCost = document.getElementById('upgrade-cost');
|
|
|
|
const rainRange = document.getElementById('rain-range');
|
|
const musicRange = document.getElementById('music-range');
|
|
|
|
const audioMusic = new Audio('./assets/audio/mood_not_found.mp3');
|
|
const audioRain = new Audio('./assets/audio/rain.mp3');
|
|
|
|
function updateMoodCounter() {
|
|
moodCounter.innerText = mood;
|
|
|
|
updateUpgrades();
|
|
|
|
if (mood < 100) {
|
|
favicon.setAttribute('href', './assets/favicons/1.ico');
|
|
} else if (mood < 1e3) {
|
|
favicon.setAttribute('href', './assets/favicons/2.ico');
|
|
} else if (mood < 1e5) {
|
|
favicon.setAttribute('href', './assets/favicons/3.ico');
|
|
} else if (mood < 1e9) {
|
|
favicon.setAttribute('href', './assets/favicons/4.ico');
|
|
} else if (mood < 1e16) {
|
|
favicon.setAttribute('href', './assets/favicons/5.ico');
|
|
} else if (mood < 1e19) {
|
|
favicon.setAttribute('href', './assets/favicons/6.ico');
|
|
} else if (mood < 1e22) {
|
|
favicon.setAttribute('href', './assets/favicons/7.ico');
|
|
}
|
|
}
|
|
|
|
function updateUpgradeInfo(upgrade) {
|
|
upgradeInfoContainer.style.visibility = 'visible';
|
|
upgradeName.innerText = upgrade.name;
|
|
upgradeDesc.innerText = upgrade.description;
|
|
upgradeCost.innerText = upgrade.cost + ' Mood';
|
|
}
|
|
|
|
function clearUpgradeInfo() {
|
|
upgradeInfoContainer.style.visibility = 'hidden';
|
|
}
|
|
|
|
function updateUpgrades() {
|
|
upgradesContainer.innerHTML = '';
|
|
|
|
upgrades.slice(0, 4).forEach((upgrade) => {
|
|
const upgradeBtn = document.createElement('button');
|
|
upgradeBtn.id = upgrade.id;
|
|
upgradeBtn.className = 'upgrade';
|
|
upgradeBtn.onclick = () => purchaseUpgrade(upgrade);
|
|
upgradeBtn.onmouseenter = () => updateUpgradeInfo(upgrade);
|
|
upgradeBtn.onmouseleave = clearUpgradeInfo;
|
|
|
|
if (mood < upgrade.cost) {
|
|
upgradeBtn.style.opacity = 0.6;
|
|
upgradeBtn.style.cursor = 'not-allowed';
|
|
}
|
|
|
|
const upgradeImg = document.createElement('img');
|
|
upgradeImg.src = upgrade.image;
|
|
upgradeImg.alt = upgrade.name + ' Upgrade';
|
|
upgradeBtn.append(upgradeImg);
|
|
|
|
upgradesContainer.append(upgradeBtn);
|
|
});
|
|
}
|
|
|
|
function onLiftMoodClick() {
|
|
mood += moodPerClick;
|
|
updateMoodCounter();
|
|
}
|
|
|
|
function applyUpgrade(upgrade) {
|
|
const upgradeIndex = upgrades.indexOf(upgrade);
|
|
purchasedUpgrades.push(upgrade.id);
|
|
upgrades.splice(upgradeIndex, 1);
|
|
|
|
updateMoodCounter();
|
|
clearUpgradeInfo();
|
|
upgrade.onPurchase();
|
|
}
|
|
|
|
function purchaseUpgrade(upgrade) {
|
|
if (mood >= upgrade.cost) {
|
|
mood -= upgrade.cost;
|
|
applyUpgrade(upgrade);
|
|
}
|
|
}
|
|
|
|
// UPGRADES
|
|
// saves
|
|
|
|
function enableSaves() {
|
|
const saves = document.getElementById('upg-saves');
|
|
const savesText = document.getElementById('upg-saves-text');
|
|
saves.style.visibility = 'visible';
|
|
|
|
let counter = 5;
|
|
|
|
const updateCounter = () => {
|
|
if (counter === 0) {
|
|
const save = {
|
|
mood,
|
|
purchasedUpgrades,
|
|
};
|
|
|
|
localStorage.setItem('save', JSON.stringify(save));
|
|
counter = 6;
|
|
savesText.innerText = 'Saved!';
|
|
} else {
|
|
counter--;
|
|
savesText.innerText = 'Auto save in ' + counter;
|
|
}
|
|
}
|
|
|
|
setInterval(updateCounter, 1000);
|
|
updateCounter();
|
|
}
|
|
|
|
function loadSave() {
|
|
const save = localStorage.getItem('save');
|
|
if (save) {
|
|
const decodedSave = JSON.parse(save);
|
|
mood = decodedSave.mood;
|
|
|
|
const needUpgrades = upgrades.filter((upgrade) => decodedSave.purchasedUpgrades.includes(upgrade.id));
|
|
needUpgrades.forEach((nUpgrade) => {
|
|
applyUpgrade(nUpgrade);
|
|
});
|
|
|
|
updateMoodCounter();
|
|
}
|
|
}
|
|
|
|
function resetProgress() {
|
|
localStorage.removeItem('save');
|
|
location.reload();
|
|
}
|
|
|
|
function onResetProgressClick() {
|
|
const upgSavesReset = document.getElementById('upg-saves-reset');
|
|
|
|
if (upgSavesReset.innerText === 'Reset progress') {
|
|
upgSavesReset.innerText = 'Reset progress (are you sure?)';
|
|
} else {
|
|
resetProgress();
|
|
}
|
|
}
|
|
|
|
// emojis
|
|
|
|
function enableEmojis() {
|
|
const upgEmojis = document.getElementById('upg-emojis');
|
|
upgEmojis.style.display = 'block';
|
|
|
|
const emojis = ['😎', '😆', '😛', '😏', '😔', '🥲', '😔', '😒', '😍', '😃', '🤓', '😊', '😁', '😄'];
|
|
var randomEmoji = emojis[Math.floor(Math.random() * emojis.length)];
|
|
|
|
setInterval(() => {
|
|
mood += 200;
|
|
upgEmojis.innerText = randomEmoji;
|
|
updateMoodCounter();
|
|
}, 5000);
|
|
}
|
|
|
|
// rain
|
|
|
|
function enableRain() {
|
|
audioRain.play();
|
|
audioRain.loop = true;
|
|
|
|
setInterval(() => {
|
|
if (audioRain.paused) {
|
|
audioRain.play();
|
|
rainRange.value = audioRain.volume * 100;
|
|
}
|
|
}, 1000);
|
|
}
|
|
|
|
// calm_music
|
|
|
|
function enableMusic() {
|
|
audioMusic.play();
|
|
audioMusic.loop = true;
|
|
|
|
setInterval(() => {
|
|
if (audioMusic.paused) {
|
|
audioMusic.play();
|
|
musicRange.value = audioMusic.volume * 100;
|
|
}
|
|
}, 1000);
|
|
}
|
|
|
|
// mixer
|
|
|
|
function enableMixer() {
|
|
const upgMixer = document.getElementById('upg-mixer');
|
|
upgMixer.style.visibility = 'visible';
|
|
}
|
|
|
|
function rainRangeChange(value) {
|
|
audioRain.volume = value / 100;
|
|
}
|
|
|
|
function musicRangeChange(value) {
|
|
audioMusic.volume = value / 100;
|
|
}
|
|
|
|
// cuteface
|
|
|
|
function showCuteface() {
|
|
const cuteface = document.getElementById('upg-cuteface');
|
|
cuteface.style.visibility = 'visible';
|
|
document.body.style.backgroundColor = '#93560e';
|
|
}
|
|
|
|
// credits
|
|
|
|
function showCredits() {
|
|
const credits = document.getElementById('upg-credits');
|
|
credits.style.display = 'block';
|
|
}
|
|
|
|
|
|
let upgrades = [
|
|
{
|
|
id: 'mood_lifter',
|
|
name: 'Mood Lifter',
|
|
description: 'Lift your Mood. +5/click',
|
|
image: '../assets/img/upgrades/mood_lifter.png',
|
|
cost: 50,
|
|
onPurchase: () => moodPerClick += 5,
|
|
},
|
|
{
|
|
id: 'saves',
|
|
name: 'Free Disk Space',
|
|
description: 'Enable saves',
|
|
image: '../assets/img/upgrades/saves.png',
|
|
cost: 300,
|
|
onPurchase: enableSaves,
|
|
},
|
|
{
|
|
id: 'emojis',
|
|
name: 'Emoji Thruster',
|
|
description: 'Let the emotions flyyyyyyy +200mood/5s',
|
|
image: '../assets/img/upgrades/emojis.png',
|
|
cost: 500,
|
|
onPurchase: enableEmojis,
|
|
},
|
|
{
|
|
id: 'rain',
|
|
name: 'Rain',
|
|
description: 'It\'s rainy outside...',
|
|
image: '../assets/img/upgrades/rain.png',
|
|
cost: 1000,
|
|
onPurchase: enableRain,
|
|
},
|
|
{
|
|
id: 'calm_music',
|
|
name: 'Old Radio',
|
|
description: 'Listen to the hand-made music',
|
|
image: '../assets/img/upgrades/calm_music.png',
|
|
cost: 1500,
|
|
onPurchase: enableMusic,
|
|
},
|
|
{
|
|
id: 'mixer',
|
|
name: 'Mixer',
|
|
description: 'Control the sounds',
|
|
image: '../assets/img/upgrades/mixer.png',
|
|
cost: 3000,
|
|
onPurchase: enableMixer,
|
|
},
|
|
{
|
|
id: 'cuteface',
|
|
name: 'Cuteface',
|
|
description: 'A little bit... unusual background... no?..',
|
|
image: '../assets/img/upgrades/cuteface.png',
|
|
cost: 15000,
|
|
onPurchase: showCuteface,
|
|
},
|
|
{
|
|
id: 'credits',
|
|
name: 'Credits',
|
|
description: 'Congratulations!',
|
|
image: '../assets/img/upgrades/credits.png',
|
|
cost: 1,
|
|
onPurchase: showCredits,
|
|
},
|
|
];
|
|
|
|
loadSave();
|
|
updateUpgrades();
|