From 9747e80f1d4d2b7abebcb27b2ffab532e86a1b97 Mon Sep 17 00:00:00 2001 From: Rob Kelly Date: Tue, 22 Apr 2025 16:00:55 -0600 Subject: [PATCH] Saves are ID'd by scene --- src/world/world.gd | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/world/world.gd b/src/world/world.gd index d407e31..2d10452 100644 --- a/src/world/world.gd +++ b/src/world/world.gd @@ -2,7 +2,7 @@ class_name World extends Node ## Access and flow control for the game world. @export var pause_enabled := true -@export var save_path := "user://save_state.res" +@export var save_path_fmt := "user://{0}.state.res" @export var manager: WorldManager @export var spook_manager: SpookManager @@ -47,6 +47,19 @@ func unpause() -> void: get_tree().paused = false +func _get_level_id(level: PackedScene) -> String: + if level.resource_path: + var file := level.resource_path.get_file() + if file: + return file + return level.resource_path + return "level" + + +func _get_save_path(level: PackedScene) -> String: + return save_path_fmt.format([_get_level_id(level)]) + + func load_level(level: PackedScene, save: SaveState = null) -> void: for c: Node in level_root.get_children(): c.queue_free() @@ -73,6 +86,7 @@ func _reload_saved(save: SaveState) -> void: func on_game_over() -> void: # reload the level from the last save + var save_path := _get_save_path(current_level) if ResourceLoader.exists(save_path): Game.instance.queue_load(save_path).finally(_reload_saved) else: @@ -83,6 +97,7 @@ func save_progress() -> void: print("Preparing save state...") save_icon.show() var save := SaveState.serialize(self) + var save_path := _get_save_path(current_level) print("Writing save to ", save_path) ResourceSaver.save(save, save_path) save_icon.hide()