diff --git a/Jellyfin.Plugin.Seasonals/Web/marioday.js b/Jellyfin.Plugin.Seasonals/Web/marioday.js index 09d5b1b..61d352f 100644 --- a/Jellyfin.Plugin.Seasonals/Web/marioday.js +++ b/Jellyfin.Plugin.Seasonals/Web/marioday.js @@ -54,15 +54,33 @@ function createMarioDay(container) { wrapper.appendChild(mario); container.appendChild(wrapper); + let jumpCount = 0; + let maxJumpsForThisRun = Math.floor(Math.random() * 3); // 0, 1, or 2 + + const resetJumpInterval = setInterval(() => { + if (!document.body.contains(container)) { clearInterval(resetJumpInterval); return; } + jumpCount = 0; + maxJumpsForThisRun = Math.floor(Math.random() * 3); // Randomize jumps for the next pass + }, (marioSpeedSeconds / 2) * 1000); + // Periodically throw out an 8-bit coin const intervalId = setInterval(() => { if (!document.body.contains(container)) { clearInterval(intervalId); return; } if (container.style.display === 'none') return; + + const marioRect = wrapper.getBoundingClientRect(); + if (marioRect.left < 0 || marioRect.right > window.innerWidth) return; + + if (letMarioJump && !mario.classList.contains('mario-jump') && jumpCount < maxJumpsForThisRun) { + mario.classList.add('mario-jump'); + jumpCount++; + setTimeout(() => mario.classList.remove('mario-jump'), 800); + } + const coin = document.createElement('div'); coin.className = 'mario-coin'; // Grab Mario's current screen position to lock the coin's X coordinate - const marioRect = wrapper.getBoundingClientRect(); coin.style.left = `${marioRect.left + 16}px`; coin.style.bottom = '35px'; // bottom offset