diff --git a/core/daynight/weather_controller.gd b/core/daynight/weather_controller.gd index 2573324..66c5b59 100644 --- a/core/daynight/weather_controller.gd +++ b/core/daynight/weather_controller.gd @@ -49,6 +49,7 @@ var current_wind_speed: float = 0.0 var current_wind_strength: float = 0.0 var current_wind_fade: float = 0.0 var max_wind_amount: int = 0 +var random_weather_restore_tween: Tween func _init(wind: GPUParticles3D, snow: GPUParticles3D, fireflies: GPUParticles3D, rain: GPUParticles3D, ray: PackedScene, @@ -98,6 +99,7 @@ func _ready() -> void: UIEvents.toggle_snow.connect(toggle_snow) UIEvents.toggle_wind.connect(toggle_wind) UIEvents.wind_change.connect(change_wind_strength) + UIEvents.trigger_random_weather.connect(trigger_random_weather_event) UIEvents.toggle_fireflies.connect(toggle_fireflies) UIEvents.toggle_storm.connect(toggle_storm) 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) +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: var dir = environment_config.wind_direction var cloud_scale = environment_config.cloud_scale diff --git a/core/ui_events.gd b/core/ui_events.gd index de6d09f..53d2252 100644 --- a/core/ui_events.gd +++ b/core/ui_events.gd @@ -10,6 +10,8 @@ signal toggle_wind(value: bool) @warning_ignore("unused_signal") signal wind_change(value: float) @warning_ignore("unused_signal") +signal trigger_random_weather(duration: float) +@warning_ignore("unused_signal") signal toggle_fireflies(value: bool) @warning_ignore("unused_signal") signal toggle_storm(value: bool) diff --git a/docs/museums/biome_generator/museum_biome_generator.tscn b/docs/museums/biome_generator/museum_biome_generator.tscn index aba55ce..307d386 100644 --- a/docs/museums/biome_generator/museum_biome_generator.tscn +++ b/docs/museums/biome_generator/museum_biome_generator.tscn @@ -349,6 +349,20 @@ theme_override_colors/font_outline_color = Color(1, 1, 1, 1) button_pressed = true 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/Rain" to="Control" method="_on_rain_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/Pause" to="Control" method="_on_pause_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"] diff --git a/docs/museums/daynight/control.gd b/docs/museums/daynight/control.gd index 14edc84..52e4688 100644 --- a/docs/museums/daynight/control.gd +++ b/docs/museums/daynight/control.gd @@ -25,6 +25,9 @@ func _on_wind_toggled(toggled_on: bool) -> void: func _on_wind_slider_value_changed(value: float) -> void: 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: UIEvents.toggle_fireflies.emit(toggled_on) diff --git a/docs/museums/daynight/museum_daynight.tscn b/docs/museums/daynight/museum_daynight.tscn index 45ba9e4..18ae13e 100644 --- a/docs/museums/daynight/museum_daynight.tscn +++ b/docs/museums/daynight/museum_daynight.tscn @@ -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) 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] layout_mode = 0 offset_left = 110.0 @@ -220,9 +234,9 @@ text = "Storm" [node name="DayTimeLabel" type="Label" parent="Control" unique_id=1673596218] layout_mode = 0 offset_left = 26.0 -offset_top = 132.0 +offset_top = 170.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_outline_color = Color(1, 1, 1, 1) text = "Time 00:00" @@ -230,18 +244,18 @@ text = "Time 00:00" [node name="DayTimeSlider" type="HSlider" parent="Control" unique_id=530788076] layout_mode = 0 offset_left = 26.0 -offset_top = 156.0 +offset_top = 194.0 offset_right = 205.0 -offset_bottom = 172.0 +offset_bottom = 210.0 max_value = 1.0 step = 0.01 [node name="DayTimeOptions" type="OptionButton" parent="Control" unique_id=1354705309] layout_mode = 0 offset_left = 25.0 -offset_top = 179.0 +offset_top = 217.0 offset_right = 136.0 -offset_bottom = 210.0 +offset_bottom = 248.0 selected = 1 item_count = 4 popup/item_0/text = "Sunrise" @@ -256,9 +270,9 @@ popup/item_3/id = 4 [node name="Dust" type="CheckButton" parent="Control" unique_id=2023312048] layout_mode = 0 offset_left = 21.0 -offset_top = 214.0 +offset_top = 252.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_focus_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] layout_mode = 0 offset_left = 21.0 -offset_top = 242.0 +offset_top = 280.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_focus_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] layout_mode = 0 offset_left = 212.0 -offset_top = 148.0 +offset_top = 186.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_focus_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] layout_mode = 0 offset_left = 21.0 -offset_top = 266.0 +offset_top = 304.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_focus_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/Wind" to="Control" method="_on_wind_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="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"]