add rain sound + add time to screen

This commit is contained in:
2026-04-09 14:21:16 +02:00
parent ecaa3704d7
commit 65294c7011
32 changed files with 383 additions and 234 deletions

View File

@@ -18,11 +18,11 @@ extends Node3D
@export_group("Sound")
@export var thunder_sounds: Array[AudioStream]
@export var rain_sounds: Array[AudioStream]
#environment nodes
@onready var sun: DirectionalLight3D = $"../DirectionalLight3D"
@onready var environment: WorldEnvironment = $"../WorldEnvironment"
@onready var audio_player: AudioStreamPlayer3D = $AudioStreamPlayer3D
var day_night_controller: DayNightController
var weather_controller: WeatherController
@@ -51,16 +51,16 @@ func _ready() -> void:
particles_snow,
particles_fireflies,
particles_rain,
godray,
godray,
environment_dust,
blur,
environment_shadows,
sun,
sun,
environment,
environment_config,
camera,
audio_player,
thunder_sounds
thunder_sounds,
rain_sounds
)
weather_controller.name = "WeatherController"
add_child(weather_controller)
@@ -68,7 +68,7 @@ func _ready() -> void:
func ApplyWindNoiseToMaterials():
var noise_tex = preload("res://core/daynight/noise.tres")
for node in get_tree().get_nodes_in_group("wind_node"):
if node is GeometryInstance3D:
if node is GeometryInstance3D and node.material_override != null:
node.material_override.set_shader_parameter("wind_noise", noise_tex)
func ApplyWeatherShaderToMaterials():
@@ -83,26 +83,36 @@ func ApplyWeatherShaderToMaterials():
child.material_overlay = weather_shader
func select_day_time(normalized_time: float) -> void:
# 0.0→0.25 = sunrise: day_time 1.0→2.0 (night colors → morning colors)
# 0.25→0.5 = day: day_time 2.0→2.0 (stays morning/afternoon)
# 0.5→0.75 = sunset: day_time 2.0→3.0 (afternoon colors → night colors)
# 0.75→1.0 = night: day_time 3.0→3.0 (stays night)
# At wrap 1.0→0.0: day_time stays 3.0, then fades back via sunrise
#set show_day_time_debug = true to show debug on screen
#normalized_time is a value between 0 and 1; the time of the day is calculate as "normalized_time" * 1440; day_time is the step to pass from sunrise, to day, to sunset, to night
#e.g.
#Time normalized_time day_time
#00:00 0.0000 3.0
#06:00 0.2500 1.0
#09:36 0.4000 1.75
#10:48 0.4500 2.0
#12:00 0.5000 2.0
#19:12 0.8000 2.0
#21:36 0.9000 2.5
#24:00 1.0000 3.0
if normalized_time < 0.25:
if normalized_time < environment_config.sunrise:
#Sunrise: night → morning
day_time = 3.0 - (normalized_time / 0.25) * 2.0 # 3.0 → 1.0
elif normalized_time < 0.5:
#Broad daylight
var t: float = (normalized_time - 0.25) / 0.25
day_time = 3.0 - (normalized_time / environment_config.sunrise) * 2.0 # 3.0 → 1.0
elif normalized_time < environment_config.day:
#Morning: morning → afternoon
var t: float = (normalized_time - environment_config.sunrise) / (environment_config.day - environment_config.sunrise)
day_time = 1.0 + t # 1.0 → 2.0
elif normalized_time < 0.75:
elif normalized_time < environment_config.sunset:
#Broad daylight
day_time = 2.0
elif normalized_time < environment_config.night:
#Sunset: afternoon → night
var t: float = (normalized_time - 0.5) / 0.25
var t: float = (normalized_time - environment_config.sunset) / (environment_config.night - environment_config.sunset)
day_time = 2.0 + t # 2.0 → 3.0
else:
#Night
day_time = 3.0
if weather_controller:
weather_controller.day_time = day_time