42 lines
1.1 KiB
GDScript
42 lines
1.1 KiB
GDScript
@tool
|
|
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"]) * .25
|
|
|
|
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()
|