improve snow

This commit is contained in:
2026-06-06 18:35:50 +02:00
parent 326d32c946
commit 9579f26a63
23 changed files with 168 additions and 69 deletions

View File

@@ -3,6 +3,9 @@ extends Node
signal wind_parameters_changed(speed: float, strength: float, fade: float, direction: Vector2)
const SNOW_ACCUMULATION_DELAY: float = 4.0
const SNOW_ACCUMULATION_DELAY_THRESHOLD: float = 0.01
var thunder_audio_player: AudioStreamPlayer
var thunder_sounds: Array[AudioStream]
var rain_sounds: Array[AudioStream]
@@ -836,6 +839,8 @@ func toggle_snow(value: bool):
if is_snowing and is_raining:
toggle_rain(false)
var snow_accumulation_delay: float = _get_snow_accumulation_delay() if is_snowing else 0.0
# Fade particelle neve
if particles_snow:
@@ -849,7 +854,7 @@ func toggle_snow(value: bool):
snow_particles_tween = create_tween()
snow_particles_tween.tween_property(particles_snow, "amount_ratio", 1.0, environment_config.snow_fade_time)
start_snow_accumulation()
start_snow_accumulation(snow_accumulation_delay)
else:
snow_particles_tween = create_tween()
snow_particles_tween.tween_property(particles_snow, "amount_ratio", 0.0, environment_config.snow_fade_time)
@@ -864,6 +869,8 @@ func toggle_snow(value: bool):
snow_weather_tween.kill()
var snow_amount_transition_duration: float = _get_snow_amount_transition_duration(is_snowing)
snow_tween = create_tween()
if is_snowing and snow_accumulation_delay > 0.0:
snow_tween.tween_interval(snow_accumulation_delay)
snow_tween.tween_method(
init_snow_amount,
actual_snow_amount,
@@ -928,14 +935,26 @@ func init_snow_amount(value: float):
func init_snow_weather_amount(value: float):
snow_weather_amount = value
func start_snow_accumulation() -> void:
func start_snow_accumulation(delay: float = 0.0) -> void:
RenderingServer.global_shader_parameter_set("global_snow_melt_time", -1.0)
RenderingServer.global_shader_parameter_set("global_snow_start_time", Time.get_ticks_msec() / 1000.0)
RenderingServer.global_shader_parameter_set("global_snow_start_time", Time.get_ticks_msec() / 1000.0 + delay)
_flush_pending_weather_materials()
func start_snow_melt() -> void:
RenderingServer.global_shader_parameter_set("global_snow_melt_time", Time.get_ticks_msec() / 1000.0)
RenderingServer.global_shader_parameter_set("global_snow_melt_speed", environment_config.snow_melt_speed)
func _get_snow_accumulation_delay() -> float:
if actual_snow_amount > SNOW_ACCUMULATION_DELAY_THRESHOLD:
return 0.0
return SNOW_ACCUMULATION_DELAY
func _flush_pending_weather_materials() -> void:
var environment_manager := get_parent()
if environment_manager != null and environment_manager.has_method("flush_pending_environment_nodes"):
environment_manager.call("flush_pending_environment_nodes")
func _get_snow_amount_transition_duration(is_accumulating: bool) -> float:
if environment_config == null:
return 0.0