From 9266f5bbfc4c6903d1902689c23ba8d4560d8534 Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Tue, 25 Mar 2025 17:02:04 -0400 Subject: [PATCH] Adding function for listing file saves --- .../components/save_level_data_component.gd | 26 +++++++++++++++++++ .../resources/save_file_details_resource.gd | 10 +++++++ .../save_file_details_resource.gd.uid | 1 + 3 files changed, 37 insertions(+) create mode 100644 save_load/resources/save_file_details_resource.gd create mode 100644 save_load/resources/save_file_details_resource.gd.uid diff --git a/save_load/components/save_level_data_component.gd b/save_load/components/save_level_data_component.gd index 8e43f10..f7e8f5b 100644 --- a/save_load/components/save_level_data_component.gd +++ b/save_load/components/save_level_data_component.gd @@ -62,3 +62,29 @@ func load_game() -> void: for resource: Resource in game_data_resource.save_data_nodes: if resource is Node3DDataResource: (resource as Node3DDataResource)._load_data(root_node) + + +func list_saves() -> Array[SaveFileDetailsResource]: # TODO: Update hints + var save_files: Array[SaveFileDetailsResource] = [] + if !DirAccess.dir_exists_absolute(save_game_data_path): + return save_files + + for filename: String in ResourceLoader.list_directory(save_game_data_path): + if !filename.begins_with("save_"): continue + if !filename.ends_with(".tres"): continue # Screenshots, etc + + var _save_path: String = save_game_data_path + filename + var _save_icon: String = filename.replace(".tres", ".png") + var _save_resource: SaveFileDetailsResource = SaveFileDetailsResource.new() + var _loaded_file: FileAccess = FileAccess.open(_save_path, FileAccess.READ) + + _save_resource.filename = filename + _save_resource.date_created = Time.get_datetime_string_from_unix_time(FileAccess.get_modified_time(_save_path)) + _save_resource.filesize = _loaded_file.get_length() + + if FileAccess.file_exists(save_game_data_path + _save_icon): + _save_resource.save_icon = _save_icon + + save_files.append(_save_resource) + + return save_files diff --git a/save_load/resources/save_file_details_resource.gd b/save_load/resources/save_file_details_resource.gd new file mode 100644 index 0000000..e56bc20 --- /dev/null +++ b/save_load/resources/save_file_details_resource.gd @@ -0,0 +1,10 @@ +## Details related to a filesave +## Used for displaying save file details in the UI +class_name SaveFileDetailsResource +extends Node + + +@export var filename: String = "" +@export var date_created: String = "" +@export var filesize: int = 0 +@export var save_icon: String = "res://assets/icon.svg" diff --git a/save_load/resources/save_file_details_resource.gd.uid b/save_load/resources/save_file_details_resource.gd.uid new file mode 100644 index 0000000..5f638e2 --- /dev/null +++ b/save_load/resources/save_file_details_resource.gd.uid @@ -0,0 +1 @@ +uid://hj7t2segibta