extends Node3D @export var sun_color : GradientTexture1D @export var realtime : bool = false @export var set_time = 17.0 @export var north_offset : float @export var sun_energy_over_time : Curve @export var moon_energy_over_time : Curve @onready var sun: DirectionalLight3D = $Sun @onready var moon: DirectionalLight3D = $Sun/Moon func _ready() -> void: change_sun() func change_sun(): var sun_details = sun_angle_from_time() sun.rotation.x = sun_details["angle"] sun.rotation.y = north_offset sun.light_energy = sun_details["energy"] moon.light_energy = (2 - sun_details["energy"]) * .5 func sun_angle_from_time(): var time_dict = Time.get_time_dict_from_system() var current_time if realtime: current_time = float(time_dict["hour"]) + (float(time_dict["minute"]) / 60) else: current_time = set_time var angle : float = deg_to_rad((current_time/24.0) * 360.0 + 90.0) var energy = sun_energy_over_time.sample(current_time) print("current time: ", current_time) print("Sun angle : ",rad_to_deg(angle)) return {"angle" : angle, "energy" : energy} func _on_property_list_changed() -> void: change_sun()