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