const pauseButton = document.getElementById('pause-button'); const playButton = document.getElementById('play-button'); const fastButton = document.getElementById('fast-button'); const timeDisplay = document.getElementById('time-display'); // --- Time System Variables --- const NORMAL_SPEED = 60; // 1 real sec = 1 game min const FAST_SPEED = 1000; // 1 real sec = 10 game min let timeScaleMultiplier = NORMAL_SPEED; // Start at normal speed let totalGameSecondsElapsed = 0; let currentDay = 80; let currentHour = 7.0; // Start at 8:00 AM let lastTimestamp = 0; // For delta time calculation let lastUpdateRowIndex = 0; function initTime(){ // Time Control Button Listeners pauseButton.addEventListener('click', () => setTimeScale(0)); playButton.addEventListener('click', () => setTimeScale(NORMAL_SPEED)); fastButton.addEventListener('click', () => setTimeScale(FAST_SPEED)); // Initialize time totalGameSecondsElapsed = (currentDay - 1) * 86400 + currentHour * 3600; updateTimeDisplay(); // Initial display update updateButtonStates(); // Set initial button active state } // --- Time System Functions --- function updateTime(deltaTime) { if (timeScaleMultiplier <= 0) return; // Don't update if paused totalGameSecondsElapsed += deltaTime * timeScaleMultiplier; const SECONDS_IN_DAY = 86400; const SECONDS_IN_HOUR = 3600; let previousDay = currentDay; currentDay = Math.floor(totalGameSecondsElapsed / SECONDS_IN_DAY) + 1; currentHour = (totalGameSecondsElapsed % SECONDS_IN_DAY) / SECONDS_IN_HOUR; if (currentDay !== previousDay) { console.log(`Day ${currentDay} has begun!`); // Add any daily logic here } updateTimeDisplay(); } function formatTime(hour) { const hours = Math.floor(hour); const minutes = Math.floor((hour - hours) * 60); return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`; } function updateTimeDisplay() { timeDisplay.textContent = `Day ${currentDay}, ${formatTime(currentHour)}`; } function setTimeScale(newScale) { timeScaleMultiplier = newScale; console.log(`Time scale set to: ${timeScaleMultiplier}`); updateButtonStates(); } function updateButtonStates() { pauseButton.classList.toggle('active', timeScaleMultiplier === 0); playButton.classList.toggle('active', timeScaleMultiplier === NORMAL_SPEED); fastButton.classList.toggle('active', timeScaleMultiplier === FAST_SPEED); } function animateUpdateTime(timestamp){ // Calculate Delta Time if (lastTimestamp === 0) { lastTimestamp = timestamp; // Initialize on first frame } const deltaTime = (timestamp - lastTimestamp) / 1000; // Delta time in seconds lastTimestamp = timestamp; // --- Update Time --- updateTime(deltaTime); return totalGameSecondsElapsed; } function getCurrentRowIndex(){ // --- Update buildings every 15 game minutes --- const SECONDS_IN_DAY = 86400; const SECONDS_IN_HOUR = 3600; const MINUTES_PER_ROW = 15; const SECONDS_PER_ROW = MINUTES_PER_ROW * 60; // Calculate which row should be active based on totalGameSecondsElapsed const rowIndex = Math.floor((totalGameSecondsElapsed % SECONDS_IN_DAY) / SECONDS_PER_ROW); return rowIndex; }