Files
Cozypaw-Hospital/scripts/autoload/SaveManager.gd
Steven Wroblewski 6b0c41bbfd fix(core): resolve review findings in Sprint 3-4
- Fix SaveManager reset_game to use DirAccess.remove correctly
- Add null check for FileAccess.open in save_game
- Fix AudioManager crossfade tween callback chain
- Replace fragile absolute HUD path with relative onready
- Guard character position save against empty id
- Add GameState.has_character_position helper
- Emit room_changed signal after tween completes
- Add target_floor validation in ElevatorButton
- Persist audio settings via GameState
- Add class_name to RoomNavigator, AudioManager, HUD

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 12:22:27 +02:00

44 lines
1.1 KiB
GDScript

## SaveManager — persists game state as JSON to user://savegame.json, auto-saves on state_changed.
extends Node
const SAVE_PATH: String = "user://savegame.json"
func _ready() -> void:
GameState.state_changed.connect(_on_state_changed)
func save_game() -> void:
var data: Dictionary = GameState.get_save_data()
var file: FileAccess = FileAccess.open(SAVE_PATH, FileAccess.WRITE)
if file == null:
push_error("SaveManager: cannot open save file for writing")
return
file.store_string(JSON.stringify(data))
file.close()
func load_game() -> void:
if not FileAccess.file_exists(SAVE_PATH):
return
var file: FileAccess = FileAccess.open(SAVE_PATH, FileAccess.READ)
if file == null:
return
var raw: String = file.get_as_text()
file.close()
var parsed: Variant = JSON.parse_string(raw)
if parsed is Dictionary:
GameState.apply_save_data(parsed)
func reset_game() -> void:
if FileAccess.file_exists(SAVE_PATH):
var dir: DirAccess = DirAccess.open("user://")
if dir != null:
dir.remove("savegame.json")
GameState.apply_save_data({})
func _on_state_changed() -> void:
save_game()