diff --git a/assets/realtime_day_night_cycle.tscn b/assets/realtime_day_night_cycle.tscn index 46b373a..8f671ce 100644 --- a/assets/realtime_day_night_cycle.tscn +++ b/assets/realtime_day_night_cycle.tscn @@ -1,10 +1,18 @@ -[gd_scene load_steps=6 format=3 uid="uid://cwy8iv8nlwqrc"] +[gd_scene load_steps=8 format=3 uid="uid://cwy8iv8nlwqrc"] [ext_resource type="Script" uid="uid://dl780dimuvcms" path="res://scripts/realtime_day_night_cycle.gd" id="1_idjmm"] +[sub_resource type="Gradient" id="Gradient_idjmm"] +offsets = PackedFloat32Array(0.00636943, 0.159236, 0.828025, 1) +colors = PackedColorArray(0.93, 0.7006, 0.2418, 1, 0.97, 0.97, 0.97, 1, 0.98, 0.98, 0.98, 1, 1, 0.666667, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_xp6wm"] +gradient = SubResource("Gradient_idjmm") +width = 24 + [sub_resource type="Curve" id="Curve_idjmm"] _limits = [0.0, 2.0, 0.0, 24.0] -_data = [Vector2(5, 0), 0.0, 0.66, 0, 0, Vector2(12, 2), 0.0, 0.0, 0, 0, Vector2(19, 0), -0.66, 0.0, 0, 0] +_data = [Vector2(5, 0), 0.0, 0.66, 0, 0, Vector2(12, 2), 0.0, 0.0, 0, 0, Vector2(20, 0), -0.66, 0.0, 0, 0] point_count = 3 [sub_resource type="PhysicalSkyMaterial" id="PhysicalSkyMaterial_xp6wm"] @@ -19,17 +27,20 @@ background_mode = 2 sky = SubResource("Sky_6g0ku") ssr_enabled = true ssao_enabled = true +ssil_enabled = true sdfgi_enabled = true glow_enabled = true fog_density = 0.0005 [node name="Realtime Day Night Cycle" type="Node3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) script = ExtResource("1_idjmm") +sun_color = SubResource("GradientTexture1D_xp6wm") sun_energy_over_time = SubResource("Curve_idjmm") [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_ml2st") [node name="Sun" type="DirectionalLight3D" parent="."] -transform = Transform3D(0.603876, -0.0397012, 0.796089, -0.797078, -0.0300781, 0.603127, -2.96845e-10, -0.998759, -0.0498085, 0, 0, 0) +transform = Transform3D(0.969658, -0.064919, 0.235691, -0.0649191, 0.861104, 0.504268, -0.235691, -0.504268, 0.830761, 0, 0, 0) shadow_enabled = true diff --git a/project.godot b/project.godot index a6a73fe..c47dead 100644 --- a/project.godot +++ b/project.godot @@ -11,6 +11,7 @@ config_version=5 [application] config/name="First Person Test" +config/tags=PackedStringArray("fps") run/main_scene="uid://f7e0v1r6ra6c" config/features=PackedStringArray("4.4", "Forward Plus") config/icon="res://icon.svg" diff --git a/scenes/asset_checker.tscn b/scenes/asset_checker.tscn index 26b4bfd..ba79bd5 100644 --- a/scenes/asset_checker.tscn +++ b/scenes/asset_checker.tscn @@ -328,6 +328,11 @@ _data = { [node name="AssetChecker" type="Node3D" groups=["ui"]] +[node name="Realtime Day Night Cycle" parent="." instance=ExtResource("26_qoxo0")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.9891, 1.53028, 4.26966) +set_time = 18.25 +north_offset = null + [node name="CSGBox3D" type="CSGBox3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.54059, -4.88213, 0) material_override = ExtResource("3_pecld") @@ -579,5 +584,4 @@ libraries = { } autoplay = "Menu" -[node name="Realtime Day Night Cycle" parent="." instance=ExtResource("26_qoxo0")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.9891, 1.53028, 4.26966) +[connection signal="property_list_changed" from="Realtime Day Night Cycle" to="Realtime Day Night Cycle" method="_on_property_list_changed"] diff --git a/scripts/realtime_day_night_cycle.gd b/scripts/realtime_day_night_cycle.gd index de5485a..8ebb56b 100644 --- a/scripts/realtime_day_night_cycle.gd +++ b/scripts/realtime_day_night_cycle.gd @@ -1,17 +1,38 @@ +@tool extends Node3D -@onready var sun: DirectionalLight3D = $Sun +@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 +@onready var sun: DirectionalLight3D = $Sun + 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"] - + func sun_angle_from_time(): var time_dict = Time.get_time_dict_from_system() - var current_time = float(time_dict["hour"]) + (float(time_dict["minute"]) / 60) - print("current time: ", current_time) + 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()