diff --git a/addons/godotsteam/win64/~libgodotsteam.windows.template_debug.x86_64.dll b/addons/godotsteam/win64/~libgodotsteam.windows.template_debug.x86_64.dll new file mode 100644 index 0000000..2d345af Binary files /dev/null and b/addons/godotsteam/win64/~libgodotsteam.windows.template_debug.x86_64.dll differ diff --git a/core/biome_generator/biome_generator.gd b/core/biome_generator/biome_generator.gd index e35e13e..1b57198 100644 --- a/core/biome_generator/biome_generator.gd +++ b/core/biome_generator/biome_generator.gd @@ -86,7 +86,7 @@ const RIVER_NEIGHBOUR_OFFSETS: Dictionary = { ##max cells to search around a lamppost chunk @export_range(1, 6, 1) var lamppost_search_radius_cells: int = 3 ##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 @export var lamppost_obstacle_check_enabled: bool = true diff --git a/core/daynight/environment_manager.gd b/core/daynight/environment_manager.gd index e93489a..57ec233 100644 --- a/core/daynight/environment_manager.gd +++ b/core/daynight/environment_manager.gd @@ -80,6 +80,9 @@ func _ready() -> void: weather_controller.name = "WeatherController" add_child(weather_controller) + if day_night_controller != null: + select_day_time(day_night_controller.current_time) + func _process(_delta: float) -> void: _process_pending_environment_nodes() diff --git a/core/daynight/weather_controller.gd b/core/daynight/weather_controller.gd index c427a76..68a4b79 100644 --- a/core/daynight/weather_controller.gd +++ b/core/daynight/weather_controller.gd @@ -53,7 +53,7 @@ var is_storm: bool = false var cold_tween: Tween var wind_tween: Tween 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_strength: float = 0.0 var current_wind_fade: float = 0.0 @@ -128,10 +128,8 @@ func _process(delta: float) -> void: _follow_camera() - var is_night = day_time >= 2.5 - if particles_fireflies: - particles_fireflies.emitting = thereare_fireflies and is_night and not is_raining and not is_snowing and not is_storm - + _update_fireflies_visibility() + var base_tint: Color var base_sky_top: Color var base_sky_horizon: 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_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 rain_weather_amount: float = 0.0 - if is_raining: - rain_weather_amount = clamp(rain_intensity, 0.0, 1.0) + var rain_weather_amount: float = clamp(rain_intensity, 0.0, 1.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: storm_weather_amount = clamp((rain_intensity - 1.0) / (environment_config.storm_rain_intensity_multiplier - 1.0), 0.0, 1.0) else: @@ -389,9 +385,7 @@ func _follow_camera() -> void: func toggle_fireflies(value: bool): thereare_fireflies = value - var is_night = day_time >= 2.5 - if particles_fireflies: - particles_fireflies.emitting = thereare_fireflies and is_night and not is_raining + _update_fireflies_visibility() #disable fireflies and set default values and materials func init_fireflies(): @@ -402,7 +396,16 @@ func init_fireflies(): var proc_mat = particles_fireflies.process_material as ParticleProcessMaterial if proc_mat: 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 #region Wind @@ -410,7 +413,7 @@ func init_fireflies(): func toggle_wind(value: bool): is_windy = value if particles_wind: - particles_wind.emitting = is_windy + particles_wind.emitting = true _apply_wind_state() _emit_weather_event_label() @@ -420,7 +423,7 @@ func init_wind(): _update_wind_amount_from_strength(environment_config.wind_strength) if particles_wind: particles_wind.visible = true - particles_wind.emitting = false + particles_wind.emitting = true particles_wind.amount = environment_config.wind_amount var proc_mat_wind = particles_wind.process_material as ParticleProcessMaterial if proc_mat_wind: @@ -451,6 +454,11 @@ func _apply_wind_config() -> void: _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: if environment_config == null: return @@ -458,20 +466,23 @@ func _apply_wind_state(immediate: bool = false) -> void: if wind_tween and wind_tween.is_valid(): wind_tween.kill() - 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 - var active_wind_fade := 1.0 if is_windy else 0.0 + if particles_wind: + particles_wind.emitting = true + + var active_wind_speed := environment_config.wind_speed + var active_wind_strength := _get_target_wind_strength() + var active_wind_fade := 1.0 if immediate: _set_current_wind_speed(active_wind_speed) _set_current_wind_strength(active_wind_strength) _set_current_wind_fade(active_wind_fade) return - _set_current_wind_speed(environment_config.wind_speed) - _set_current_wind_strength(environment_config.wind_strength) + _set_current_wind_speed(active_wind_speed) + _set_current_wind_fade(active_wind_fade) 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_callback(_finish_wind_fade_out) + 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_transition) func _set_current_wind_speed(value: float) -> void: current_wind_speed = value @@ -481,6 +492,7 @@ func _set_current_wind_speed(value: float) -> void: func _set_current_wind_strength(value: float) -> void: current_wind_strength = value RenderingServer.global_shader_parameter_set("global_wind_strength", value) + _set_wind_particles_amount_from_strength(value) _sync_wind_event_state() 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 wind_parameters_changed.emit(current_wind_speed, current_wind_strength, current_wind_fade, environment_config.wind_direction) -func _finish_wind_fade_out() -> void: - if is_windy: - return - - _set_current_wind_speed(0.0) - _set_current_wind_strength(0.0) - _set_current_wind_fade(0.0) +func _finish_wind_transition() -> void: + _set_current_wind_speed(environment_config.wind_speed) + _set_current_wind_strength(_get_target_wind_strength()) + _set_current_wind_fade(1.0) func change_wind_strength(value: float) -> void: if environment_config == null: @@ -508,10 +517,11 @@ func change_wind_strength(value: float) -> void: environment_config.wind_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) if particles_wind: particles_wind.amount = environment_config.wind_amount + _apply_wind_state() func _update_wind_amount_from_strength(value: float) -> void: if environment_config == null: @@ -519,12 +529,22 @@ func _update_wind_amount_from_strength(value: float) -> void: if max_wind_amount <= 0: 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 amount_ratio: float = normalized_strength if normalized_strength > 0.0 and 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: if random_weather_restore_tween and random_weather_restore_tween.is_valid(): diff --git a/core/environment_config.gd b/core/environment_config.gd index fdaeb17..53974f5 100644 --- a/core/environment_config.gd +++ b/core/environment_config.gd @@ -185,7 +185,8 @@ extends Resource @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_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_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