Files
novafarma/src/systems/DayNightSystem.js
2025-12-07 04:19:57 +01:00

96 lines
2.7 KiB
JavaScript

class DayNightSystem {
constructor(scene, timeSystem) {
this.scene = scene;
this.timeSystem = timeSystem;
// Visual overlay
this.overlay = null;
this.currentPhase = 'day'; // dawn, day, dusk, night
this.init();
}
init() {
// No local overlay - using UIScene.overlayGraphics
}
update() {
if (!this.timeSystem) return;
const hour = this.timeSystem.getCurrentHour();
const phase = this.getPhase(hour);
if (phase !== this.currentPhase) {
this.currentPhase = phase;
console.log(`🌅 Time of Day: ${phase} (${hour}:00)`);
}
this.updateLighting(hour);
}
getPhase(hour) {
if (hour >= 5 && hour < 7) return 'dawn';
if (hour >= 7 && hour < 18) return 'day';
if (hour >= 18 && hour < 20) return 'dusk';
return 'night';
}
updateLighting(hour) {
// Get Shared Overlay from UI Scene
const uiScene = this.scene.scene.get('UIScene');
if (!uiScene || !uiScene.overlayGraphics) return;
const graphics = uiScene.overlayGraphics;
// IMPORTANT: DayNight is the FIRST system to render to overlay, so it MUST CLEAR it.
graphics.clear();
const width = uiScene.scale.width;
const height = uiScene.scale.height;
let color = 0x000033; // Default night blue
let alpha = 0;
if (hour >= 0 && hour < 5) {
// Deep Night (0-5h) - Dark blue
color = 0x000033;
alpha = 0.6;
} else if (hour >= 5 && hour < 7) {
// Dawn (5-7h) - Orange/Pink gradient
color = 0xFF6B35;
const progress = (hour - 5) / 2; // 0-1
alpha = 0.6 - (progress * 0.6); // 0.6 -> 0
} else if (hour >= 7 && hour < 18) {
// Day (7-18h) - No overlay (bright)
alpha = 0;
} else if (hour >= 18 && hour < 20) {
// Dusk (18-20h) - Orange/Purple
color = 0x8B4789;
const progress = (hour - 18) / 2; // 0-1
alpha = progress * 0.5; // 0 -> 0.5
} else if (hour >= 20 && hour < 24) {
// Night (20-24h) - Dark blue
color = 0x000033;
const progress = (hour - 20) / 4; // 0-1
alpha = 0.5 + (progress * 0.1); // 0.5 -> 0.6
}
if (alpha > 0) {
graphics.fillStyle(color, alpha);
graphics.fillRect(0, 0, width, height);
}
}
getCurrentPhase() {
return this.currentPhase;
}
isNight() {
return this.currentPhase === 'night';
}
isDay() {
return this.currentPhase === 'day';
}
}