improve snow
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user