diff --git a/resources/save_load_node_types/day_night_cycle_data_resource.gd b/resources/save_load_node_types/day_night_cycle_data_resource.gd new file mode 100644 index 0000000..51da62c --- /dev/null +++ b/resources/save_load_node_types/day_night_cycle_data_resource.gd @@ -0,0 +1,19 @@ +## The base resource for saving a specific Node +class_name DayNightCycleDataResource +extends NodeDataResource + + +@export var time: float ## Time from DayNightCycleComponent.time +@export var node_path: NodePath + + +func _save_data(node: Node) -> void: + node_path = node.get_path() + time = node.time + +func _load_data(window: Window) -> void: + var scene_node: DayNightCycleComponent = window.get_node_or_null(node_path) + if scene_node == null: + printerr("Couldn't find DayNightCycleDataResource.node_path") + return + scene_node.set_time.emit(time) diff --git a/resources/save_load_node_types/day_night_cycle_data_resource.gd.uid b/resources/save_load_node_types/day_night_cycle_data_resource.gd.uid new file mode 100644 index 0000000..a4affe6 --- /dev/null +++ b/resources/save_load_node_types/day_night_cycle_data_resource.gd.uid @@ -0,0 +1 @@ +uid://7gwknxsl1fgd diff --git a/resources/save_load_node_types/day_night_cycle_data_resource.tres b/resources/save_load_node_types/day_night_cycle_data_resource.tres new file mode 100644 index 0000000..193e461 --- /dev/null +++ b/resources/save_load_node_types/day_night_cycle_data_resource.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="DayNightCycleDataResource" load_steps=2 format=3 uid="uid://ccv6fi1lk8ofm"] + +[ext_resource type="Script" uid="uid://7gwknxsl1fgd" path="res://resources/save_load_node_types/day_night_cycle_data_resource.gd" id="1_jnnxf"] + +[resource] +script = ExtResource("1_jnnxf") +time = 0.0 +node_path = NodePath("") +metadata/_custom_type_script = "uid://7gwknxsl1fgd" diff --git a/scenes/world/day_night_cycle_component.gd b/scenes/world/day_night_cycle_component.gd index c4c66a1..77d3cc4 100644 --- a/scenes/world/day_night_cycle_component.gd +++ b/scenes/world/day_night_cycle_component.gd @@ -1,4 +1,5 @@ -extends Node3D +class_name DayNightCycleComponent +extends Node signal end_of_day @@ -66,6 +67,7 @@ func _ready() -> void: resume_time.connect(_on_resume_time) set_day_length.connect(_on_set_day_length) set_rate_of_time.connect(_on_set_rate_of_time) + set_time.connect(_on_set_time) func update_tick_rate(new_rate: float = 1.0) -> void: diff --git a/scenes/world/day_night_cycle_component.tscn b/scenes/world/day_night_cycle_component.tscn index aa047b4..4ae3ef1 100644 --- a/scenes/world/day_night_cycle_component.tscn +++ b/scenes/world/day_night_cycle_component.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=11 format=3 uid="uid://58cvwtpnkq8r"] +[gd_scene load_steps=13 format=3 uid="uid://58cvwtpnkq8r"] [ext_resource type="Script" uid="uid://odh7sbmaku32" path="res://scenes/world/day_night_cycle_component.gd" id="1_xc0aj"] [ext_resource type="Gradient" uid="uid://bgsedjexjylfr" path="res://resources/world/moon_color_gradient.tres" id="2_65gyo"] @@ -7,6 +7,8 @@ [ext_resource type="Curve" uid="uid://ds0dqy41plskw" path="res://resources/world/sun_intensity_curve.tres" id="5_wylv2"] [ext_resource type="Gradient" uid="uid://d0cpq2rok3jsi" path="res://resources/world/sky_top_color_gradient.tres" id="6_ckt1h"] [ext_resource type="Gradient" uid="uid://dvpnjt66dtk46" path="res://resources/world/sky_horizon_color_gradient.tres" id="7_03v7x"] +[ext_resource type="PackedScene" uid="uid://baki8rbf1ti0r" path="res://addons/save_load_system/components/save_data_component.tscn" id="8_65gyo"] +[ext_resource type="Resource" uid="uid://ccv6fi1lk8ofm" path="res://resources/save_load_node_types/day_night_cycle_data_resource.tres" id="9_bdvt6"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_4rhad"] @@ -19,7 +21,7 @@ sky = SubResource("Sky_dphjl") tonemap_mode = 2 glow_enabled = true -[node name="DayNightCycleComponent" type="Node3D" node_paths=PackedStringArray("environment", "sun", "moon")] +[node name="DayNightCycleComponent" type="Node" node_paths=PackedStringArray("environment", "sun", "moon")] script = ExtResource("1_xc0aj") moon_color = ExtResource("2_65gyo") moon_intensity = ExtResource("3_bdvt6") @@ -42,3 +44,6 @@ shadow_enabled = true [node name="Moon" type="DirectionalLight3D" parent="."] shadow_enabled = true sky_mode = 1 + +[node name="SaveDataComponent" parent="." instance=ExtResource("8_65gyo")] +save_data_resource = ExtResource("9_bdvt6")