Browse Source

Moving most logic and settings out of SaveDataComponent into SaveGameManager and SaveGameSettingsResource

pull/15/head
Ryan Reed 1 month ago
parent
commit
e62d24431d
6 changed files with 41 additions and 47 deletions
  1. +7
    -7
      save_load/autoloads/save_game_manager.gd
  2. +3
    -39
      save_load/components/save_level_data_component.gd
  3. +3
    -1
      save_load/components/save_level_data_component.tscn
  4. +15
    -0
      save_load/resources/save_game_settings_resource.gd
  5. +1
    -0
      save_load/resources/save_game_settings_resource.gd.uid
  6. +12
    -0
      save_load/resources/save_game_settings_resource.tres

+ 7
- 7
save_load/autoloads/save_game_manager.gd View File

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


+ 3
- 39
save_load/components/save_level_data_component.gd View File

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

+ 3
- 1
save_load/components/save_level_data_component.tscn View File

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

+ 15
- 0
save_load/resources/save_game_settings_resource.gd View File

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

+ 1
- 0
save_load/resources/save_game_settings_resource.gd.uid View File

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

+ 12
- 0
save_load/resources/save_game_settings_resource.tres View File

@ -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"

Loading…
Cancel
Save