// Настройки import { state } from '../core/state.js'; let settingsPanel = null; let dayNightToggle = null; // Weather button IDs in order const WEATHER_BTNS = ['weatherClear', 'weatherRain', 'weatherSnow', 'weatherThunder']; const WEATHER_ACTIVE_BG = '#3498db'; const WEATHER_INACTIVE_BG = '#555'; function setWeatherButtonActive(activeId) { for (const id of WEATHER_BTNS) { const btn = document.getElementById(id); if (btn) { btn.style.background = (id === activeId) ? WEATHER_ACTIVE_BG : WEATHER_INACTIVE_BG; } } } export function initSettings() { settingsPanel = document.getElementById('settingsPanel'); dayNightToggle = document.getElementById('dayNightToggle'); if (!settingsPanel) return; const closeBtn = document.getElementById('settingsClose'); if (closeBtn) { closeBtn.addEventListener('click', () => { settingsPanel.style.display = 'none'; }); } // Day/night cycle toggle if (dayNightToggle) { dayNightToggle.checked = state.dayNightCycle !== false; dayNightToggle.addEventListener('change', () => { state.dayNightCycle = dayNightToggle.checked; }); } // Time-of-day slider const timeSlider = document.getElementById('timeSlider'); if (timeSlider) { timeSlider.value = Math.round(state.worldTime * 100); timeSlider.addEventListener('input', () => { state.worldTime = parseInt(timeSlider.value) / 100; if (state.dayNightCycle) { state.dayNightCycle = false; if (dayNightToggle) dayNightToggle.checked = false; } }); } // ====== Weather controls (Ясно / Дождь / Снег / Гроза) ====== const weatherIntensitySlider = document.getElementById('weatherIntensity'); // Helper: apply a weather type function applyWeather(type) { state.weatherType = type; state.weatherChangeInterval = Infinity; // Lock weather manually switch (type) { case 'clear': state.isRaining = false; state.rainIntensity = 0; if (weatherIntensitySlider) weatherIntensitySlider.value = 0; break; case 'rain': state.isRaining = true; state.rainIntensity = parseInt(weatherIntensitySlider?.value || 40) / 100; break; case 'snow': state.isRaining = false; // snow uses its own rendering state.rainIntensity = parseInt(weatherIntensitySlider?.value || 40) / 100; break; case 'thunder': state.isRaining = true; // thunder includes rain state.rainIntensity = parseInt(weatherIntensitySlider?.value || 60) / 100; if (weatherIntensitySlider) weatherIntensitySlider.value = Math.round(state.rainIntensity * 100); break; } setWeatherButtonActive('weather' + type.charAt(0).toUpperCase() + type.slice(1)); } // Button handlers for (const id of WEATHER_BTNS) { const btn = document.getElementById(id); if (btn) { const weatherType = btn.dataset.weather || id.replace('weather', '').toLowerCase(); btn.addEventListener('click', () => applyWeather(weatherType)); } } // Intensity slider if (weatherIntensitySlider) { weatherIntensitySlider.addEventListener('input', () => { const val = parseInt(weatherIntensitySlider.value) / 100; if (state.weatherType !== 'clear') { state.rainIntensity = val; if (state.weatherType === 'thunder' || state.weatherType === 'rain') { state.isRaining = true; } } }); } // Listen for toggleSettings custom event document.addEventListener('toggleSettings', () => { if (settingsPanel) { // Sync all controls when panel opens if (timeSlider) timeSlider.value = Math.round(state.worldTime * 100); if (dayNightToggle) dayNightToggle.checked = state.dayNightCycle !== false; if (weatherIntensitySlider) weatherIntensitySlider.value = Math.round(state.rainIntensity * 100); // Highlight active weather button const wt = state.weatherType || (state.isRaining ? 'rain' : 'clear'); const activeId = 'weather' + wt.charAt(0).toUpperCase() + wt.slice(1); setWeatherButtonActive(activeId); settingsPanel.style.display = settingsPanel.style.display === 'none' ? 'block' : 'none'; } }); } export function isDayNightEnabled() { return state.dayNightCycle !== false; }