now you can save and load saves!
authorEduardo <[email protected]>
Mon, 8 Jul 2024 19:32:32 +0000 (21:32 +0200)
committerEduardo <[email protected]>
Mon, 8 Jul 2024 19:32:32 +0000 (21:32 +0200)
created save and load menu and edited pause script to accommodate

scenes/interfaces/pause_menu.tscn
scenes/interfaces/save_menu.tscn
scripts/constants.gd
scripts/pause_menu.gd
scripts/save_menu.gd [new file with mode: 0644]

index 510593e981094e66cf4eb2d2edd0e0ff05a3c480..5b5054ce6ec3f004f2aed320b7394b664c9b29a6 100644 (file)
@@ -3,7 +3,7 @@
 [ext_resource type="Script" path="res://scripts/pause_menu.gd" id="1_aq3as"]
 [ext_resource type="Script" path="res://addons/label_font_auto_sizer/label_auto_sizer.gd" id="2_j81qh"]
 
-[sub_resource type="LabelSettings" id="LabelSettings_3oc3d"]
+[sub_resource type="LabelSettings" id="LabelSettings_0w75j"]
 font_size = 50
 
 [node name="PauseMenu" type="Control"]
@@ -33,7 +33,7 @@ custom_minimum_size = Vector2(250, 100)
 layout_mode = 2
 theme_override_font_sizes/font_size = 16
 text = "Pause"
-label_settings = SubResource("LabelSettings_3oc3d")
+label_settings = SubResource("LabelSettings_0w75j")
 horizontal_alignment = 1
 vertical_alignment = 1
 autowrap_mode = 3
index d16b259332fcf89c35f9ad3c4e58ee9bebfee189..57ff24952a7faf208215ff4e7a9d8f18c4a1e4e2 100644 (file)
@@ -1,9 +1,124 @@
-[gd_scene format=3 uid="uid://bsiy7irf1p5e1"]
+[gd_scene load_steps=6 format=3 uid="uid://bsiy7irf1p5e1"]
+
+[ext_resource type="Script" path="res://scripts/save_menu.gd" id="1_47jxk"]
+[ext_resource type="Texture2D" uid="uid://caxlr5o014d0h" path="res://assets/ui/button_square_depth_line.png" id="1_ejhmr"]
+[ext_resource type="Script" path="res://addons/label_font_auto_sizer/label_auto_sizer.gd" id="2_mvfow"]
+[ext_resource type="Theme" uid="uid://c6osikflt1uy1" path="res://assets/resources/ui_theme.tres" id="3_n5hex"]
+
+[sub_resource type="LabelSettings" id="LabelSettings_ak3jm"]
+font_size = 32
+font_color = Color(0.900196, 0.84087, 0.882328, 1)
+outline_size = 5
+outline_color = Color(0, 0, 0, 1)
 
 [node name="SaveMenu" type="Control"]
+process_mode = 2
 layout_mode = 3
 anchors_preset = 15
 anchor_right = 1.0
 anchor_bottom = 1.0
 grow_horizontal = 2
 grow_vertical = 2
