Saves are ID'd by scene

This commit is contained in:
Rob Kelly 2025-04-22 16:00:55 -06:00
parent 656e1d26bb
commit 9747e80f1d

View File

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