diff --git a/src/_includes/footer-details.njk b/src/_includes/footer-details.njk index 98e8825..13edf13 100644 --- a/src/_includes/footer-details.njk +++ b/src/_includes/footer-details.njk @@ -20,7 +20,14 @@
- + Build: {{ build.timestamp }}
diff --git a/src/assets/css/style.css b/src/assets/css/style.css index bd0987a..6655fa0 100644 --- a/src/assets/css/style.css +++ b/src/assets/css/style.css @@ -539,8 +539,8 @@ body[data-level="6"]::after { --glow-color: #38bdf8; /* Default Jedi Blue */ position: relative; z-index: 10; - transition: all 0.3s ease; - animation: force-pulse 5s infinite ease-in-out; + transition: all 0.5s ease; + animation: force-pulse 10s infinite ease-in-out; } /* Sith Variant (Red Glow) */ @@ -581,9 +581,6 @@ body[data-level="6"]::after { } } -.force-glow { - animation: force-pulse 1.5s infinite ease-in-out; -} #level-name { font-weight: 900; text-transform: uppercase; diff --git a/src/assets/js/script.js b/src/assets/js/script.js index e5d8040..1cec6da 100644 --- a/src/assets/js/script.js +++ b/src/assets/js/script.js @@ -6,6 +6,8 @@ let currentLevel = Number(localStorage.getItem("userLevel")) || 0; // Load saved XP or start at 0 let currentXP = parseInt(localStorage.getItem("userXP")) || 0; +let isSurging = false; + function getContrastYIQ(hexcolor) { hexcolor = hexcolor.replace("#", ""); var r = parseInt(hexcolor.substr(0, 2), 16); @@ -393,8 +395,16 @@ function updateThemeIcon(theme) { * 5. EASTER EGG LOGIC & TRIGGERS */ function triggerForceSurge() { + if (isSurging) return; // Prevent overlapping surges + + isSurging = true; initAudio(); - addExperience(100); // This now handles UI updates, sounds, and bar filling + addExperience(1000); + + // Reset after the animation duration (e.g., 1 second) + setTimeout(() => { + isSurging = false; + }, 10000); } function triggerMagicXP() { @@ -403,12 +413,15 @@ function triggerMagicXP() { } // Visual Effect for Level 101+ -function triggerForceEffects(lvl) { +function triggerForceEffects() { const badge = document.getElementById("level-badge"); if (badge) { badge.classList.add("force-glow"); // Remove after 2 seconds unless it's a persistent rank - setTimeout(() => badge.classList.remove("force-glow"), 2000); + setTimeout(() => badge.classList.remove("force-glow"), 5000); + console.log("Trigger Force Effects"); + } else { + console.log("Badge not found"); } } @@ -980,7 +993,6 @@ async function addExperience(amount) { console.log(`Leveled Up to ${currentLevel}!`); } - // 4. Persistence: Save clean numbers localStorage.setItem("userLevel", currentLevel.toString()); localStorage.setItem("userXP", currentXP.toString()); @@ -1092,7 +1104,6 @@ function updateGameUI() { document.getElementById("total-xp-display").innerText = `${currentXP} / ${XP_PER_LEVEL}`; } - renderXP(currentXP); } @@ -1215,14 +1226,70 @@ function jumpToLevel() { const rank = getRank(currentLevel); showLevelUpNotification(rank); +} + +function handleFooterDotClick() { + // 1. Get the current list of unlocked eggs + const rawEggs = localStorage.getItem("unlockedEggs") || "[]"; + const unlockedEggs = JSON.parse(rawEggs); + + // 2. Exit if already unlocked + if (unlockedEggs.includes("footer_surge")) return; - if (currentLevel >= 101) { + let clicks = parseInt(localStorage.getItem("footerDotClicks")) || 0; + clicks++; + + const core = document.getElementById("footer-dot-core"); + const ping = document.getElementById("footer-dot-ping"); + + if (clicks >= 10) { + // Trigger the main function triggerForceSurge(); + + // 3. Update the global unlockedEggs array + unlockedEggs.push("footer_surge"); + localStorage.setItem("unlockedEggs", JSON.stringify(unlockedEggs)); + + // Cleanup temporary click counter + localStorage.removeItem("footerDotClicks"); + + finalizeFooterDot(core, ping); + } else { + updateFooterDotVisuals(clicks, core, ping); + localStorage.setItem("footerDotClicks", clicks); + } +} + +function updateFooterDotVisuals(count, core, ping) { + if (count >= 4 && count < 8) { + core.classList.replace("bg-green-500", "bg-yellow-500"); + ping.classList.replace("bg-green-400", "bg-yellow-400"); + } else if (count >= 8) { + core.classList.replace("bg-yellow-500", "bg-red-500"); + ping.classList.replace("bg-yellow-400", "bg-red-400"); } } +function finalizeFooterDot(core, ping) { + // Switch to a "spent" state (Indigo) + core.classList.remove("bg-red-500", "bg-green-500", "bg-yellow-500"); + core.classList.add("bg-indigo-500"); + ping.classList.add("hidden"); + document.getElementById("footer-surge-button").style.cursor = "default"; +} + // Re-initialize skills after Surprise scroll or any DOM changes -window.addEventListener("DOMContentLoaded", initSkillXP); +window.addEventListener("DOMContentLoaded", () => { + initSkillXP(); + + const unlockedEggs = JSON.parse(localStorage.getItem("unlockedEggs") || "[]"); + if (unlockedEggs.includes("footer_surge")) { + finalizeFooterDot( + document.getElementById("footer-dot-core"), + document.getElementById("footer-dot-ping"), + ); + } +}); /** * INITIALIZATION