From 675d56be4ca9ef7eb7667cd254935a9f8aca5241 Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Wed, 26 Mar 2025 15:14:45 -0400 Subject: [PATCH] Removing save button and added support for deleting save files --- save_load/autoloads/save_game_manager.gd | 9 +++ save_load/ui/save_file.gd | 23 ++++--- save_load/ui/save_file.tscn | 61 ++++++++++++----- save_load/ui/save_load_ui.gd | 36 ++++++++++ save_load/ui/save_load_ui.gd.uid | 1 + save_load/ui/save_load_ui.tscn | 85 +++++++++++++++++++++++- 6 files changed, 185 insertions(+), 30 deletions(-) create mode 100644 save_load/ui/save_load_ui.gd create mode 100644 save_load/ui/save_load_ui.gd.uid diff --git a/save_load/autoloads/save_game_manager.gd b/save_load/autoloads/save_game_manager.gd index 9d69135..4a52274 100644 --- a/save_load/autoloads/save_game_manager.gd +++ b/save_load/autoloads/save_game_manager.gd @@ -29,6 +29,7 @@ func _ready() -> void: quick_save.connect(quick_load_game) create_save_file.connect(_on_save_game_as_resource) load_save_file.connect(_load_game_resource) + delete_save_file.connect(_on_delete_save_file) func _unhandled_input(event: InputEvent) -> void: if event.is_action_pressed("quick_save"): @@ -155,3 +156,11 @@ func _on_save_game_as_resource(save_name: String) -> void: _game_data_resource.save_name = save_name _save_game_as_resource(_filename) game_saved.emit() + +func _on_delete_save_file(filename: String) -> void: + if filename.length() < 1: + printerr("_on_delete_save_file(): Empty filename provided") + return + + var save_file_path: String = _save_level_data_component.settings.save_game_data_path + filename + DirAccess.remove_absolute(save_file_path) diff --git a/save_load/ui/save_file.gd b/save_load/ui/save_file.gd index 35e0aec..1c82756 100644 --- a/save_load/ui/save_file.gd +++ b/save_load/ui/save_file.gd @@ -9,9 +9,11 @@ extends Panel @export var save_name_label: Label @export var save_date_label: Label @export var save_icon: TextureRect -@export var save_button: TextureButton @export var load_button: TextureButton +@export var delete_confirm_ui: Control @export var delete_button: TextureButton +@export var delete_confirm_button: BaseButton +@export var delete_cancel_button: BaseButton var save_file_details: SaveFileDetailsResource @@ -21,9 +23,11 @@ func _ready() -> void: mouse_exited.connect(_on_mouse_exited) delete_button.pressed.connect(_on_delete_button_pressed) - save_button.pressed.connect(_on_save_button_pressed) load_button.pressed.connect(_on_load_button_pressed) + delete_confirm_button.pressed.connect(_on_delete_confirm_button_pressed) + delete_cancel_button.pressed.connect(_on_delete_cancel_button_pressed) + func initialize(_resource: SaveFileDetailsResource) -> void: save_file_details = _resource @@ -43,19 +47,18 @@ func set_save_name() -> void: save_name_label.text = save_file_details.filename - func _on_delete_button_pressed() -> void: + delete_confirm_ui.show() + +func _on_delete_confirm_button_pressed() -> void: SaveGameManager.delete_save_file.emit(save_file_details.filename) - print("DELETING: ", save_file_details.filename) + queue_free() + +func _on_delete_cancel_button_pressed() -> void: + delete_confirm_ui.hide() func _on_load_button_pressed() -> void: SaveGameManager.load_save_file.emit(save_file_details.filename) - print("LOADING: ", save_file_details.filename) - -func _on_save_button_pressed() -> void: - SaveGameManager.create_save_file.emit(save_file_details.filename) - print("SAVING: ", save_file_details.filename) - func _on_mouse_entered() -> void: set("theme_override_styles/panel", save_panel_highlight) diff --git a/save_load/ui/save_file.tscn b/save_load/ui/save_file.tscn index b3fcaa3..9be91ae 100644 --- a/save_load/ui/save_file.tscn +++ b/save_load/ui/save_file.tscn @@ -1,20 +1,17 @@ -[gd_scene load_steps=14 format=3 uid="uid://bb7poutsn4ex2"] +[gd_scene load_steps=11 format=3 uid="uid://bb7poutsn4ex2"] [ext_resource type="Texture2D" uid="uid://dknv7amroftm8" path="res://assets/icon.svg" id="1_714lu"] [ext_resource type="StyleBox" uid="uid://biousyggn7iua" path="res://save_load/resources/save_file_panel_theme.tres" id="1_cqw77"] [ext_resource type="Texture2D" uid="uid://cmq51cgasug81" path="res://save_load/assets/folder-open-normal.png" id="1_k6haa"] [ext_resource type="Script" uid="uid://dcfdyua5gwpw4" path="res://save_load/ui/save_file.gd" id="2_5g2eu"] [ext_resource type="Texture2D" uid="uid://blyryo60jydgi" path="res://save_load/assets/folder-open-pressed.png" id="2_714lu"] -[ext_resource type="Texture2D" uid="uid://ja8bc1h5x85o" path="res://save_load/assets/save-normal.png" id="2_jgxci"] -[ext_resource type="Texture2D" uid="uid://crqgyft4gfilt" path="res://save_load/assets/save-pressed.png" id="3_cqw77"] [ext_resource type="StyleBox" uid="uid://bwm315lqbbb87" path="res://save_load/resources/save_file_highlight_panel_theme.tres" id="3_om23c"] [ext_resource type="Texture2D" uid="uid://by4w5ll3le7g6" path="res://save_load/assets/folder-open-hover.png" id="3_ubfnn"] -[ext_resource type="Texture2D" uid="uid://o3l0j53mgkan" path="res://save_load/assets/save-hover.png" id="4_5g2eu"] [ext_resource type="Texture2D" uid="uid://dvp5yeoqw36yt" path="res://save_load/assets/trash-normal.png" id="4_c2bnc"] [ext_resource type="Texture2D" uid="uid://brwa8yljyrlgy" path="res://save_load/assets/trash-pressed.png" id="5_jgxci"] [ext_resource type="Texture2D" uid="uid://cmrtuy0i5qc01" path="res://save_load/assets/trash-hover.png" id="6_cqw77"] -[node name="SaveFilePanel" type="Panel" node_paths=PackedStringArray("save_name_label", "save_date_label", "save_icon", "save_button", "load_button", "delete_button")] +[node name="SaveFilePanel" type="Panel" node_paths=PackedStringArray("save_name_label", "save_date_label", "save_icon", "load_button", "delete_confirm_ui", "delete_button", "delete_confirm_button", "delete_cancel_button")] custom_minimum_size = Vector2(420, 60) offset_right = 420.0 offset_bottom = 60.0 @@ -25,9 +22,11 @@ save_panel_normal = ExtResource("1_cqw77") save_name_label = NodePath("HBoxContainer/NameDate/SaveName") save_date_label = NodePath("HBoxContainer/NameDate/SaveDate") save_icon = NodePath("HBoxContainer/SaveFileIcon") -save_button = NodePath("HBoxContainer/Actions/SaveButton") load_button = NodePath("HBoxContainer/Actions/LoadButton") +delete_confirm_ui = NodePath("ConfirmDeletePanel") delete_button = NodePath("HBoxContainer/Actions/DeleteButton") +delete_confirm_button = NodePath("ConfirmDeletePanel/VBoxContainer/HBoxContainer/ConfirmButton") +delete_cancel_button = NodePath("ConfirmDeletePanel/VBoxContainer/HBoxContainer/CancelButton") [node name="HBoxContainer" type="HBoxContainer" parent="."] custom_minimum_size = Vector2(400, 0) @@ -67,17 +66,6 @@ text = "2025/03/20 13:43:12" layout_mode = 2 size_flags_horizontal = 10 -[node name="SaveButton" type="TextureButton" parent="HBoxContainer/Actions"] -clip_contents = true -custom_minimum_size = Vector2(32, 32) -layout_mode = 2 -tooltip_text = "Load Save" -texture_normal = ExtResource("2_jgxci") -texture_pressed = ExtResource("3_cqw77") -texture_hover = ExtResource("4_5g2eu") -ignore_texture_size = true -stretch_mode = 5 - [node name="LoadButton" type="TextureButton" parent="HBoxContainer/Actions"] clip_contents = true custom_minimum_size = Vector2(32, 32) @@ -98,3 +86,42 @@ texture_pressed = ExtResource("5_jgxci") texture_hover = ExtResource("6_cqw77") ignore_texture_size = true stretch_mode = 5 + +[node name="ConfirmDeletePanel" type="Panel" parent="."] +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="ConfirmDeletePanel"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -61.5 +offset_top = -29.0 +offset_right = 61.5 +offset_bottom = 29.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Label" type="Label" parent="ConfirmDeletePanel/VBoxContainer"] +layout_mode = 2 +text = "Delete Save?" +horizontal_alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="ConfirmDeletePanel/VBoxContainer"] +layout_mode = 2 + +[node name="ConfirmButton" type="Button" parent="ConfirmDeletePanel/VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "Confirm" + +[node name="CancelButton" type="Button" parent="ConfirmDeletePanel/VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "Cancel" diff --git a/save_load/ui/save_load_ui.gd b/save_load/ui/save_load_ui.gd new file mode 100644 index 0000000..11744cd --- /dev/null +++ b/save_load/ui/save_load_ui.gd @@ -0,0 +1,36 @@ +class_name SaveLoadUI +extends Control + + +@export var show_save_ui_button: BaseButton +@export var new_save_ui: Control +@export var save_name_input: LineEdit +@export var create_save_button: BaseButton +@export var create_save_cancel_button: BaseButton + + +func _ready() -> void: + show_save_ui_button.pressed.connect(_on_show_save_ui_button_pressed) + create_save_button.pressed.connect(_on_create_save_button_pressed) + create_save_cancel_button.pressed.connect(_on_create_save_cancel_button_pressed) + + new_save_ui.hide() + + +func _on_create_save_button_pressed() -> void: + var save_name: String = save_name_input.text + if save_name.strip_edges() == "": + save_name = Time.get_datetime_string_from_system().replace(":", "") + + SaveGameManager.create_save_file.emit(save_name) + SaveGameManager.refresh_saves_list.emit() + new_save_ui.hide() + SignalManager.resume_game.emit() + +func _on_create_save_cancel_button_pressed() -> void: + new_save_ui.hide() + +func _on_show_save_ui_button_pressed() -> void: + var current_date: String = Time.get_datetime_string_from_system() + save_name_input.text = current_date.replace(":", "") + new_save_ui.show() diff --git a/save_load/ui/save_load_ui.gd.uid b/save_load/ui/save_load_ui.gd.uid new file mode 100644 index 0000000..d3bf6a0 --- /dev/null +++ b/save_load/ui/save_load_ui.gd.uid @@ -0,0 +1 @@ +uid://b6831eygibii7 diff --git a/save_load/ui/save_load_ui.tscn b/save_load/ui/save_load_ui.tscn index 4b1d13d..0a20730 100644 --- a/save_load/ui/save_load_ui.tscn +++ b/save_load/ui/save_load_ui.tscn @@ -1,8 +1,13 @@ -[gd_scene load_steps=2 format=3 uid="uid://dauchkhmnyk7n"] +[gd_scene load_steps=7 format=3 uid="uid://dauchkhmnyk7n"] +[ext_resource type="Script" uid="uid://b6831eygibii7" path="res://save_load/ui/save_load_ui.gd" id="1_lo08d"] [ext_resource type="PackedScene" uid="uid://cyxieflejsggu" path="res://save_load/ui/save_files_list.tscn" id="1_tqtxm"] +[ext_resource type="PackedScene" uid="uid://bb7poutsn4ex2" path="res://save_load/ui/save_file.tscn" id="2_6uxbh"] +[ext_resource type="Texture2D" uid="uid://ja8bc1h5x85o" path="res://save_load/assets/save-normal.png" id="3_lo08d"] +[ext_resource type="Texture2D" uid="uid://crqgyft4gfilt" path="res://save_load/assets/save-pressed.png" id="4_md7la"] +[ext_resource type="Texture2D" uid="uid://o3l0j53mgkan" path="res://save_load/assets/save-hover.png" id="5_hmxxn"] -[node name="SaveLoadUI" type="Control"] +[node name="SaveLoadUI" type="Control" node_paths=PackedStringArray("show_save_ui_button", "new_save_ui", "save_name_input", "create_save_button", "create_save_cancel_button")] process_mode = 3 layout_mode = 3 anchors_preset = 15 @@ -12,6 +17,12 @@ grow_horizontal = 2 grow_vertical = 2 size_flags_horizontal = 6 size_flags_vertical = 4 +script = ExtResource("1_lo08d") +show_save_ui_button = NodePath("Panel/MarginContainer/VBoxContainer/BottomRow/SaveButton") +new_save_ui = NodePath("Panel/NewSaveUI") +save_name_input = NodePath("Panel/NewSaveUI/MarginContainer/VBoxContainer/SaveNameInput") +create_save_button = NodePath("Panel/NewSaveUI/MarginContainer/VBoxContainer/SaveButton") +create_save_cancel_button = NodePath("Panel/NewSaveUI/MarginContainer/VBoxContainer/CancelButton") [node name="Panel" type="Panel" parent="."] layout_mode = 1 @@ -39,8 +50,76 @@ layout_mode = 2 [node name="Label" type="Label" parent="Panel/MarginContainer/VBoxContainer"] layout_mode = 2 theme_override_font_sizes/font_size = 40 -text = "Load Save" +text = "Save/Load Game" horizontal_alignment = 1 [node name="SaveFilesList" parent="Panel/MarginContainer/VBoxContainer" instance=ExtResource("1_tqtxm")] layout_mode = 2 + +[node name="SaveFilePanel" parent="Panel/MarginContainer/VBoxContainer/SaveFilesList" instance=ExtResource("2_6uxbh")] +layout_mode = 2 + +[node name="BottomRow" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +alignment = 1 + +[node name="SaveButton" type="TextureButton" parent="Panel/MarginContainer/VBoxContainer/BottomRow"] +clip_contents = true +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "New Save" +texture_normal = ExtResource("3_lo08d") +texture_pressed = ExtResource("4_md7la") +texture_hover = ExtResource("5_hmxxn") +ignore_texture_size = true +stretch_mode = 5 + +[node name="NewSaveUI" type="Panel" parent="Panel"] +custom_minimum_size = Vector2(450, 100) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="MarginContainer" type="MarginContainer" parent="Panel/NewSaveUI"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -205.0 +offset_top = -29.5 +offset_right = 205.0 +offset_bottom = 29.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 5 +theme_override_constants/margin_top = 5 +theme_override_constants/margin_right = 5 +theme_override_constants/margin_bottom = 5 + +[node name="VBoxContainer" type="VBoxContainer" parent="Panel/NewSaveUI/MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 + +[node name="SaveNameLabel" type="Label" parent="Panel/NewSaveUI/MarginContainer/VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 20 +text = "Create New Save" + +[node name="SaveNameInput" type="LineEdit" parent="Panel/NewSaveUI/MarginContainer/VBoxContainer"] +custom_minimum_size = Vector2(400, 0) +layout_mode = 2 +placeholder_text = "New Save File Name" + +[node name="SaveButton" type="Button" parent="Panel/NewSaveUI/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Create Save" + +[node name="CancelButton" type="Button" parent="Panel/NewSaveUI/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Cancel"