Browse Source

Removing save button and added support for deleting save files

pull/15/head
Ryan Reed 3 months ago
parent
commit
675d56be4c
6 changed files with 185 additions and 30 deletions
  1. +9
    -0
      save_load/autoloads/save_game_manager.gd
  2. +13
    -10
      save_load/ui/save_file.gd
  3. +44
    -17
      save_load/ui/save_file.tscn
  4. +36
    -0
      save_load/ui/save_load_ui.gd
  5. +1
    -0
      save_load/ui/save_load_ui.gd.uid
  6. +82
    -3
      save_load/ui/save_load_ui.tscn

+ 9
- 0
save_load/autoloads/save_game_manager.gd View File

@ -29,6 +29,7 @@ func _ready() -> void:
quick_save.connect(quick_load_game) quick_save.connect(quick_load_game)
create_save_file.connect(_on_save_game_as_resource) create_save_file.connect(_on_save_game_as_resource)
load_save_file.connect(_load_game_resource) load_save_file.connect(_load_game_resource)
delete_save_file.connect(_on_delete_save_file)
func _unhandled_input(event: InputEvent) -> void: func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("quick_save"): 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 _game_data_resource.save_name = save_name
_save_game_as_resource(_filename) _save_game_as_resource(_filename)
game_saved.emit() 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)

+ 13
- 10
save_load/ui/save_file.gd View File

@ -9,9 +9,11 @@ extends Panel
@export var save_name_label: Label @export var save_name_label: Label
@export var save_date_label: Label @export var save_date_label: Label
@export var save_icon: TextureRect @export var save_icon: TextureRect
@export var save_button: TextureButton
@export var load_button: TextureButton @export var load_button: TextureButton
@export var delete_confirm_ui: Control
@export var delete_button: TextureButton @export var delete_button: TextureButton
@export var delete_confirm_button: BaseButton
@export var delete_cancel_button: BaseButton
var save_file_details: SaveFileDetailsResource var save_file_details: SaveFileDetailsResource
@ -21,9 +23,11 @@ func _ready() -> void:
mouse_exited.connect(_on_mouse_exited) mouse_exited.connect(_on_mouse_exited)
delete_button.pressed.connect(_on_delete_button_pressed) delete_button.pressed.connect(_on_delete_button_pressed)
save_button.pressed.connect(_on_save_button_pressed)
load_button.pressed.connect(_on_load_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: func initialize(_resource: SaveFileDetailsResource) -> void:
save_file_details = _resource save_file_details = _resource
@ -43,19 +47,18 @@ func set_save_name() -> void:
save_name_label.text = save_file_details.filename save_name_label.text = save_file_details.filename
func _on_delete_button_pressed() -> void: 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) 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: func _on_load_button_pressed() -> void:
SaveGameManager.load_save_file.emit(save_file_details.filename) 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: func _on_mouse_entered() -> void:
set("theme_override_styles/panel", save_panel_highlight) set("theme_override_styles/panel", save_panel_highlight)


+ 44
- 17
save_load/ui/save_file.tscn View File

@ -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="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="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="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="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://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="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://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://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://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"] [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) custom_minimum_size = Vector2(420, 60)
offset_right = 420.0 offset_right = 420.0
offset_bottom = 60.0 offset_bottom = 60.0
@ -25,9 +22,11 @@ save_panel_normal = ExtResource("1_cqw77")
save_name_label = NodePath("HBoxContainer/NameDate/SaveName") save_name_label = NodePath("HBoxContainer/NameDate/SaveName")
save_date_label = NodePath("HBoxContainer/NameDate/SaveDate") save_date_label = NodePath("HBoxContainer/NameDate/SaveDate")
save_icon = NodePath("HBoxContainer/SaveFileIcon") save_icon = NodePath("HBoxContainer/SaveFileIcon")
save_button = NodePath("HBoxContainer/Actions/SaveButton")
load_button = NodePath("HBoxContainer/Actions/LoadButton") load_button = NodePath("HBoxContainer/Actions/LoadButton")
delete_confirm_ui = NodePath("ConfirmDeletePanel")
delete_button = NodePath("HBoxContainer/Actions/DeleteButton") 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="."] [node name="HBoxContainer" type="HBoxContainer" parent="."]
custom_minimum_size = Vector2(400, 0) custom_minimum_size = Vector2(400, 0)
@ -67,17 +66,6 @@ text = "2025/03/20 13:43:12"
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 10 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"] [node name="LoadButton" type="TextureButton" parent="HBoxContainer/Actions"]
clip_contents = true clip_contents = true
custom_minimum_size = Vector2(32, 32) custom_minimum_size = Vector2(32, 32)
@ -98,3 +86,42 @@ texture_pressed = ExtResource("5_jgxci")
texture_hover = ExtResource("6_cqw77") texture_hover = ExtResource("6_cqw77")
ignore_texture_size = true ignore_texture_size = true
stretch_mode = 5 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"

+ 36
- 0
save_load/ui/save_load_ui.gd View File

@ -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()

+ 1
- 0
save_load/ui/save_load_ui.gd.uid View File

@ -0,0 +1 @@
uid://b6831eygibii7

+ 82
- 3
save_load/ui/save_load_ui.tscn View File

@ -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://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 process_mode = 3
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
@ -12,6 +17,12 @@ grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
size_flags_horizontal = 6 size_flags_horizontal = 6
size_flags_vertical = 4 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="."] [node name="Panel" type="Panel" parent="."]
layout_mode = 1 layout_mode = 1
@ -39,8 +50,76 @@ layout_mode = 2
[node name="Label" type="Label" parent="Panel/MarginContainer/VBoxContainer"] [node name="Label" type="Label" parent="Panel/MarginContainer/VBoxContainer"]
layout_mode = 2 layout_mode = 2
theme_override_font_sizes/font_size = 40 theme_override_font_sizes/font_size = 40
text = "Load Save"
text = "Save/Load Game"
horizontal_alignment = 1 horizontal_alignment = 1
[node name="SaveFilesList" parent="Panel/MarginContainer/VBoxContainer" instance=ExtResource("1_tqtxm")] [node name="SaveFilesList" parent="Panel/MarginContainer/VBoxContainer" instance=ExtResource("1_tqtxm")]
layout_mode = 2 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"

Loading…
Cancel
Save