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