Files
fps_project_1/scripts/realtime_day_night_cycle.gd
2025-03-21 23:09:34 -05:00

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()