From 3073c8d4d62cf4ff6055084acfc5f5bdc9395d98 Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Thu, 27 Mar 2025 17:49:31 -0400 Subject: [PATCH] Splitting load_save into load_save and apply_save --- .../autoloads/save_game_manager.gd | 26 ++++++++++++------- scenes/world/world.gd | 5 ++++ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/addons/save_load_system/autoloads/save_game_manager.gd b/addons/save_load_system/autoloads/save_game_manager.gd index 188d133..844687b 100644 --- a/addons/save_load_system/autoloads/save_game_manager.gd +++ b/addons/save_load_system/autoloads/save_game_manager.gd @@ -7,13 +7,15 @@ extends Node +signal apply_load_complete +signal apply_save ## Apply the loaded data to the tree. Note: This should happen AFTER load_save() signal create_auto_save signal create_save(save_name: String) signal delete_save(filename: String) signal delete_error(error_message: String) signal load_complete signal load_error(error_message: String) -signal load_save(filename: String) +signal load_save(filename: String) ## Loads the save into memory. Does NOT apply the load as this allows for other actions (such as resetting the levle/world).[br]Don't forget to run `apply_save` after loading signal save_complete signal save_error(error_message: String) @@ -32,11 +34,12 @@ var _save_level_data_component: SaveLevelDataComponent ## Contains the save path func _ready() -> void: quick_load.connect(quick_load_game) - quick_save.connect(quick_load_game) + quick_save.connect(quick_save_game) create_save.connect(_on_save_game_as_resource) load_save.connect(load_game_save) delete_save.connect(_on_delete_save) toggle_save_icon_generation.connect(_on_toggle_save_icon_generation) + apply_save.connect(_on_apply_save) func _unhandled_input(event: InputEvent) -> void: if event.is_action_pressed("quick_save"): @@ -142,13 +145,6 @@ func _load_game_resource(resource_filename: String) -> void: load_error.emit("Failed to load save. Unknown format? %s" % save_game_file_path) return - EntityManager.reset_world.emit() - - var root_node: Window = get_tree().root - for resource: Resource in _game_data_resource.save_data_nodes: - if resource is Node3DDataResource: - (resource as Node3DDataResource)._load_data(root_node) - load_complete.emit() func _save_game_as_resource(resource_filename: String) -> void: @@ -195,6 +191,18 @@ func _take_save_screenshot(save_game_file_path: String) -> void: _icon.save_png(_icon_filepath) +## Apply the loaded save.[br] +## Performed after load_save +func _on_apply_save() -> void: + if _game_data_resource == null: return + + var root_node: Window = get_tree().root + for resource: Resource in _game_data_resource.save_data_nodes: + if resource is Node3DDataResource: + (resource as Node3DDataResource)._load_data(root_node) + + apply_load_complete.emit() + ## Save the game, with a filename of `.tres func _on_save_game_as_resource(save_name: String) -> void: if not _load_save_level_data_component(): return diff --git a/scenes/world/world.gd b/scenes/world/world.gd index a8b0bc5..6009743 100644 --- a/scenes/world/world.gd +++ b/scenes/world/world.gd @@ -15,6 +15,7 @@ func _ready() -> void: EntityManager.drop_block.connect(_create_dropped_block) EntityManager.reset_world.connect(clear_world) EntityManager.spawn_player.connect(spawn_player) + SaveGameManager.load_complete.connect(_on_load_save_complete) clear_world() create_world() @@ -82,3 +83,7 @@ func _create_test_blocks() -> void: func _on_reset_world() -> void: clear_world() + +func _on_load_save_complete() -> void: + clear_world() + SaveGameManager.apply_save.emit()