+script = ExtResource("1_47jxk")
+
+[node name="CenterContainer" type="CenterContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="PanelContainer" type="PanelContainer" parent="CenterContainer"]
+layout_mode = 2
+
+[node name="NinePatchRect" type="NinePatchRect" parent="CenterContainer/PanelContainer"]
+modulate = Color(0.831856, 0.844692, 0.906161, 1)
+custom_minimum_size = Vector2(100, 100)
+layout_mode = 2
+texture = ExtResource("1_ejhmr")
+patch_margin_left = 15
+patch_margin_top = 15
+patch_margin_right = 15
+patch_margin_bottom = 25
+
+[node name="MarginContainer" type="MarginContainer" parent="CenterContainer/PanelContainer"]
+layout_mode = 2
+theme_override_constants/margin_left = 50
+theme_override_constants/margin_top = 20
+theme_override_constants/margin_right = 50
+theme_override_constants/margin_bottom = 35
+
+[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer"]
+layout_mode = 2
+
+[node name="LabelAutoSizer" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+theme_override_font_sizes/font_size = 8
+text = "Save"
+label_settings = SubResource("LabelSettings_ak3jm")
+horizontal_alignment = 1
+vertical_alignment = 1
+autowrap_mode = 3
+clip_text = true
+script = ExtResource("2_mvfow")
+_size_just_modified_by_autosizer = false
+_set_defaults = true
+_base_font_size = 32
+_current_font_size = 32
+_last_size_state = 1
+
+[node name="Row1Container" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
+layout_mode = 2
+alignment = 1
+
+[node name="Slot1Button" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Row1Container"]
+custom_minimum_size = Vector2(150, 0)
+layout_mode = 2
+theme = ExtResource("3_n5hex")
+text = "Slot 1"
+
+[node name="Slot2Button" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Row1Container"]
+custom_minimum_size = Vector2(150, 0)
+layout_mode = 2
+theme = ExtResource("3_n5hex")
+text = "Slot 2"
+
+[node name="Row2Container" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
+layout_mode = 2
+alignment = 1
+
+[node name="Slot3Button" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Row2Container"]
+custom_minimum_size = Vector2(150, 0)
+layout_mode = 2
+theme = ExtResource("3_n5hex")
+text = "Slot 3"
+
+[node name="Slot4Button" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Row2Container"]
+custom_minimum_size = Vector2(150, 0)
+layout_mode = 2
+theme = ExtResource("3_n5hex")
+text = "Slot 4"
+
+[node name="MarginContainer" type="MarginContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
+layout_mode = 2
+theme_override_constants/margin_top = 20
+
+[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/MarginContainer"]
+layout_mode = 2
+alignment = 2
+
+[node name="ReturnButton" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer"]
+modulate = Color(0.901197, 0.823165, 0.861526, 1)
+custom_minimum_size = Vector2(150, 0)
+layout_mode = 2
+theme = ExtResource("3_n5hex")
+text = "Return"
+
+[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"]
+[connection signal="pressed" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Row1Container/Slot1Button" to="." method="_on_slot1_button_pressed"]
+[connection signal="pressed" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Row1Container/Slot2Button" to="." method="_on_slot2_button_pressed"]
+[connection signal="pressed" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Row2Container/Slot3Button" to="." method="_on_slot3_button_pressed"]
+[connection signal="pressed" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Row2Container/Slot4Button" to="." method="_on_slot4_button_pressed"]
+[connection signal="pressed" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer/ReturnButton" to="." method="_on_return_button_pressed"]
index 0dfc733d10d82464eecd9d96546b0ce19c926bc2..9dec28f0a7f2553523effebdd34ef8f8ba958cdf 100644 (file)
@@ -4,9 +4,11 @@ extends Node
 enum LEVELS_NAMES {
        main_level,
        house_template,
+       save_menu,
 }
 
 const LEVELS_PATHS: Array[String] = [
        "res://scenes/main_level.tscn",
        "res://scenes/house_template.tscn",
+       "res://scenes/interfaces/save_menu.tscn",
 ]
index 9eceebd27e81f8dcf38fc1174c42f1ae1e1897d1..20df73a96ee6904579e28506c332f7ba507393d0 100644 (file)
@@ -2,7 +2,7 @@ extends Control
 
 
 var paused: bool = false
-
+var save_menu: Node
 
 func _ready():
        visible = paused
@@ -13,17 +13,6 @@ func _process(_delta):
                pause_game()
 
 
-func save_data():
-       SaveSystem.set_var("save", SaveResource.new())
-       SaveSystem.set_var("save:scene", get_scene())
-       SaveSystem.set_var("save:player_position", Globals.get_last_player_position_in_scene(get_scene()))
-       SaveSystem.save()
-       
-
-func get_scene() -> Constants.LEVELS_NAMES:
-       return Globals.get_current_scene()
-
-
 func pause_game():
        # update player position before pausing the execution
        Globals.request_update_player_position.emit()
@@ -31,12 +20,29 @@ func pause_game():
        paused = !paused
        get_tree().paused = paused
        visible = paused
+       
+       if !paused:
+               close_save_menu()
+
+
+func open_save_menu(save_mode: bool):
+       if not save_menu:
+               var save_menu_res = load(Constants.LEVELS_PATHS[Constants.LEVELS_NAMES["save_menu"]]) as PackedScene
+               save_menu = save_menu_res.instantiate()
+               add_child(save_menu)
+       
+       save_menu.save_mode = save_mode
+       save_menu.visible = true
+
+
+func close_save_menu():
+       if save_menu:
+               save_menu.visible = false
 
 
 func _on_save_button_pressed():
-       save_data()
+       open_save_menu(true)
 
 
 func _on_load_button_pressed():
-       var save_data = SaveSystem.get_var("save")
-       print(save_data)
+       open_save_menu(false)
diff --git a/scripts/save_menu.gd b/scripts/save_menu.gd
new file mode 100644 (file)
index 0000000..e76bc04
--- /dev/null
@@ -0,0 +1,65 @@
+extends Control
+
+
+### if save is true: save
+### if save is false: load
+var save_mode := true
+
+@onready var title_label = $CenterContainer/PanelContainer/MarginContainer/VBoxContainer/LabelAutoSizer
+
+
+func _on_visibility_changed():
+       if !is_node_ready():
+               var timer = Timer.new()
+               timer.wait_time = .01
+               timer.autostart = true
+               timer.one_shot = true
+               timer.timeout.connect(_on_visibility_changed)
+               add_child(timer)
+       else:
+               if save_mode:
+                       title_label.text = "Save" # TODO: this must be localized
+               else:
+                       title_label.text = "Load" # TODO: this must be localized
+
+
+func save_data(save_name: String):
+       var save_path := "user://" + save_name + ".sav"
+       SaveSystem.set_var("save", SaveResource.new())
+       SaveSystem.set_var("save:scene", Globals.get_current_scene())
+       SaveSystem.set_var("save:player_position", Globals.get_last_player_position_in_scene(Globals.get_current_scene()))
+       SaveSystem.save(save_path)
+
+
+func load_data(save_name: String):
+       var save_path := "user://" + save_name + ".sav"
+       SaveSystem._load(save_path)
+       var save_json = SaveSystem.get_var("save")
+       print(save_json)
+
+
+func save_or_load(save_name: String):
+       if save_mode:
+               save_data(save_name)
+       else:
+               load_data(save_name)
+
+
+func _on_slot1_button_pressed():
+       save_or_load("save_1")
+
+
+func _on_slot2_button_pressed():
+       save_or_load("save_2")
+
+
+func _on_slot3_button_pressed():
+       save_or_load("save_3")
+
+
+func _on_slot4_button_pressed():
+       save_or_load("save_4")
+
+
+func _on_return_button_pressed():
+       visible = false