fix fog and weather controller
This commit is contained in:
@@ -30,7 +30,7 @@ transparency = 2
|
||||
alpha_scissor_threshold = 0.0
|
||||
alpha_antialiasing_mode = 0
|
||||
disable_ambient_light = true
|
||||
albedo_color = Color(0.07500001, 0.06400001, 0.12100001, 0.39999998)
|
||||
albedo_color = Color(0.1334653, 0.106680326, 0.15061459, 0.47993344)
|
||||
billboard_mode = 3
|
||||
particles_anim_h_frames = 1
|
||||
particles_anim_v_frames = 1
|
||||
@@ -46,7 +46,7 @@ shader_parameter/texture_scale = Vector2(1, 1)
|
||||
shader_parameter/edge_softness_y = 0.2
|
||||
shader_parameter/edge_softness_x = 0.1
|
||||
shader_parameter/night_intensity = 0.0
|
||||
shader_parameter/sun_color = Color(1, 1, 1, 1)
|
||||
shader_parameter/sun_color = Color(1, 0.6716112, 0.3432224, 1)
|
||||
|
||||
[sub_resource type="Resource" id="Resource_r4tfj"]
|
||||
script = ExtResource("2_h6hjk")
|
||||
|
||||
@@ -1,29 +1,15 @@
|
||||
shader_type canvas_item;
|
||||
|
||||
// Colore della tua nebbia (scegli un colore che stia bene col tuo Skybox)
|
||||
uniform vec4 fog_color : source_color = vec4(0.85, 0.9, 0.95, 1.0);
|
||||
|
||||
// Quanto è grande lo spazio pulito al centro per il treno
|
||||
uniform float clear_center_radius : hint_range(0.0, 1.0) = 0.4;
|
||||
|
||||
// Quanto è morbida la sfumatura della nebbia verso i bordi
|
||||
uniform float edge_softness : hint_range(0.01, 1.0) = 0.5;
|
||||
|
||||
// Opacità massima ai bordi estremi dello schermo
|
||||
uniform float max_opacity : hint_range(0.0, 1.0) = 0.8;
|
||||
|
||||
void fragment() {
|
||||
// Calcola la distanza del pixel dal centro dello schermo (0.5, 0.5)
|
||||
float dist_from_center = distance(SCREEN_UV, vec2(0.5));
|
||||
|
||||
// Crea una maschera morbida circolare
|
||||
// Al centro (distanza < clear_center) sarà 0.0 (trasparente)
|
||||
// Verso i bordi salirà dolcemente fino a 1.0 (opaco)
|
||||
float fog_amount = smoothstep(clear_center_radius, clear_center_radius + edge_softness, dist_from_center);
|
||||
|
||||
// Moltiplica per l'opacità massima desiderata
|
||||
fog_amount *= max_opacity;
|
||||
|
||||
// Applica il colore della nebbia solo dove serve
|
||||
COLOR = vec4(fog_color.rgb, fog_color.a * fog_amount);
|
||||
}
|
||||
@@ -29,6 +29,7 @@ var is_snowing: bool = false
|
||||
var is_snow_accumulated: bool = false
|
||||
var actual_snow_amount: float = 0.0
|
||||
|
||||
var is_storm: bool = false
|
||||
var cold_tween: Tween
|
||||
var is_windy: bool = false
|
||||
var thereare_fireflies: bool = false
|
||||
@@ -61,6 +62,7 @@ func _ready() -> void:
|
||||
UIEvents.toggle_snow.connect(toggle_snow)
|
||||
UIEvents.toggle_wind.connect(toggle_wind)
|
||||
UIEvents.toggle_fireflies.connect(toggle_fireflies)
|
||||
UIEvents.toggle_storm.connect(toggle_storm)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
var base_tint: Color
|
||||
@@ -74,9 +76,6 @@ func _process(delta: float) -> void:
|
||||
var base_grad_bot: Color
|
||||
var base_grad_intensity: float
|
||||
var base_rotation_sun: Vector3
|
||||
|
||||
var is_storm = is_raining and is_snowing
|
||||
var is_night = day_time >= 2.5
|
||||
|
||||
if is_storm:
|
||||
rain_intensity = move_toward(rain_intensity, 1.0, delta * 0.5)
|
||||
@@ -87,13 +86,7 @@ func _process(delta: float) -> void:
|
||||
set_lightning_timer()
|
||||
else:
|
||||
rain_intensity = move_toward(rain_intensity, 0.0, delta * 0.5)
|
||||
|
||||
if environment_config.material_clouds:
|
||||
var current_density = lerp(0.4, 1.0, rain_intensity)
|
||||
environment_config.material_clouds.set_shader_parameter("cloud_density", current_density)
|
||||
var current_sharpness = lerp(0.14, 0.0, rain_intensity)
|
||||
environment_config.material_clouds.set_shader_parameter("center_sharpness", current_sharpness)
|
||||
|
||||
|
||||
if day_time <= 2.0:
|
||||
var t = day_time - 1.0
|
||||
base_tint = environment_config.morning_color.lerp(environment_config.afternoon_color, t)
|
||||
@@ -183,6 +176,12 @@ func _process(delta: float) -> void:
|
||||
sky_mat.set_shader_parameter("sun_color", final_tint)
|
||||
sky_mat.set_shader_parameter("night_intensity", night_val)
|
||||
|
||||
if environment_config.material_clouds:
|
||||
var current_density = lerp(0.4, 1.0, rain_intensity)
|
||||
environment_config.material_clouds.set_shader_parameter("cloud_density", current_density)
|
||||
var current_sharpness = lerp(0.14, 0.0, rain_intensity)
|
||||
environment_config.material_clouds.set_shader_parameter("center_sharpness", current_sharpness)
|
||||
|
||||
if environment_config.material_fog:
|
||||
environment_config.material_fog.set_shader_parameter("night_intensity", night_val)
|
||||
environment_config.material_fog.set_shader_parameter("sun_color", final_tint)
|
||||
@@ -230,6 +229,10 @@ func set_wind():
|
||||
#endregion
|
||||
|
||||
#region Lightning
|
||||
|
||||
func toggle_storm(value: bool):
|
||||
is_storm = value
|
||||
|
||||
#set lightning
|
||||
func set_lightning():
|
||||
lightning_light.name = "Lightning Light"
|
||||
@@ -276,23 +279,23 @@ func set_lightning_timer():
|
||||
|
||||
func start_lightning():
|
||||
if lightning_light:
|
||||
var tween_luce = create_tween()
|
||||
var tween_lighting = create_tween()
|
||||
lightning_light.light_energy = 5.0
|
||||
|
||||
tween_luce.tween_interval(0.05)
|
||||
tween_luce.tween_callback(func(): lightning_light.light_energy = 0.0)
|
||||
tween_luce.tween_interval(0.05)
|
||||
tween_luce.tween_callback(func(): lightning_light.light_energy = 2.0)
|
||||
tween_luce.tween_method(func(val): lightning_light.light_energy = val, 2.0, 0.0, 0.2)
|
||||
tween_lighting.tween_interval(0.05)
|
||||
tween_lighting.tween_callback(func(): lightning_light.light_energy = 0.0)
|
||||
tween_lighting.tween_interval(0.05)
|
||||
tween_lighting.tween_callback(func(): lightning_light.light_energy = 2.0)
|
||||
tween_lighting.tween_method(func(val): lightning_light.light_energy = val, 2.0, 0.0, 0.2)
|
||||
|
||||
var lightning_number = randi_range(environment_config.lightning_min, environment_config.lightning_max)
|
||||
|
||||
for i in lightning_number:
|
||||
if lightning_sprite:
|
||||
var angolo_casuale = randf() * TAU
|
||||
var distanza = randf_range(10.0, 40.0)
|
||||
var random_angle = randf() * TAU
|
||||
var distance = randf_range(10.0, 40.0)
|
||||
|
||||
lightning_sprite.position = Vector3(cos(angolo_casuale) * distanza, 10.0, sin(angolo_casuale) * distanza)
|
||||
lightning_sprite.position = Vector3(cos(random_angle) * distance, 10.0, sin(random_angle) * distance)
|
||||
|
||||
lightning_sprite.modulate = environment_config.lightning_color
|
||||
lightning_sprite.modulate.a = 1.0
|
||||
|
||||
Reference in New Issue
Block a user