fix wind!

This commit is contained in:
2026-04-21 12:40:59 +02:00
parent 7a1ac3b698
commit 9a26a4114b
48 changed files with 2376 additions and 234 deletions

View File

@@ -66,15 +66,15 @@ func _init(wind: GPUParticles3D, snow: GPUParticles3D,
thunder_sounds = thundersounds
rain_sounds = rainsounds
set_rain()
init_rain()
set_fireflies()
init_fireflies()
set_wind()
init_wind()
set_snow()
init_snow()
set_lightning()
init_lightning()
create_sound_players()
@@ -124,7 +124,7 @@ func _process(delta: float) -> void:
timer_next_lightning -= delta
if timer_next_lightning <= 0.0:
start_lightning()
set_lightning_timer()
init_lightning_timer()
else:
rain_intensity = move_toward(rain_intensity, 0.0, delta * 0.5)
@@ -281,7 +281,7 @@ func toggle_fireflies(value: bool):
particles_fireflies.emitting = thereare_fireflies and is_night
#disable fireflies and set default values and materials
func set_fireflies():
func init_fireflies():
if particles_fireflies:
particles_fireflies.visible = true
particles_fireflies.emitting = false
@@ -299,8 +299,10 @@ func toggle_wind(value: bool):
if particles_wind:
particles_wind.emitting = is_windy
_apply_wind_state()
#disable wind and set default values and materials
func set_wind():
func init_wind():
if particles_wind:
particles_wind.visible = true
particles_wind.emitting = false
@@ -312,26 +314,36 @@ func set_wind():
if environment_config:
_apply_cloud_config()
_apply_wind_config()
_apply_dust_config()
func _apply_wind_config() -> void:
RenderingServer.global_shader_parameter_set("global_wind_speed", environment_config.wind_speed)
RenderingServer.global_shader_parameter_set("global_wind_direction", environment_config.wind_direction)
RenderingServer.global_shader_parameter_set("global_wind_scale", environment_config.wind_scale)
RenderingServer.global_shader_parameter_set("global_wind_strength", environment_config.wind_strength)
if particles_wind:
var proc_mat_wind = particles_wind.process_material as ParticleProcessMaterial
if proc_mat_wind:
var wind_direction_3d := Vector3(environment_config.wind_direction.x, 0.0, environment_config.wind_direction.y)
if wind_direction_3d.length_squared() > 0.0:
var wind_axis := wind_direction_3d.normalized()
var wind_cross := wind_axis.cross(Vector3.UP)
if wind_cross.length_squared() == 0.0:
wind_cross = Vector3.FORWARD
else:
wind_cross = wind_cross.normalized()
var wind_up := wind_cross.cross(wind_axis).normalized()
proc_mat_wind.direction = wind_axis
particles_wind.global_transform = Transform3D(Basis(wind_cross, wind_axis, wind_up), particles_wind.global_position)
RenderingServer.global_shader_parameter_set("global_wind_direction", environment_config.wind_direction)
RenderingServer.global_shader_parameter_set("global_wind_scale", environment_config.wind_scale)
if particles_wind:
var proc_mat_wind = particles_wind.process_material as ParticleProcessMaterial
if proc_mat_wind:
var wind_direction_3d := Vector3(environment_config.wind_direction.x, 0.0, environment_config.wind_direction.y)
if wind_direction_3d.length_squared() > 0.0:
var wind_axis := wind_direction_3d.normalized()
var wind_cross := wind_axis.cross(Vector3.UP)
if wind_cross.length_squared() == 0.0:
wind_cross = Vector3.FORWARD
else:
wind_cross = wind_cross.normalized()
var wind_up := wind_cross.cross(wind_axis).normalized()
proc_mat_wind.direction = wind_axis
particles_wind.global_transform = Transform3D(Basis(wind_cross, wind_axis, wind_up), particles_wind.global_position)
_apply_wind_state()
func _apply_wind_state() -> void:
if environment_config == null:
return
var active_wind_speed := environment_config.wind_speed if is_windy else 0.0
var active_wind_strength := environment_config.wind_strength if is_windy else 0.0
RenderingServer.global_shader_parameter_set("global_wind_speed", active_wind_speed)
RenderingServer.global_shader_parameter_set("global_wind_strength", active_wind_strength)
func _apply_cloud_config() -> void:
var dir = environment_config.wind_direction
@@ -366,7 +378,7 @@ func toggle_storm(value: bool):
is_storm = value
#set lightning
func set_lightning():
func init_lightning():
lightning_light.name = "Lightning Light"
lightning_light.transform = Transform3D(
Vector3(-0.6238797, -0.342596, 0.7024259), # asse X
@@ -381,7 +393,7 @@ func set_lightning():
add_child(lightning_light)
create_lightning_sprite()
set_lightning_timer()
init_lightning_timer()
func create_lightning_sprite():
lightning_sprite = Sprite3D.new()
@@ -406,7 +418,7 @@ func create_lightning_sprite():
add_child(lightning_sprite)
#set next lightning timer
func set_lightning_timer():
func init_lightning_timer():
timer_next_lightning = randf_range(environment_config.lightning_min_time, environment_config.lightning_max_time)
func start_lightning():
@@ -460,7 +472,7 @@ func _play_thunder_delayed(delay: float):
#region Rain
#disable rain
func set_rain():
func init_rain():
if particles_rain:
particles_rain.visible = true
particles_rain.emitting = false
@@ -607,10 +619,10 @@ func toggle_snow(value: bool):
if snow_tween and snow_tween.is_valid():
snow_tween.kill()
snow_tween = create_tween()
snow_tween.tween_method(set_snow_amount, actual_snow_amount, target_snow_amount, environment_config.snow_transaction_time)
snow_tween.tween_method(init_snow_amount, actual_snow_amount, target_snow_amount, environment_config.snow_transaction_time)
#disable snow and set default values and shader
func set_snow(value: float = 0.0):
func init_snow(value: float = 0.0):
actual_snow_amount = value
RenderingServer.global_shader_parameter_set("global_snow_amount", value)
@@ -625,7 +637,7 @@ func set_snow(value: float = 0.0):
RenderingServer.global_shader_parameter_set("global_snow_start_time", -1.0)
RenderingServer.global_shader_parameter_set("global_snow_melt_time", -1.0)
func set_snow_amount(value: float):
func init_snow_amount(value: float):
actual_snow_amount = value
RenderingServer.global_shader_parameter_set("global_snow_amount", value)
@@ -663,4 +675,20 @@ func ApplyPostProcessBlurConfig() -> void:
if blur_material:
blur_material.set_shader_parameter("blur_amount", environment_config.blur_amount)
func _apply_dust_config() -> void:
var dust_color: Color = environment_config.dust_color
var dust_speed: float = environment_config.dust_speed
var dust_density: float = environment_config.dust_density
var dust_size_min: float = environment_config.dust_size_min
var dust_size_max: float = environment_config.dust_size_max
if environment_dust:
var dust_mat = environment_dust.material as ShaderMaterial
if dust_mat:
dust_mat.set_shader_parameter("dust_color", dust_color)
dust_mat.set_shader_parameter("dust_speed", dust_speed)
dust_mat.set_shader_parameter("dust_density", dust_density)
dust_mat.set_shader_parameter("dust_size_min", dust_size_min)
dust_mat.set_shader_parameter("dust_size_max", dust_size_max)
#endregion