create weather controller and daynight controller

This commit is contained in:
2026-03-24 13:56:36 +01:00
parent 5e9611ed44
commit 36d6f29fd3
45 changed files with 2186 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
@tool
class_name EnvironmentManagerRoot
extends Node3D
@export var environment_config: EnvironmentConfig
@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
)
weather_controller.name = "WeatherController"
add_child(weather_controller)
func select_day_time(normalized_time: float) -> void:
# Convert 0.0-1.0 normalized time to range used by atmosphere lerps
# morning (dawn→noon) = 1.0-2.0, afternoon/night (noon→midnight) = 2.0-3.0
if normalized_time < 0.5:
# 0.0→0.5 maps to 1.0→2.0 (morning to afternoon)
day_time = 1.0 + (normalized_time / 0.5)
else:
# 0.5→1.0 maps to 2.0→3.0 (afternoon to night)
day_time = 2.0 + ((normalized_time - 0.5) / 0.5)
if day_tween and day_tween.is_valid():
day_tween.kill()
day_tween = create_tween()
day_tween.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
day_tween.tween_property(self, "day_time", day_time, 3.0)
if weather_controller:
weather_controller.day_time = day_time