revert
This commit is contained in:
@@ -14,6 +14,7 @@ signal preset_changed(preset: SkyPreset)
|
||||
@export var post_process_controller: PostProcessController
|
||||
@export var vfx_controller: VFXController
|
||||
@export var shadow_proxy_system: ShadowProxySystem
|
||||
@export var weather_vfx: WeatherVFX
|
||||
|
||||
@export_group("Environment")
|
||||
@export var world_environment: WorldEnvironment
|
||||
@@ -34,6 +35,8 @@ signal preset_changed(preset: SkyPreset)
|
||||
var _current_config: SkyConfig
|
||||
var preset_name: String = ""
|
||||
var _updating_preset_name: bool = false
|
||||
var _debug_panel: SkyDebugPanel
|
||||
var _debug_canvas_layer: CanvasLayer
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -41,9 +44,10 @@ func _ready() -> void:
|
||||
_ensure_controllers_exist()
|
||||
|
||||
_connect_signals()
|
||||
#property_list_changed_notify()
|
||||
_sync_preset_name()
|
||||
_apply_seed()
|
||||
_ensure_post_process_environment()
|
||||
_load_initial_preset()
|
||||
notify_property_list_changed()
|
||||
_sync_all_systems()
|
||||
|
||||
|
||||
@@ -52,6 +56,8 @@ func _process(delta: float) -> void:
|
||||
|
||||
if show_debug_panel:
|
||||
_update_debug_info()
|
||||
elif _debug_panel != null:
|
||||
_debug_panel.visible = false
|
||||
|
||||
|
||||
func _ensure_controllers_exist() -> void:
|
||||
@@ -90,6 +96,11 @@ func _ensure_controllers_exist() -> void:
|
||||
shadow_proxy_system.name = "ShadowProxySystem"
|
||||
add_child(shadow_proxy_system)
|
||||
|
||||
if weather_vfx == null:
|
||||
weather_vfx = WeatherVFX.new()
|
||||
weather_vfx.name = "WeatherVFX"
|
||||
add_child(weather_vfx)
|
||||
|
||||
if world_environment == null:
|
||||
_create_default_environment()
|
||||
|
||||
@@ -178,6 +189,7 @@ func _sync_all_systems() -> void:
|
||||
_sync_clouds()
|
||||
_sync_post_process()
|
||||
_sync_shadows()
|
||||
_sync_weather_vfx()
|
||||
|
||||
|
||||
func _sync_sun_moon() -> void:
|
||||
@@ -187,21 +199,48 @@ func _sync_sun_moon() -> void:
|
||||
var sun_dir := day_night_controller.get_sun_direction()
|
||||
var moon_dir := day_night_controller.get_moon_direction()
|
||||
|
||||
var sun_color: Color
|
||||
var sun_energy: float
|
||||
var moon_color: Color
|
||||
var moon_energy: float
|
||||
var ambient_color: Color
|
||||
var ambient_energy: float
|
||||
|
||||
if _current_config:
|
||||
sun_color = _current_config.sun_color
|
||||
sun_energy = _current_config.sun_intensity
|
||||
moon_color = _current_config.moon_color
|
||||
moon_energy = _current_config.moon_intensity
|
||||
ambient_color = _current_config.ambient_color
|
||||
ambient_energy = _current_config.ambient_intensity
|
||||
else:
|
||||
sun_color = day_night_controller.get_sun_color()
|
||||
sun_energy = day_night_controller.get_sun_intensity()
|
||||
moon_color = day_night_controller.get_moon_color()
|
||||
moon_energy = day_night_controller.get_moon_intensity()
|
||||
ambient_color = day_night_controller.get_ambient_color()
|
||||
ambient_energy = day_night_controller.get_ambient_intensity()
|
||||
if weather_controller:
|
||||
var wp := weather_controller.get_current_profile()
|
||||
if wp:
|
||||
ambient_color *= wp.ambient_color_multiplier
|
||||
ambient_energy *= wp.ambient_intensity_multiplier
|
||||
|
||||
if sun_light:
|
||||
sun_light.look_at(global_position - sun_dir, Vector3.UP)
|
||||
sun_light.light_color = day_night_controller.get_sun_color()
|
||||
sun_light.light_energy = day_night_controller.get_sun_intensity()
|
||||
sun_light.visible = day_night_controller.get_sun_intensity() > 0.01
|
||||
sun_light.light_color = sun_color
|
||||
sun_light.light_energy = sun_energy
|
||||
sun_light.visible = sun_energy > 0.01
|
||||
|
||||
if moon_light:
|
||||
moon_light.look_at(global_position - moon_dir, Vector3.UP)
|
||||
moon_light.light_color = day_night_controller.get_moon_color()
|
||||
moon_light.light_energy = day_night_controller.get_moon_intensity()
|
||||
moon_light.visible = day_night_controller.get_moon_intensity() > 0.01
|
||||
moon_light.light_color = moon_color
|
||||
moon_light.light_energy = moon_energy
|
||||
moon_light.visible = moon_energy > 0.01
|
||||
|
||||
if world_environment and world_environment.environment:
|
||||
world_environment.environment.ambient_light_color = day_night_controller.get_ambient_color()
|
||||
world_environment.environment.ambient_light_energy = day_night_controller.get_ambient_intensity()
|
||||
world_environment.environment.ambient_light_color = ambient_color
|
||||
world_environment.environment.ambient_light_energy = ambient_energy
|
||||
|
||||
|
||||
func _sync_clouds() -> void:
|
||||
@@ -209,19 +248,39 @@ func _sync_clouds() -> void:
|
||||
return
|
||||
|
||||
if day_night_controller:
|
||||
var sun_color: Color
|
||||
var sun_intensity: float
|
||||
var moon_color: Color
|
||||
var moon_intensity: float
|
||||
|
||||
if _current_config:
|
||||
sun_color = _current_config.sun_color
|
||||
sun_intensity = _current_config.sun_intensity
|
||||
moon_color = _current_config.moon_color
|
||||
moon_intensity = _current_config.moon_intensity
|
||||
else:
|
||||
sun_color = day_night_controller.get_sun_color()
|
||||
sun_intensity = day_night_controller.get_sun_intensity()
|
||||
moon_color = day_night_controller.get_moon_color()
|
||||
moon_intensity = day_night_controller.get_moon_intensity()
|
||||
|
||||
cloud_system.set_sun_lighting(
|
||||
day_night_controller.get_sun_direction(),
|
||||
day_night_controller.get_sun_color(),
|
||||
day_night_controller.get_sun_intensity()
|
||||
sun_color,
|
||||
sun_intensity
|
||||
)
|
||||
cloud_system.set_moon_lighting(
|
||||
day_night_controller.get_moon_direction(),
|
||||
day_night_controller.get_moon_color(),
|
||||
day_night_controller.get_moon_intensity()
|
||||
moon_color,
|
||||
moon_intensity
|
||||
)
|
||||
|
||||
if weather_controller:
|
||||
cloud_system.global_coverage = weather_controller.get_cloud_coverage()
|
||||
elif _current_config:
|
||||
cloud_system.global_coverage = _current_config.cloud_coverage
|
||||
|
||||
if weather_controller:
|
||||
cloud_system.set_global_wind(
|
||||
weather_controller.get_wind_direction(),
|
||||
weather_controller.get_wind_speed()
|
||||
@@ -233,30 +292,23 @@ func _sync_post_process() -> void:
|
||||
return
|
||||
|
||||
var sun_dir := day_night_controller.get_sun_direction()
|
||||
var sun_color := day_night_controller.get_sun_color()
|
||||
|
||||
post_process_controller.set_sun_glow(
|
||||
sun_dir,
|
||||
sun_color,
|
||||
day_night_controller.get_sun_intensity() * 0.5,
|
||||
0.2
|
||||
)
|
||||
|
||||
post_process_controller.set_fog_settings(
|
||||
day_night_controller.get_fog_color(),
|
||||
day_night_controller.get_fog_density()
|
||||
)
|
||||
|
||||
var dawn_dusk_blend := 0.0
|
||||
if day_night_controller.is_dawn() or day_night_controller.is_dusk():
|
||||
dawn_dusk_blend = 1.0
|
||||
post_process_controller.set_dawn_dusk_blend(dawn_dusk_blend)
|
||||
|
||||
post_process_controller.set_stars_visibility(
|
||||
day_night_controller.get_stars_visibility()
|
||||
)
|
||||
|
||||
if _current_config:
|
||||
post_process_controller.set_sun_glow(
|
||||
sun_dir,
|
||||
_current_config.sun_color,
|
||||
_current_config.sun_glow_intensity,
|
||||
_current_config.sun_glow_size
|
||||
)
|
||||
post_process_controller.set_fog_settings(
|
||||
_current_config.fog_color,
|
||||
_current_config.fog_density
|
||||
)
|
||||
post_process_controller.set_dawn_dusk_blend(0.0)
|
||||
post_process_controller.set_stars_visibility(
|
||||
_current_config.stars_visibility,
|
||||
_current_config.stars_tint
|
||||
)
|
||||
post_process_controller.set_sky_colors(
|
||||
_current_config.sky_top_color,
|
||||
_current_config.sky_horizon_color,
|
||||
@@ -264,6 +316,34 @@ func _sync_post_process() -> void:
|
||||
)
|
||||
post_process_controller.gradient_intensity = _current_config.gradient_intensity
|
||||
post_process_controller.apply_config(_current_config)
|
||||
else:
|
||||
var sun_color := day_night_controller.get_sun_color()
|
||||
post_process_controller.set_sun_glow(
|
||||
sun_dir,
|
||||
sun_color,
|
||||
day_night_controller.get_sun_intensity() * 0.5,
|
||||
0.2
|
||||
)
|
||||
var fog_color := day_night_controller.get_fog_color()
|
||||
var fog_density := day_night_controller.get_fog_density()
|
||||
if weather_controller:
|
||||
var wp := weather_controller.get_current_profile()
|
||||
if wp:
|
||||
fog_color *= wp.fog_color_multiplier
|
||||
fog_density *= wp.fog_density_multiplier
|
||||
post_process_controller.set_fog_settings(fog_color, fog_density)
|
||||
var dawn_dusk_blend := 0.0
|
||||
if day_night_controller.is_dawn() or day_night_controller.is_dusk():
|
||||
dawn_dusk_blend = 1.0
|
||||
post_process_controller.set_dawn_dusk_blend(dawn_dusk_blend)
|
||||
post_process_controller.set_stars_visibility(
|
||||
day_night_controller.get_stars_visibility()
|
||||
)
|
||||
post_process_controller.set_sky_colors(
|
||||
day_night_controller.get_sky_top_color(),
|
||||
day_night_controller.get_sky_horizon_color(),
|
||||
day_night_controller.get_sky_bottom_color()
|
||||
)
|
||||
|
||||
|
||||
func _apply_preset_assets(preset: SkyPreset) -> void:
|
||||
@@ -280,11 +360,20 @@ func _apply_preset_assets(preset: SkyPreset) -> void:
|
||||
cloud_system.rebuild_layers()
|
||||
|
||||
|
||||
func _resolve_preset_library() -> SkyboxPresetLibrary:
|
||||
if preset_library != null:
|
||||
return preset_library
|
||||
if has_node(NodePath("PresetLibrary")):
|
||||
return get_node(NodePath("PresetLibrary")) as SkyboxPresetLibrary
|
||||
return null
|
||||
|
||||
|
||||
func _get_property_list() -> Array:
|
||||
var properties := []
|
||||
var names: PackedStringArray = []
|
||||
if preset_library:
|
||||
names = preset_library.get_preset_names()
|
||||
var lib := _resolve_preset_library()
|
||||
if lib:
|
||||
names = lib.get_preset_names()
|
||||
|
||||
var hint_string := ""
|
||||
if names.size() > 0:
|
||||
@@ -307,8 +396,13 @@ func _set(property: StringName, value: Variant) -> bool:
|
||||
preset_name = value
|
||||
if _updating_preset_name:
|
||||
return true
|
||||
if preset_library and String(preset_name) != "":
|
||||
preset_library.apply_preset(String(preset_name))
|
||||
var lib := _resolve_preset_library()
|
||||
if lib and String(preset_name) != "":
|
||||
lib.apply_preset(String(preset_name))
|
||||
var p := lib.get_current_preset()
|
||||
if p:
|
||||
_on_preset_changed(p)
|
||||
_sync_all_systems()
|
||||
return true
|
||||
return false
|
||||
|
||||
@@ -330,6 +424,25 @@ func _sync_preset_name() -> void:
|
||||
_updating_preset_name = false
|
||||
|
||||
|
||||
func _ensure_post_process_environment() -> void:
|
||||
if post_process_controller and world_environment and world_environment.environment:
|
||||
if post_process_controller.target_environment == null:
|
||||
post_process_controller.target_environment = world_environment.environment
|
||||
post_process_controller._setup_environment()
|
||||
|
||||
|
||||
func _load_initial_preset() -> void:
|
||||
if preset_library == null:
|
||||
return
|
||||
var current := preset_library.get_current_preset()
|
||||
if current == null:
|
||||
return
|
||||
_sync_preset_name()
|
||||
if current.config:
|
||||
_current_config = current.config
|
||||
_apply_preset_assets(current)
|
||||
|
||||
|
||||
func _sync_shadows() -> void:
|
||||
if shadow_proxy_system == null:
|
||||
return
|
||||
@@ -341,16 +454,47 @@ func _sync_shadows() -> void:
|
||||
shadow_proxy_system.sync_with_cloud_system(cloud_system)
|
||||
|
||||
|
||||
func _sync_weather_vfx() -> void:
|
||||
if weather_vfx == null or weather_controller == null:
|
||||
return
|
||||
weather_vfx.set_rain_intensity(weather_controller.get_rain_intensity())
|
||||
weather_vfx.set_snow_intensity(weather_controller.get_snow_intensity())
|
||||
|
||||
|
||||
func _update_debug_info() -> void:
|
||||
pass
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
if _debug_panel == null:
|
||||
_create_debug_panel()
|
||||
_debug_panel.visible = true
|
||||
|
||||
|
||||
func _create_debug_panel() -> void:
|
||||
_debug_canvas_layer = CanvasLayer.new()
|
||||
_debug_canvas_layer.name = "DebugCanvasLayer"
|
||||
_debug_canvas_layer.layer = 100
|
||||
add_child(_debug_canvas_layer)
|
||||
|
||||
_debug_panel = SkyDebugPanel.new()
|
||||
_debug_panel.name = "SkyDebugPanel"
|
||||
_debug_panel.dynamic_sky = self
|
||||
_debug_panel.anchor_left = 0.0
|
||||
_debug_panel.anchor_top = 0.0
|
||||
_debug_panel.anchor_right = 0.0
|
||||
_debug_panel.anchor_bottom = 0.0
|
||||
_debug_panel.offset_left = 10.0
|
||||
_debug_panel.offset_top = 10.0
|
||||
_debug_canvas_layer.add_child(_debug_panel)
|
||||
|
||||
|
||||
func set_time_of_day(time: float) -> void:
|
||||
_current_config = null
|
||||
if day_night_controller:
|
||||
day_night_controller.time_of_day = time
|
||||
|
||||
|
||||
func set_weather(state: WeatherProfile.WeatherState, transition_time: float = -1.0) -> void:
|
||||
_current_config = null
|
||||
if weather_controller:
|
||||
weather_controller.set_weather(state, transition_time)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user