fix wires, fix exposition for wheater change, add base wind, add fireflies when is night
This commit is contained in:
Binary file not shown.
@@ -86,7 +86,7 @@ const RIVER_NEIGHBOUR_OFFSETS: Dictionary = {
|
|||||||
##max cells to search around a lamppost chunk
|
##max cells to search around a lamppost chunk
|
||||||
@export_range(1, 6, 1) var lamppost_search_radius_cells: int = 3
|
@export_range(1, 6, 1) var lamppost_search_radius_cells: int = 3
|
||||||
##max allowed distance between lamppost pairs
|
##max allowed distance between lamppost pairs
|
||||||
@export var lamppost_max_wire_distance: float = 60.0
|
@export var lamppost_max_wire_distance: float = 35.0
|
||||||
##if true wire connections blocked by colliders are discarded
|
##if true wire connections blocked by colliders are discarded
|
||||||
@export var lamppost_obstacle_check_enabled: bool = true
|
@export var lamppost_obstacle_check_enabled: bool = true
|
||||||
|
|
||||||
|
|||||||
@@ -80,6 +80,9 @@ func _ready() -> void:
|
|||||||
weather_controller.name = "WeatherController"
|
weather_controller.name = "WeatherController"
|
||||||
add_child(weather_controller)
|
add_child(weather_controller)
|
||||||
|
|
||||||
|
if day_night_controller != null:
|
||||||
|
select_day_time(day_night_controller.current_time)
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
_process_pending_environment_nodes()
|
_process_pending_environment_nodes()
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ var is_storm: bool = false
|
|||||||
var cold_tween: Tween
|
var cold_tween: Tween
|
||||||
var wind_tween: Tween
|
var wind_tween: Tween
|
||||||
var is_windy: bool = false
|
var is_windy: bool = false
|
||||||
var thereare_fireflies: bool = false
|
var thereare_fireflies: bool = true
|
||||||
var current_wind_speed: float = 0.0
|
var current_wind_speed: float = 0.0
|
||||||
var current_wind_strength: float = 0.0
|
var current_wind_strength: float = 0.0
|
||||||
var current_wind_fade: float = 0.0
|
var current_wind_fade: float = 0.0
|
||||||
@@ -128,9 +128,7 @@ func _process(delta: float) -> void:
|
|||||||
|
|
||||||
_follow_camera()
|
_follow_camera()
|
||||||
|
|
||||||
var is_night = day_time >= 2.5
|
_update_fireflies_visibility()
|
||||||
if particles_fireflies:
|
|
||||||
particles_fireflies.emitting = thereare_fireflies and is_night and not is_raining and not is_snowing and not is_storm
|
|
||||||
|
|
||||||
var base_tint: Color
|
var base_tint: Color
|
||||||
var base_sky_top: Color
|
var base_sky_top: Color
|
||||||
@@ -197,11 +195,9 @@ func _process(delta: float) -> void:
|
|||||||
var final_fog_color = base_fog_color.lerp(base_fog_color * 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))
|
var final_fog_density = lerp(base_fog_density, base_fog_density * 4.0, clamp(rain_intensity, 0.0, 1.0))
|
||||||
var final_water_color = base_water_color.darkened(clamp(environment_config.water_darkening_rain, 0.0, 1.0) * clamp(rain_intensity, 0.0, 1.0))
|
var final_water_color = base_water_color.darkened(clamp(environment_config.water_darkening_rain, 0.0, 1.0) * clamp(rain_intensity, 0.0, 1.0))
|
||||||
var rain_weather_amount: float = 0.0
|
var rain_weather_amount: float = clamp(rain_intensity, 0.0, 1.0)
|
||||||
if is_raining:
|
|
||||||
rain_weather_amount = clamp(rain_intensity, 0.0, 1.0)
|
|
||||||
var storm_weather_amount: float = 0.0
|
var storm_weather_amount: float = 0.0
|
||||||
if is_raining and is_storm:
|
if is_storm:
|
||||||
if environment_config.storm_rain_intensity_multiplier > 1.0:
|
if environment_config.storm_rain_intensity_multiplier > 1.0:
|
||||||
storm_weather_amount = clamp((rain_intensity - 1.0) / (environment_config.storm_rain_intensity_multiplier - 1.0), 0.0, 1.0)
|
storm_weather_amount = clamp((rain_intensity - 1.0) / (environment_config.storm_rain_intensity_multiplier - 1.0), 0.0, 1.0)
|
||||||
else:
|
else:
|
||||||
@@ -389,9 +385,7 @@ func _follow_camera() -> void:
|
|||||||
|
|
||||||
func toggle_fireflies(value: bool):
|
func toggle_fireflies(value: bool):
|
||||||
thereare_fireflies = value
|
thereare_fireflies = value
|
||||||
var is_night = day_time >= 2.5
|
_update_fireflies_visibility()
|
||||||
if particles_fireflies:
|
|
||||||
particles_fireflies.emitting = thereare_fireflies and is_night and not is_raining
|
|
||||||
|
|
||||||
#disable fireflies and set default values and materials
|
#disable fireflies and set default values and materials
|
||||||
func init_fireflies():
|
func init_fireflies():
|
||||||
@@ -402,6 +396,15 @@ func init_fireflies():
|
|||||||
var proc_mat = particles_fireflies.process_material as ParticleProcessMaterial
|
var proc_mat = particles_fireflies.process_material as ParticleProcessMaterial
|
||||||
if proc_mat:
|
if proc_mat:
|
||||||
proc_mat.emission_box_extents = Vector3(environment_config.fireflies_spawn_ray, environment_config.fireflies_spawn_height, environment_config.fireflies_spawn_ray)
|
proc_mat.emission_box_extents = Vector3(environment_config.fireflies_spawn_ray, environment_config.fireflies_spawn_height, environment_config.fireflies_spawn_ray)
|
||||||
|
_update_fireflies_visibility()
|
||||||
|
|
||||||
|
func _should_show_fireflies() -> bool:
|
||||||
|
var is_night: bool = day_time >= 2.5
|
||||||
|
return thereare_fireflies and is_night and not is_raining and not is_snowing and not is_storm
|
||||||
|
|
||||||
|
func _update_fireflies_visibility() -> void:
|
||||||
|
if particles_fireflies:
|
||||||
|
particles_fireflies.emitting = _should_show_fireflies()
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -410,7 +413,7 @@ func init_fireflies():
|
|||||||
func toggle_wind(value: bool):
|
func toggle_wind(value: bool):
|
||||||
is_windy = value
|
is_windy = value
|
||||||
if particles_wind:
|
if particles_wind:
|
||||||
particles_wind.emitting = is_windy
|
particles_wind.emitting = true
|
||||||
|
|
||||||
_apply_wind_state()
|
_apply_wind_state()
|
||||||
_emit_weather_event_label()
|
_emit_weather_event_label()
|
||||||
@@ -420,7 +423,7 @@ func init_wind():
|
|||||||
_update_wind_amount_from_strength(environment_config.wind_strength)
|
_update_wind_amount_from_strength(environment_config.wind_strength)
|
||||||
if particles_wind:
|
if particles_wind:
|
||||||
particles_wind.visible = true
|
particles_wind.visible = true
|
||||||
particles_wind.emitting = false
|
particles_wind.emitting = true
|
||||||
particles_wind.amount = environment_config.wind_amount
|
particles_wind.amount = environment_config.wind_amount
|
||||||
var proc_mat_wind = particles_wind.process_material as ParticleProcessMaterial
|
var proc_mat_wind = particles_wind.process_material as ParticleProcessMaterial
|
||||||
if proc_mat_wind:
|
if proc_mat_wind:
|
||||||
@@ -451,6 +454,11 @@ func _apply_wind_config() -> void:
|
|||||||
|
|
||||||
_apply_wind_state(true)
|
_apply_wind_state(true)
|
||||||
|
|
||||||
|
func _get_target_wind_strength() -> float:
|
||||||
|
if is_windy:
|
||||||
|
return environment_config.wind_boost_strength
|
||||||
|
return environment_config.wind_strength
|
||||||
|
|
||||||
func _apply_wind_state(immediate: bool = false) -> void:
|
func _apply_wind_state(immediate: bool = false) -> void:
|
||||||
if environment_config == null:
|
if environment_config == null:
|
||||||
return
|
return
|
||||||
@@ -458,20 +466,23 @@ func _apply_wind_state(immediate: bool = false) -> void:
|
|||||||
if wind_tween and wind_tween.is_valid():
|
if wind_tween and wind_tween.is_valid():
|
||||||
wind_tween.kill()
|
wind_tween.kill()
|
||||||
|
|
||||||
var active_wind_speed := environment_config.wind_speed if is_windy else 0.0
|
if particles_wind:
|
||||||
var active_wind_strength := environment_config.wind_strength if is_windy else 0.0
|
particles_wind.emitting = true
|
||||||
var active_wind_fade := 1.0 if is_windy else 0.0
|
|
||||||
|
var active_wind_speed := environment_config.wind_speed
|
||||||
|
var active_wind_strength := _get_target_wind_strength()
|
||||||
|
var active_wind_fade := 1.0
|
||||||
if immediate:
|
if immediate:
|
||||||
_set_current_wind_speed(active_wind_speed)
|
_set_current_wind_speed(active_wind_speed)
|
||||||
_set_current_wind_strength(active_wind_strength)
|
_set_current_wind_strength(active_wind_strength)
|
||||||
_set_current_wind_fade(active_wind_fade)
|
_set_current_wind_fade(active_wind_fade)
|
||||||
return
|
return
|
||||||
|
|
||||||
_set_current_wind_speed(environment_config.wind_speed)
|
_set_current_wind_speed(active_wind_speed)
|
||||||
_set_current_wind_strength(environment_config.wind_strength)
|
_set_current_wind_fade(active_wind_fade)
|
||||||
wind_tween = create_tween()
|
wind_tween = create_tween()
|
||||||
wind_tween.tween_method(_set_current_wind_fade, current_wind_fade, active_wind_fade, environment_config.wind_fade_in_out_time)
|
wind_tween.tween_method(_set_current_wind_strength, current_wind_strength, active_wind_strength, environment_config.wind_fade_in_out_time)
|
||||||
wind_tween.tween_callback(_finish_wind_fade_out)
|
wind_tween.tween_callback(_finish_wind_transition)
|
||||||
|
|
||||||
func _set_current_wind_speed(value: float) -> void:
|
func _set_current_wind_speed(value: float) -> void:
|
||||||
current_wind_speed = value
|
current_wind_speed = value
|
||||||
@@ -481,6 +492,7 @@ func _set_current_wind_speed(value: float) -> void:
|
|||||||
func _set_current_wind_strength(value: float) -> void:
|
func _set_current_wind_strength(value: float) -> void:
|
||||||
current_wind_strength = value
|
current_wind_strength = value
|
||||||
RenderingServer.global_shader_parameter_set("global_wind_strength", value)
|
RenderingServer.global_shader_parameter_set("global_wind_strength", value)
|
||||||
|
_set_wind_particles_amount_from_strength(value)
|
||||||
_sync_wind_event_state()
|
_sync_wind_event_state()
|
||||||
|
|
||||||
func _set_current_wind_fade(value: float) -> void:
|
func _set_current_wind_fade(value: float) -> void:
|
||||||
@@ -494,13 +506,10 @@ func _sync_wind_event_state() -> void:
|
|||||||
#used to notify wind_decoration when wind change state
|
#used to notify wind_decoration when wind change state
|
||||||
wind_parameters_changed.emit(current_wind_speed, current_wind_strength, current_wind_fade, environment_config.wind_direction)
|
wind_parameters_changed.emit(current_wind_speed, current_wind_strength, current_wind_fade, environment_config.wind_direction)
|
||||||
|
|
||||||
func _finish_wind_fade_out() -> void:
|
func _finish_wind_transition() -> void:
|
||||||
if is_windy:
|
_set_current_wind_speed(environment_config.wind_speed)
|
||||||
return
|
_set_current_wind_strength(_get_target_wind_strength())
|
||||||
|
_set_current_wind_fade(1.0)
|
||||||
_set_current_wind_speed(0.0)
|
|
||||||
_set_current_wind_strength(0.0)
|
|
||||||
_set_current_wind_fade(0.0)
|
|
||||||
|
|
||||||
func change_wind_strength(value: float) -> void:
|
func change_wind_strength(value: float) -> void:
|
||||||
if environment_config == null:
|
if environment_config == null:
|
||||||
@@ -508,10 +517,11 @@ func change_wind_strength(value: float) -> void:
|
|||||||
|
|
||||||
environment_config.wind_strength = value
|
environment_config.wind_strength = value
|
||||||
_update_wind_amount_from_strength(value)
|
_update_wind_amount_from_strength(value)
|
||||||
if is_windy or current_wind_fade > 0.0:
|
if current_wind_fade > 0.0 and not is_windy:
|
||||||
_set_current_wind_strength(value)
|
_set_current_wind_strength(value)
|
||||||
if particles_wind:
|
if particles_wind:
|
||||||
particles_wind.amount = environment_config.wind_amount
|
particles_wind.amount = environment_config.wind_amount
|
||||||
|
_apply_wind_state()
|
||||||
|
|
||||||
func _update_wind_amount_from_strength(value: float) -> void:
|
func _update_wind_amount_from_strength(value: float) -> void:
|
||||||
if environment_config == null:
|
if environment_config == null:
|
||||||
@@ -519,12 +529,22 @@ func _update_wind_amount_from_strength(value: float) -> void:
|
|||||||
if max_wind_amount <= 0:
|
if max_wind_amount <= 0:
|
||||||
max_wind_amount = max(environment_config.wind_amount, 1)
|
max_wind_amount = max(environment_config.wind_amount, 1)
|
||||||
|
|
||||||
|
environment_config.wind_amount = _get_wind_particles_amount_from_strength(value)
|
||||||
|
|
||||||
|
func _get_wind_particles_amount_from_strength(value: float) -> int:
|
||||||
|
if max_wind_amount <= 0:
|
||||||
|
max_wind_amount = 1
|
||||||
|
|
||||||
var normalized_strength: float = clamp(value, 0.0, 1.0)
|
var normalized_strength: float = clamp(value, 0.0, 1.0)
|
||||||
var amount_ratio: float = normalized_strength
|
var amount_ratio: float = normalized_strength
|
||||||
if normalized_strength > 0.0 and normalized_strength < 0.3:
|
if normalized_strength > 0.0 and normalized_strength < 0.3:
|
||||||
amount_ratio = lerp(0.08, 0.25, normalized_strength / 0.3)
|
amount_ratio = lerp(0.08, 0.25, normalized_strength / 0.3)
|
||||||
|
|
||||||
environment_config.wind_amount = roundi(max_wind_amount * amount_ratio)
|
return roundi(max_wind_amount * amount_ratio)
|
||||||
|
|
||||||
|
func _set_wind_particles_amount_from_strength(value: float) -> void:
|
||||||
|
if particles_wind:
|
||||||
|
particles_wind.amount = _get_wind_particles_amount_from_strength(value)
|
||||||
|
|
||||||
func trigger_random_weather_event(duration: float = 0.0) -> void:
|
func trigger_random_weather_event(duration: float = 0.0) -> void:
|
||||||
if random_weather_restore_tween and random_weather_restore_tween.is_valid():
|
if random_weather_restore_tween and random_weather_restore_tween.is_valid():
|
||||||
|
|||||||
@@ -185,7 +185,8 @@ extends Resource
|
|||||||
@export var wind_direction: Vector2 = Vector2(0.5, 0.4) #Global wind direction (XZ)
|
@export var wind_direction: Vector2 = Vector2(0.5, 0.4) #Global wind direction (XZ)
|
||||||
@export var wind_speed: float = 0.2 #Global wind animation speed
|
@export var wind_speed: float = 0.2 #Global wind animation speed
|
||||||
@export var wind_scale: float = 0.025 #Global wind noise scale
|
@export var wind_scale: float = 0.025 #Global wind noise scale
|
||||||
@export var wind_strength: float = 0.3 #Global wind displacement strength
|
@export var wind_strength: float = 0.12 #Low ambient wind displacement strength
|
||||||
|
@export var wind_boost_strength: float = 1.0 #Wind displacement strength while wind event is active
|
||||||
@export var cloud_scale: float = 0.5 #Cloud noise scale in sky shader
|
@export var cloud_scale: float = 0.5 #Cloud noise scale in sky shader
|
||||||
@export var cloud_speed: float = 0.05 #Cloud movement speed in sky shader
|
@export var cloud_speed: float = 0.05 #Cloud movement speed in sky shader
|
||||||
@export_range(0.01, 1.0) var cloud_scale_envshadows_rate: float = 0.01 #Cloud scale multiplier for environment shadows
|
@export_range(0.01, 1.0) var cloud_scale_envshadows_rate: float = 0.01 #Cloud scale multiplier for environment shadows
|
||||||
|
|||||||
Reference in New Issue
Block a user