add random weather function

This commit is contained in:
2026-04-24 17:44:43 +02:00
parent 72c933ba73
commit e8f2c4db84
5 changed files with 96 additions and 14 deletions

View File

@@ -49,6 +49,7 @@ 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
var max_wind_amount: int = 0 var max_wind_amount: int = 0
var random_weather_restore_tween: Tween
func _init(wind: GPUParticles3D, snow: GPUParticles3D, func _init(wind: GPUParticles3D, snow: GPUParticles3D,
fireflies: GPUParticles3D, rain: GPUParticles3D, ray: PackedScene, fireflies: GPUParticles3D, rain: GPUParticles3D, ray: PackedScene,
@@ -98,6 +99,7 @@ func _ready() -> void:
UIEvents.toggle_snow.connect(toggle_snow) UIEvents.toggle_snow.connect(toggle_snow)
UIEvents.toggle_wind.connect(toggle_wind) UIEvents.toggle_wind.connect(toggle_wind)
UIEvents.wind_change.connect(change_wind_strength) UIEvents.wind_change.connect(change_wind_strength)
UIEvents.trigger_random_weather.connect(trigger_random_weather_event)
UIEvents.toggle_fireflies.connect(toggle_fireflies) UIEvents.toggle_fireflies.connect(toggle_fireflies)
UIEvents.toggle_storm.connect(toggle_storm) UIEvents.toggle_storm.connect(toggle_storm)
UIEvents.toggle_dust.connect(toggle_dust) UIEvents.toggle_dust.connect(toggle_dust)
@@ -410,6 +412,51 @@ func _update_wind_amount_from_strength(value: float) -> void:
environment_config.wind_amount = roundi(max_wind_amount * amount_ratio) environment_config.wind_amount = roundi(max_wind_amount * amount_ratio)
func trigger_random_weather_event(duration: float = 0.0) -> void:
if random_weather_restore_tween and random_weather_restore_tween.is_valid():
random_weather_restore_tween.kill()
var previous_rain: bool = is_raining
var previous_snow: bool = is_snowing
var previous_wind: bool = is_windy
var previous_storm: bool = is_storm
var random_event_index: int = randi_range(0, 3)
match random_event_index:
0:
_apply_weather_event_state(false, true, false, false)
1:
_apply_weather_event_state(true, false, false, false)
2:
_apply_weather_event_state(false, false, true, false)
_:
_apply_weather_event_state(true, false, false, true)
if duration > 0.0:
random_weather_restore_tween = create_tween()
random_weather_restore_tween.tween_interval(duration)
random_weather_restore_tween.tween_callback(func():
_apply_weather_event_state(previous_rain, previous_snow, previous_wind, previous_storm)
)
func _apply_weather_event_state(rain_enabled: bool, snow_enabled: bool, wind_enabled: bool, storm_enabled: bool = false) -> void:
if is_storm and not storm_enabled:
toggle_storm(false)
if is_raining and not rain_enabled:
toggle_rain(false)
if is_snowing and not snow_enabled:
toggle_snow(false)
if is_windy and not wind_enabled:
toggle_wind(false)
if not is_raining and rain_enabled:
toggle_rain(true)
if not is_snowing and snow_enabled:
toggle_snow(true)
if not is_windy and wind_enabled:
toggle_wind(true)
if not is_storm and storm_enabled:
toggle_storm(true)
func _apply_cloud_config() -> void: func _apply_cloud_config() -> void:
var dir = environment_config.wind_direction var dir = environment_config.wind_direction
var cloud_scale = environment_config.cloud_scale var cloud_scale = environment_config.cloud_scale

View File

@@ -10,6 +10,8 @@ signal toggle_wind(value: bool)
@warning_ignore("unused_signal") @warning_ignore("unused_signal")
signal wind_change(value: float) signal wind_change(value: float)
@warning_ignore("unused_signal") @warning_ignore("unused_signal")
signal trigger_random_weather(duration: float)
@warning_ignore("unused_signal")
signal toggle_fireflies(value: bool) signal toggle_fireflies(value: bool)
@warning_ignore("unused_signal") @warning_ignore("unused_signal")
signal toggle_storm(value: bool) signal toggle_storm(value: bool)

View File

@@ -349,6 +349,20 @@ theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
button_pressed = true button_pressed = true
text = "Shadows" text = "Shadows"
[node name="RandomWeather" type="Button" parent="Control" unique_id=1047710802]
layout_mode = 0
offset_left = 12.0
offset_top = 289.0
offset_right = 157.0
offset_bottom = 320.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_hover_color = Color(1, 1, 1, 1)
theme_override_colors/font_hover_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Random Weather (10\")"
[connection signal="toggled" from="Control/Snow" to="Control" method="_on_snow_toggled"] [connection signal="toggled" from="Control/Snow" to="Control" method="_on_snow_toggled"]
[connection signal="toggled" from="Control/Rain" to="Control" method="_on_rain_toggled"] [connection signal="toggled" from="Control/Rain" to="Control" method="_on_rain_toggled"]
[connection signal="toggled" from="Control/Wind" to="Control" method="_on_wind_toggled"] [connection signal="toggled" from="Control/Wind" to="Control" method="_on_wind_toggled"]
@@ -361,3 +375,4 @@ text = "Shadows"
[connection signal="toggled" from="Control/Blur" to="Control" method="_on_blur_toggled"] [connection signal="toggled" from="Control/Blur" to="Control" method="_on_blur_toggled"]
[connection signal="toggled" from="Control/Pause" to="Control" method="_on_pause_toggled"] [connection signal="toggled" from="Control/Pause" to="Control" method="_on_pause_toggled"]
[connection signal="toggled" from="Control/Shadows" to="Control" method="_on_shadows_toggled"] [connection signal="toggled" from="Control/Shadows" to="Control" method="_on_shadows_toggled"]
[connection signal="pressed" from="Control/RandomWeather" to="Control" method="_on_random_weather_pressed"]

View File

@@ -25,6 +25,9 @@ func _on_wind_toggled(toggled_on: bool) -> void:
func _on_wind_slider_value_changed(value: float) -> void: func _on_wind_slider_value_changed(value: float) -> void:
UIEvents.wind_change.emit(value) UIEvents.wind_change.emit(value)
func _on_random_weather_pressed() -> void:
UIEvents.trigger_random_weather.emit(10.0)
func _on_fireflies_toggled(toggled_on: bool) -> void: func _on_fireflies_toggled(toggled_on: bool) -> void:
UIEvents.toggle_fireflies.emit(toggled_on) UIEvents.toggle_fireflies.emit(toggled_on)

View File

@@ -203,6 +203,20 @@ theme_override_colors/font_hover_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1) theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Fireflies" text = "Fireflies"
[node name="RandomWeather" type="Button" parent="Control" unique_id=1114190563]
layout_mode = 0
offset_left = 24.0
offset_top = 121.0
offset_right = 169.0
offset_bottom = 152.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_hover_color = Color(1, 1, 1, 1)
theme_override_colors/font_hover_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Random Weather (10\")"
[node name="Storm" type="CheckButton" parent="Control" unique_id=936960924] [node name="Storm" type="CheckButton" parent="Control" unique_id=936960924]
layout_mode = 0 layout_mode = 0
offset_left = 110.0 offset_left = 110.0
@@ -220,9 +234,9 @@ text = "Storm"
[node name="DayTimeLabel" type="Label" parent="Control" unique_id=1673596218] [node name="DayTimeLabel" type="Label" parent="Control" unique_id=1673596218]
layout_mode = 0 layout_mode = 0
offset_left = 26.0 offset_left = 26.0
offset_top = 132.0 offset_top = 170.0
offset_right = 360.0 offset_right = 360.0
offset_bottom = 155.0 offset_bottom = 193.0
theme_override_colors/font_color = Color(1, 1, 1, 1) theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1) theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Time 00:00" text = "Time 00:00"
@@ -230,18 +244,18 @@ text = "Time 00:00"
[node name="DayTimeSlider" type="HSlider" parent="Control" unique_id=530788076] [node name="DayTimeSlider" type="HSlider" parent="Control" unique_id=530788076]
layout_mode = 0 layout_mode = 0
offset_left = 26.0 offset_left = 26.0
offset_top = 156.0 offset_top = 194.0
offset_right = 205.0 offset_right = 205.0
offset_bottom = 172.0 offset_bottom = 210.0
max_value = 1.0 max_value = 1.0
step = 0.01 step = 0.01
[node name="DayTimeOptions" type="OptionButton" parent="Control" unique_id=1354705309] [node name="DayTimeOptions" type="OptionButton" parent="Control" unique_id=1354705309]
layout_mode = 0 layout_mode = 0
offset_left = 25.0 offset_left = 25.0
offset_top = 179.0 offset_top = 217.0
offset_right = 136.0 offset_right = 136.0
offset_bottom = 210.0 offset_bottom = 248.0
selected = 1 selected = 1
item_count = 4 item_count = 4
popup/item_0/text = "Sunrise" popup/item_0/text = "Sunrise"
@@ -256,9 +270,9 @@ popup/item_3/id = 4
[node name="Dust" type="CheckButton" parent="Control" unique_id=2023312048] [node name="Dust" type="CheckButton" parent="Control" unique_id=2023312048]
layout_mode = 0 layout_mode = 0
offset_left = 21.0 offset_left = 21.0
offset_top = 214.0 offset_top = 252.0
offset_right = 150.0 offset_right = 150.0
offset_bottom = 245.0 offset_bottom = 283.0
theme_override_colors/font_color = Color(1, 1, 1, 1) theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1) theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1) theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -271,9 +285,9 @@ text = "Dust"
[node name="Blur" type="CheckButton" parent="Control" unique_id=1758807681] [node name="Blur" type="CheckButton" parent="Control" unique_id=1758807681]
layout_mode = 0 layout_mode = 0
offset_left = 21.0 offset_left = 21.0
offset_top = 242.0 offset_top = 280.0
offset_right = 150.0 offset_right = 150.0
offset_bottom = 273.0 offset_bottom = 311.0
theme_override_colors/font_color = Color(1, 1, 1, 1) theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1) theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1) theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -286,9 +300,9 @@ text = "Blur"
[node name="Pause" type="CheckButton" parent="Control" unique_id=156986934] [node name="Pause" type="CheckButton" parent="Control" unique_id=156986934]
layout_mode = 0 layout_mode = 0
offset_left = 212.0 offset_left = 212.0
offset_top = 148.0 offset_top = 186.0
offset_right = 307.0 offset_right = 307.0
offset_bottom = 179.0 offset_bottom = 217.0
theme_override_colors/font_color = Color(1, 1, 1, 1) theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1) theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1) theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -300,9 +314,9 @@ text = "Pause"
[node name="Shadows" type="CheckButton" parent="Control" unique_id=1751516495] [node name="Shadows" type="CheckButton" parent="Control" unique_id=1751516495]
layout_mode = 0 layout_mode = 0
offset_left = 21.0 offset_left = 21.0
offset_top = 266.0 offset_top = 304.0
offset_right = 150.0 offset_right = 150.0
offset_bottom = 297.0 offset_bottom = 335.0
theme_override_colors/font_color = Color(1, 1, 1, 1) theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1) theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1) theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -356,6 +370,7 @@ transform = Transform3D(-0.85, 0, -1.2834644e-07, 0, 0.85, 0, 1.2834644e-07, 0,
[connection signal="toggled" from="Control/Rain" to="Control" method="_on_rain_toggled"] [connection signal="toggled" from="Control/Rain" to="Control" method="_on_rain_toggled"]
[connection signal="toggled" from="Control/Wind" to="Control" method="_on_wind_toggled"] [connection signal="toggled" from="Control/Wind" to="Control" method="_on_wind_toggled"]
[connection signal="toggled" from="Control/Fireflies" to="Control" method="_on_fireflies_toggled"] [connection signal="toggled" from="Control/Fireflies" to="Control" method="_on_fireflies_toggled"]
[connection signal="pressed" from="Control/RandomWeather" to="Control" method="_on_random_weather_pressed"]
[connection signal="toggled" from="Control/Storm" to="Control" method="_on_storm_toggled"] [connection signal="toggled" from="Control/Storm" to="Control" method="_on_storm_toggled"]
[connection signal="value_changed" from="Control/DayTimeSlider" to="Control" method="_on_day_time_slider_value_changed"] [connection signal="value_changed" from="Control/DayTimeSlider" to="Control" method="_on_day_time_slider_value_changed"]
[connection signal="item_selected" from="Control/DayTimeOptions" to="Control" method="_on_option_button_item_selected"] [connection signal="item_selected" from="Control/DayTimeOptions" to="Control" method="_on_option_button_item_selected"]