add rain and snow - fix sky color by time

This commit is contained in:
Overside srl
2026-02-16 21:34:02 +01:00
parent 65bb24ff6a
commit c07796f881
11 changed files with 670 additions and 83 deletions

View File

@@ -7,8 +7,15 @@ extends Control
var _panel: PanelContainer
var _vbox: VBoxContainer
var _time_label: Label
var _period_label: Label
var _preset_label: Label
var _weather_label: Label
var _sun_label: Label
var _moon_label: Label
var _ambient_label: Label
var _cloud_label: Label
var _fog_label: Label
var _rain_label: Label
var _seed_label: Label
var _time_slider: HSlider
var _weather_dropdown: OptionButton
@@ -50,10 +57,18 @@ func _create_ui() -> void:
_vbox.add_child(HSeparator.new())
_preset_label = Label.new()
_preset_label.text = "Preset: —"
_vbox.add_child(_preset_label)
_time_label = Label.new()
_time_label.text = "Time: 00:00 (0.00)"
_vbox.add_child(_time_label)
_period_label = Label.new()
_period_label.text = "Period: —"
_vbox.add_child(_period_label)
var time_hbox := HBoxContainer.new()
_vbox.add_child(time_hbox)
@@ -76,6 +91,20 @@ func _create_ui() -> void:
_vbox.add_child(HSeparator.new())
_sun_label = Label.new()
_sun_label.text = "Sun: —"
_vbox.add_child(_sun_label)
_moon_label = Label.new()
_moon_label.text = "Moon: —"
_vbox.add_child(_moon_label)
_ambient_label = Label.new()
_ambient_label.text = "Ambient: —"
_vbox.add_child(_ambient_label)
_vbox.add_child(HSeparator.new())
_weather_label = Label.new()
_weather_label.text = "Weather: Clear"
_vbox.add_child(_weather_label)
@@ -100,8 +129,16 @@ func _create_ui() -> void:
_cloud_label.text = "Clouds: 0%"
_vbox.add_child(_cloud_label)
_fog_label = Label.new()
_fog_label.text = "Fog: —"
_vbox.add_child(_fog_label)
_rain_label = Label.new()
_rain_label.text = "Rain: 0% | Snow: 0%"
_vbox.add_child(_rain_label)
_seed_label = Label.new()
_seed_label.text = "Seed: 0"
_seed_label.text = "Seed: 0 | Day: 1"
_vbox.add_child(_seed_label)
var meteor_button := Button.new()
@@ -120,6 +157,8 @@ func _update_labels() -> void:
if dynamic_sky == null:
return
_preset_label.text = "Preset: %s" % dynamic_sky.preset_name if dynamic_sky.preset_name != "" else "Preset: (none)"
var time := dynamic_sky.get_time_of_day()
var hours := int(time * 24.0)
var minutes := int(fmod(time * 24.0 * 60.0, 60.0))
@@ -128,6 +167,30 @@ func _update_labels() -> void:
if not _time_slider.has_focus():
_time_slider.set_value_no_signal(time)
if dynamic_sky.day_night_controller:
_period_label.text = "Period: %s" % dynamic_sky.day_night_controller.get_time_period().to_upper()
_pause_button.set_pressed_no_signal(dynamic_sky.day_night_controller.paused)
if dynamic_sky.sun_light:
_sun_label.text = "Sun: %.2f %s" % [
dynamic_sky.sun_light.light_energy,
"visible" if dynamic_sky.sun_light.visible else "hidden"
]
if dynamic_sky.moon_light:
_moon_label.text = "Moon: %.2f %s" % [
dynamic_sky.moon_light.light_energy,
"visible" if dynamic_sky.moon_light.visible else "hidden"
]
if dynamic_sky.world_environment and dynamic_sky.world_environment.environment:
var env := dynamic_sky.world_environment.environment
_ambient_label.text = "Ambient: %.2f" % env.ambient_light_energy
_fog_label.text = "Fog: %s density=%.4f" % [
"ON" if env.fog_enabled else "OFF",
env.fog_density
]
var weather := dynamic_sky.get_current_weather()
var weather_name: String = WeatherProfile.WeatherState.keys()[weather]
_weather_label.text = "Weather: %s" % weather_name
@@ -140,10 +203,15 @@ func _update_labels() -> void:
var progress := dynamic_sky.weather_controller.get_transition_progress()
_weather_label.text += " (transitioning %.0f%%)" % (progress * 100)
_seed_label.text = "Seed: %d" % dynamic_sky.deterministic_seed
if dynamic_sky.weather_controller:
var rain := dynamic_sky.weather_controller.get_rain_intensity()
var snow := dynamic_sky.weather_controller.get_snow_intensity()
_rain_label.text = "Rain: %d%% | Snow: %d%%" % [int(rain * 100), int(snow * 100)]
var day_num := 1
if dynamic_sky.day_night_controller:
_pause_button.set_pressed_no_signal(dynamic_sky.day_night_controller.paused)
day_num = dynamic_sky.day_night_controller.current_day
_seed_label.text = "Seed: %d | Day: %d" % [dynamic_sky.deterministic_seed, day_num]
func _on_time_slider_changed(value: float) -> void: