add config comment
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
class_name WeatherController
|
||||
extends Node
|
||||
|
||||
var audio_player: AudioStreamPlayer3D
|
||||
var thunder_sounds: Array[AudioStream]
|
||||
|
||||
var particles_wind: GPUParticles3D
|
||||
var particles_snow: GPUParticles3D
|
||||
var particles_fireflies: GPUParticles3D
|
||||
var particles_rain: GPUParticles3D
|
||||
var godray: PackedScene
|
||||
var fog_overlay: ColorRect
|
||||
var environment_dust: ColorRect
|
||||
var blur: ColorRect
|
||||
var environment_shadows: MeshInstance3D
|
||||
@@ -41,22 +43,23 @@ var thereare_fireflies: bool = false
|
||||
|
||||
func _init(wind: GPUParticles3D, snow: GPUParticles3D,
|
||||
fireflies: GPUParticles3D, rain: GPUParticles3D, ray: PackedScene,
|
||||
fogov: ColorRect, dust: ColorRect, blurr: ColorRect, envshadows: MeshInstance3D,
|
||||
dust: ColorRect, blurr: ColorRect, envshadows: MeshInstance3D,
|
||||
thesun: DirectionalLight3D, theenvironment: WorldEnvironment, environmentconfig: EnvironmentConfig,
|
||||
thecamera: Camera3D = null) -> void:
|
||||
thecamera: Camera3D, audiostreamplayer: AudioStreamPlayer3D, thundersounds: Array[AudioStream]) -> void:
|
||||
particles_wind = wind
|
||||
particles_snow = snow
|
||||
particles_fireflies = fireflies
|
||||
particles_rain = rain
|
||||
godray = ray
|
||||
sun = thesun
|
||||
fog_overlay = fogov
|
||||
environment_dust = dust
|
||||
blur = blurr
|
||||
environment_shadows = envshadows
|
||||
environment = theenvironment
|
||||
environment_config = environmentconfig
|
||||
camera = thecamera
|
||||
thunder_sounds = thundersounds
|
||||
audio_player = audiostreamplayer
|
||||
|
||||
set_rain()
|
||||
|
||||
@@ -101,7 +104,8 @@ func _process(delta: float) -> void:
|
||||
var base_rotation_sun: Vector3
|
||||
|
||||
if is_raining:
|
||||
rain_intensity = move_toward(rain_intensity, 1.0, delta * 0.5)
|
||||
var target_rain = environment_config.storm_rain_intensity_multiplier if is_storm else 1.0
|
||||
rain_intensity = move_toward(rain_intensity, target_rain, delta * 0.5)
|
||||
if is_storm:
|
||||
timer_next_lightning -= delta
|
||||
if timer_next_lightning <= 0.0:
|
||||
@@ -139,11 +143,15 @@ func _process(delta: float) -> void:
|
||||
base_grad_intensity = lerp(environment_config.grad_intensity_afternoon, environment_config.grad_intensity_night, t)
|
||||
base_rotation_sun = environment_config.sun_rotation_afternoon.lerp(environment_config.sun_rotation_night, t)
|
||||
|
||||
var final_tint = base_tint.lerp(base_tint * environment_config.rain_mode_color, rain_intensity)
|
||||
var final_sky_top = base_sky_top.lerp(base_sky_top * environment_config.rain_mode_color, rain_intensity)
|
||||
var final_sky_horizon = base_sky_horizon.lerp(base_sky_horizon * environment_config.rain_mode_color, rain_intensity)
|
||||
var final_fog_color = base_fog_color.lerp(base_fog_color * environment_config.rain_mode_color, rain_intensity)
|
||||
var final_fog_density = lerp(base_fog_density, base_fog_density * 4.0, rain_intensity)
|
||||
var weather_color = environment_config.rain_mode_color
|
||||
if is_storm:
|
||||
var storm_blend = clamp((rain_intensity - 1.0) / (environment_config.storm_rain_intensity_multiplier - 1.0), 0.0, 1.0)
|
||||
weather_color = weather_color.lerp(environment_config.storm_mode_color, storm_blend)
|
||||
var final_tint = base_tint.lerp(base_tint * weather_color, clamp(rain_intensity, 0.0, 1.0))
|
||||
var final_sky_top = base_sky_top.lerp(base_sky_top * weather_color, clamp(rain_intensity, 0.0, 1.0))
|
||||
var final_sky_horizon = base_sky_horizon.lerp(base_sky_horizon * weather_color, clamp(rain_intensity, 0.0, 1.0))
|
||||
var final_fog_color = base_fog_color.lerp(base_fog_color * weather_color, clamp(rain_intensity, 0.0, 1.0))
|
||||
var final_fog_density = lerp(base_fog_density, base_fog_density * 4.0, clamp(rain_intensity, 0.0, 1.0))
|
||||
|
||||
final_tint = final_tint.lerp(final_tint * environment_config.snow_mode_color, actual_snow_amount)
|
||||
final_sky_top = final_sky_top.lerp(final_sky_top * environment_config.snow_mode_color, actual_snow_amount)
|
||||
@@ -151,8 +159,8 @@ func _process(delta: float) -> void:
|
||||
final_fog_color = final_fog_color.lerp(final_fog_color * environment_config.snow_mode_color, actual_snow_amount)
|
||||
|
||||
#Shader parameters for global trunk_shader
|
||||
var final_grad_top = base_grad_top.lerp(base_grad_top * environment_config.rain_mode_color, rain_intensity)
|
||||
var final_grad_bot = base_grad_bot.lerp(base_grad_bot * environment_config.rain_mode_color, rain_intensity)
|
||||
var final_grad_top = base_grad_top.lerp(base_grad_top * weather_color, clamp(rain_intensity, 0.0, 1.0))
|
||||
var final_grad_bot = base_grad_bot.lerp(base_grad_bot * weather_color, clamp(rain_intensity, 0.0, 1.0))
|
||||
|
||||
RenderingServer.global_shader_parameter_set("global_gradient_color_top", final_grad_top)
|
||||
RenderingServer.global_shader_parameter_set("global_gradient_color_bot", final_grad_bot)
|
||||
@@ -226,7 +234,7 @@ func _follow_camera() -> void:
|
||||
if particles_snow:
|
||||
particles_snow.global_position = Vector3(cam_pos.x, particles_snow.position.y, cam_pos.z)
|
||||
if particles_wind:
|
||||
particles_wind.global_position = Vector3(cam_pos.x, particles_wind.position.y, cam_pos.z)
|
||||
particles_wind.global_position = Vector3(cam_pos.x, cam_pos.y, cam_pos.z)
|
||||
if particles_fireflies:
|
||||
particles_fireflies.global_position = Vector3(cam_pos.x, particles_fireflies.position.y, cam_pos.z)
|
||||
|
||||
@@ -254,10 +262,8 @@ func set_fireflies():
|
||||
|
||||
func toggle_wind(value: bool):
|
||||
is_windy = value
|
||||
var is_night = day_time >= 2.5
|
||||
|
||||
if particles_wind:
|
||||
particles_wind.emitting = (not is_storm and not is_night and is_windy)
|
||||
particles_wind.emitting = is_windy
|
||||
|
||||
#disable wind and set default values and materials
|
||||
func set_wind():
|
||||
@@ -385,9 +391,22 @@ func start_lightning():
|
||||
tween_sprite.tween_interval(0.2)
|
||||
tween_sprite.tween_property(lightning_sprite, "modulate:a", 0.0, 0.4)
|
||||
|
||||
#Thunder sound; separated routine to do not stop the loop
|
||||
_play_thunder_delayed(randf_range(0.5, 2.5))
|
||||
|
||||
if lightning_number > 1:
|
||||
await get_tree().create_timer(randf_range(0.05, 0.15)).timeout
|
||||
|
||||
func _play_thunder_delayed(delay: float):
|
||||
await get_tree().create_timer(delay).timeout
|
||||
|
||||
if thunder_sounds.is_empty() or not audio_player:
|
||||
return
|
||||
#choose a random track
|
||||
audio_player.stream = thunder_sounds[randi() % thunder_sounds.size()]
|
||||
audio_player.pitch_scale = randf_range(0.9, 1.1)
|
||||
audio_player.play()
|
||||
|
||||
#endregion
|
||||
|
||||
#region Rain
|
||||
|
||||
Reference in New Issue
Block a user