From 00552316ff987ce6dfa2eeb2f983357ce3847a29 Mon Sep 17 00:00:00 2001 From: Eduardo Date: Mon, 8 Jul 2024 21:32:32 +0200 Subject: [PATCH] now you can save and load saves! created save and load menu and edited pause script to accommodate --- scenes/interfaces/pause_menu.tscn | 4 +- scenes/interfaces/save_menu.tscn | 117 +++++++++++++++++++++++++++++- scripts/constants.gd | 2 + scripts/pause_menu.gd | 36 +++++---- scripts/save_menu.gd | 65 +++++++++++++++++ 5 files changed, 206 insertions(+), 18 deletions(-) create mode 100644 scripts/save_menu.gd diff --git a/scenes/interfaces/pause_menu.tscn b/scenes/interfaces/pause_menu.tscn index 510593e..5b5054c 100644 --- a/scenes/interfaces/pause_menu.tscn +++ b/scenes/interfaces/pause_menu.tscn @@ -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 diff --git a/scenes/interfaces/save_menu.tscn b/scenes/interfaces/save_menu.tscn index d16b259..57ff249 100644 --- a/scenes/interfaces/save_menu.tscn +++ b/scenes/interfaces/save_menu.tscn @@ -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"] diff --git a/scripts/constants.gd b/scripts/constants.gd index 0dfc733..9dec28f 100644 --- a/scripts/constants.gd +++ b/scripts/constants.gd @@ -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", ] diff --git a/scripts/pause_menu.gd b/scripts/pause_menu.gd index 9eceebd..20df73a 100644 --- a/scripts/pause_menu.gd +++ b/scripts/pause_menu.gd @@ -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 index 0000000..e76bc04 --- /dev/null +++ b/scripts/save_menu.gd @@ -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 -- 2.30.2