diff --git a/save_load/autoloads/save_game_manager.gd b/save_load/autoloads/save_game_manager.gd index be26baf..f698bfe 100644 --- a/save_load/autoloads/save_game_manager.gd +++ b/save_load/autoloads/save_game_manager.gd @@ -42,7 +42,7 @@ func list_saves() -> Array[SaveFileDetailsResource]: if not _load_save_level_data_component(): return save_files - var save_game_data_path: String = _save_level_data_component.save_game_data_path + var save_game_data_path: String = _save_level_data_component.settings.save_game_data_path if !DirAccess.dir_exists_absolute(save_game_data_path): return save_files @@ -78,7 +78,7 @@ func list_saves() -> Array[SaveFileDetailsResource]: func quick_save_game() -> void: if not _load_save_level_data_component(): return - _save_game_as_resource(_save_level_data_component.quicksave_file_name) + _save_game_as_resource(_save_level_data_component.settings.quicksave_file_name) game_saved.emit() func quick_load_game() -> void: @@ -86,7 +86,7 @@ func quick_load_game() -> void: # TODO: Don't reset world if quicksave not found EntityManager.reset_world.emit() - _load_game_resource(_save_level_data_component.quicksave_file_name) + _load_game_resource(_save_level_data_component.settings.quicksave_file_name) game_loaded.emit() @@ -101,7 +101,7 @@ func _load_save_level_data_component() -> bool: func _load_game_resource(resource_filename: String) -> void: if not _load_save_level_data_component(): return - var save_game_file_path: String = _save_level_data_component.save_game_data_path + resource_filename + var save_game_file_path: String = _save_level_data_component.settings.save_game_data_path + resource_filename if !FileAccess.file_exists(save_game_file_path): printerr("Failed to load save. File does not exist: ", save_game_file_path) return @@ -119,10 +119,10 @@ func _load_game_resource(resource_filename: String) -> void: func _save_game_as_resource(resource_filename: String) -> void: if not _load_save_level_data_component(): return - if !DirAccess.dir_exists_absolute(_save_level_data_component.save_game_data_path): - DirAccess.make_dir_absolute(_save_level_data_component.save_game_data_path) + if !DirAccess.dir_exists_absolute(_save_level_data_component.settings.save_game_data_path): + DirAccess.make_dir_absolute(_save_level_data_component.settings.save_game_data_path) - var save_game_file_path: String = _save_level_data_component.save_game_data_path + resource_filename + var save_game_file_path: String = _save_level_data_component.settings.save_game_data_path + resource_filename _save_node_data() var result: int = ResourceSaver.save(_game_data_resource, save_game_file_path) diff --git a/save_load/components/save_level_data_component.gd b/save_load/components/save_level_data_component.gd index 550e504..10ccc4b 100644 --- a/save_load/components/save_level_data_component.gd +++ b/save_load/components/save_level_data_component.gd @@ -1,46 +1,10 @@ -## Performs the actual saving and loading of data related to this level/scene -## Utilized by the SaveGameManager +## Provides an easy reference for save settings through an export rather than code +## Should be attached to the main world/level scene class_name SaveLevelDataComponent extends Node -## See documentation to where this path is: https://docs.godotengine.org/en/stable/tutorials/io/data_paths.html#accessing-persistent-user-data-user[br][br] -## Default Paths:[br] -## * Windows: %APPDATA%\Godot\app_userdata\[project_name][br] -## * macOS: ~/Library/Application Support/Godot/app_userdata/[project_name][br] -## * Linux: ~/.local/share/godot/app_userdata/[project_name][br] -@export var save_game_data_path: String = "user://game_data/" -@export var max_auto_saves: int = 5 - -@export_group("Save File Names") -@export var save_file_name: String = "save_%s_game_data.tres" ## %s is the level name -@export var quicksave_file_name: String = "quicksave_game_data.tres" -@export var autosave_file_name: String = "autosave_%s_game_data.tres" ## %s is the save number (probably 01) - -var level_scene_name: String -var game_data_resource: SaveGameDataResource +@export var settings: SaveGameSettings ## The SaveGameSettings resource func _ready() -> void: add_to_group("save_level_data_component") - level_scene_name = get_parent().name - - SaveGameManager.create_auto_save_file.connect(_on_create_auto_save_file) - - -func load_game() -> void: - SaveGameManager.load_save_file.emit(save_file_name % level_scene_name) - -func quick_load_game() -> void: - SaveGameManager.quick_load.emit() - -func quick_save_game() -> void: - SaveGameManager.quick_save.emit() - -func save_game() -> void: - SaveGameManager.create_save_file.emit(save_file_name % level_scene_name) - - -func _on_create_auto_save_file() -> void: - # TODO: Check max number of autosaves, increment existing autosaves, etc - #_save_game_as_resource(autosave_file_name % "01") - pass diff --git a/save_load/components/save_level_data_component.tscn b/save_load/components/save_level_data_component.tscn index ccdc1d0..570dc3a 100644 --- a/save_load/components/save_level_data_component.tscn +++ b/save_load/components/save_level_data_component.tscn @@ -1,6 +1,8 @@ -[gd_scene load_steps=2 format=3 uid="uid://c3pqilb6yh5kc"] +[gd_scene load_steps=3 format=3 uid="uid://c3pqilb6yh5kc"] [ext_resource type="Script" uid="uid://c7x2qvyu62230" path="res://save_load/components/save_level_data_component.gd" id="1_exguq"] +[ext_resource type="Resource" uid="uid://o32fooj1lxg7" path="res://save_load/resources/save_game_settings_resource.tres" id="2_rkr1f"] [node name="SaveLevelDataComponent" type="Node"] script = ExtResource("1_exguq") +settings = ExtResource("2_rkr1f") diff --git a/save_load/resources/save_game_settings_resource.gd b/save_load/resources/save_game_settings_resource.gd new file mode 100644 index 0000000..4aca6b5 --- /dev/null +++ b/save_load/resources/save_game_settings_resource.gd @@ -0,0 +1,15 @@ +class_name SaveGameSettings +extends Resource + + +## See documentation to where this path is: https://docs.godotengine.org/en/stable/tutorials/io/data_paths.html#accessing-persistent-user-data-user[br][br] +## Default Paths:[br] +## * Windows: %APPDATA%\Godot\app_userdata\[project_name][br] +## * macOS: ~/Library/Application Support/Godot/app_userdata/[project_name][br] +## * Linux: ~/.local/share/godot/app_userdata/[project_name][br] +@export var save_game_data_path: String = "user://game_data/" +@export var max_auto_saves: int = 5 + +@export var save_file_name: String = "save_game_data.tres" +@export var quicksave_file_name: String = "quicksave_game_data.tres" +@export var autosave_file_name: String = "autosave_%s_game_data.tres" ## %s is the save number (probably 01) diff --git a/save_load/resources/save_game_settings_resource.gd.uid b/save_load/resources/save_game_settings_resource.gd.uid new file mode 100644 index 0000000..7d1ede0 --- /dev/null +++ b/save_load/resources/save_game_settings_resource.gd.uid @@ -0,0 +1 @@ +uid://d0iptf06t7f47 diff --git a/save_load/resources/save_game_settings_resource.tres b/save_load/resources/save_game_settings_resource.tres new file mode 100644 index 0000000..0e1f12d --- /dev/null +++ b/save_load/resources/save_game_settings_resource.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SaveGameSettings" load_steps=2 format=3 uid="uid://o32fooj1lxg7"] + +[ext_resource type="Script" uid="uid://d0iptf06t7f47" path="res://save_load/resources/save_game_settings_resource.gd" id="1_o1tpj"] + +[resource] +script = ExtResource("1_o1tpj") +save_game_data_path = "user://game_data/" +max_auto_saves = 5 +save_file_name = "save_%s_game_data.tres" +quicksave_file_name = "quicksave_game_data.tres" +autosave_file_name = "autosave_%s_game_data.tres" +metadata/_custom_type_script = "uid://d0iptf06t7f47"