let mood = 0; let moodPerClick = 50; // 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 upgSavesReset = document.getElementById('upg-saves-reset'); 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 onResetProgressClick() { if (upgSavesReset.innerText === 'Reset progress') { upgSavesReset.innerText = 'Reset progress (are you sure?)'; } else { localStorage.removeItem('save'); location.reload(); } } // emojis function enableEmojis() { setInterval(() => { mood += 250; updateMoodCounter(); }, 5000); } // calm_music, rain function enableAudio(name) { const audio = new Audio('./assets/audio/' + name); setInterval(() => { if (audio.paused) { audio.play(); } }, 1000); } // 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.visibility = 'visible'; } 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- +250mood/5s', image: '../assets/img/upgrades/emojis.png', cost: 500, onPurchase: enableEmojis, }, { id: 'calm_music', name: 'Old Radio', description: 'Listen to the hand-made music', image: '../assets/img/upgrades/calm_music.png', cost: 1000, onPurchase: () => enableAudio('mood_not_found.mp3'), }, { id: 'rain', name: 'Rain', description: 'It\'s rainy outside...', image: '../assets/img/upgrades/rain.png', cost: 5000, onPurchase: () => {}, }, { id: 'cuteface', name: 'Cuteface', description: 'A little bit... unusual background... no?..', image: '../assets/img/upgrades/cuteface.png', cost: 1e4, onPurchase: showCuteface, }, { id: 'credits', name: 'Credits', description: 'Congratulations!', image: '../assets/img/upgrades/credits.png', cost: 1, onPurchase: showCredits, }, ]; loadSave(); updateUpgrades();