@tool class_name EnvironmentManagerRoot extends Node3D @export var environment_config: EnvironmentConfig @export_group("Camera") @export var camera: Camera3D @export_group("Particles") @export var particles_wind: GPUParticles3D @export var particles_snow: GPUParticles3D @export var particles_fireflies: GPUParticles3D @export var particles_rain: GPUParticles3D @export var godray: PackedScene @export var fog_overlay: ColorRect #environment nodes @onready var sun: DirectionalLight3D = $"../DirectionalLight3D" @onready var environment: WorldEnvironment = $"../WorldEnvironment" var day_night_controller: DayNightController var weather_controller: WeatherController var day_tween: Tween var day_time: float = 0.0 func _ready() -> void: if day_night_controller == null: day_night_controller = DayNightController.new() day_night_controller.name = "DayNightController" day_night_controller.time_changed.connect(select_day_time) add_child(day_night_controller) if weather_controller == null: weather_controller = WeatherController.new( particles_wind, particles_snow, particles_fireflies, particles_rain, godray, sun, environment, environment_config, camera ) weather_controller.name = "WeatherController" add_child(weather_controller) func select_day_time(normalized_time: float) -> void: # 0.0→0.25 = alba: day_time 1.0→2.0 (night colors → morning colors) # 0.25→0.5 = giorno: day_time 2.0→2.0 (stays morning/afternoon) # 0.5→0.75 = tramonto: day_time 2.0→3.0 (afternoon colors → night colors) # 0.75→1.0 = notte: day_time 3.0→3.0 (stays night) # At wrap 1.0→0.0: day_time stays 3.0, then fades back via alba if normalized_time < 0.25: # Alba: notte → mattina day_time = 3.0 - (normalized_time / 0.25) * 2.0 # 3.0 → 1.0 elif normalized_time < 0.5: # Giorno pieno var t: float = (normalized_time - 0.25) / 0.25 day_time = 1.0 + t # 1.0 → 2.0 elif normalized_time < 0.75: # Tramonto: pomeriggio → notte var t: float = (normalized_time - 0.5) / 0.25 day_time = 2.0 + t # 2.0 → 3.0 else: # Notte piena day_time = 3.0 if weather_controller: weather_controller.day_time = day_time