68 lines
2.3 KiB
GDScript
68 lines
2.3 KiB
GDScript
@tool
|
|
|
|
extends Node
|
|
|
|
@export_category("Set Lighting Scenario")
|
|
@export var set_dusk: bool = false : set = apply_dusk
|
|
@export var set_noon: bool = false : set = apply_noon
|
|
@export var set_afternoon: bool = false : set = apply_afternoon
|
|
@export var set_night: bool = false : set = apply_night
|
|
|
|
@export_category("")
|
|
@export var UI: UIController
|
|
|
|
@onready var sun_orig_res = ProjectSettings.get_setting("rendering/lights_and_shadows/directional_shadow/size")
|
|
@onready var sun_shadow_bits = ProjectSettings.get_setting("rendering/lights_and_shadows/directional_shadow/16_bits")
|
|
|
|
func apply_dusk(dummy: bool) -> void:
|
|
apply_lighting(UI.lighting_scenarios.dusk)
|
|
|
|
func apply_noon(dummy: bool) -> void:
|
|
apply_lighting(UI.lighting_scenarios.noon)
|
|
|
|
func apply_afternoon(dummy: bool) -> void:
|
|
apply_lighting(UI.lighting_scenarios.afternoon)
|
|
|
|
func apply_night(dummy: bool) -> void:
|
|
apply_lighting(UI.lighting_scenarios.night)
|
|
|
|
func apply_lighting(lighting):
|
|
UI.sun_light.light_intensity_lux = lighting.lux
|
|
UI.sun_light.light_temperature = lighting.temp
|
|
UI.sun_light.quaternion = lighting.rotation
|
|
UI.environment.environment.background_intensity = lighting.sky_nits
|
|
UI.environment.camera_attributes.exposure_sensitivity = lighting.exposure_mult
|
|
UI.environment.camera_attributes.auto_exposure_min_sensitivity = lighting.exposure_min_sens
|
|
if lighting.night_lights:
|
|
for node in UI.night_lights:
|
|
node.visible = true
|
|
change_shadow_casters(false)
|
|
RenderingServer.directional_shadow_atlas_set_size(UI.NIGHT_SHADOW_RES, sun_shadow_bits)
|
|
for mat in UI.emissives:
|
|
mat.emission_enabled = true
|
|
else:
|
|
for node in UI.night_lights:
|
|
node.visible = false
|
|
change_shadow_casters(true)
|
|
RenderingServer.directional_shadow_atlas_set_size(sun_orig_res, sun_shadow_bits)
|
|
for mat in UI.emissives:
|
|
mat.emission_enabled = false
|
|
|
|
UI.environment.environment.sdfgi_enabled = false
|
|
await get_tree().create_timer(0.1).timeout
|
|
UI.environment.environment.sdfgi_enabled = true
|
|
|
|
func change_shadow_casters(is_cast_on):
|
|
var shadow_mode
|
|
|
|
if is_cast_on:
|
|
shadow_mode = GeometryInstance3D.SHADOW_CASTING_SETTING_ON
|
|
else:
|
|
shadow_mode = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
|
|
|
for node in UI.lamp_mesh_containers:
|
|
for mesh in node.get_children():
|
|
if mesh is MeshInstance3D:
|
|
mesh.cast_shadow = shadow_mode
|
|
for mesh in UI.lamp_meshes:
|
|
mesh.cast_shadow = shadow_mode
|