import { Disposable } from "../interfaces/lifecycle.d.ts"; import { GameEntityManager } from "./entity.d.ts"; import { LevelManager } from "./level.d.ts"; import { LoggingUtility } from "../utils/logger.d.ts"; export interface SaveData { version: number; levelName: string; entities: SerializedEntity[]; custom: Record; } export interface SerializedEntity { id: string; type: string; name?: string; tags: string[]; state: object; parentId?: string; transform?: { position: { x: number; y: number; z: number; }; rotation: { x: number; y: number; z: number; }; scaling: { x: number; y: number; z: number; }; }; } type BeforeSerializeHook = () => Record; type AfterDeserializeHook = (custom: Record) => void; export declare class SaveManager implements Disposable { private _entityManager; private _levelManager; private _log; private _beforeSerializeHooks; private _afterDeserializeHooks; constructor(entityManager: GameEntityManager, levelManager: LevelManager, logger?: LoggingUtility); /** * Register a hook that returns custom data to include in save data. * Multiple hooks can be registered; their results are merged into the `custom` field. */ onBeforeSerialize(hook: BeforeSerializeHook): void; /** * Register a hook to process custom data when loading a save. * Multiple hooks can be registered; each receives the full custom data object. */ onAfterDeserialize(hook: AfterDeserializeHook): void; /** * Captures the current game state as a serializable SaveData object. * Iterates all entities, captures transforms, state, tags, and parent references. * Calls all beforeSerialize hooks to gather custom data. */ serialize(): SaveData; /** * Restores game state from a SaveData object. * * Flow: * 1. Transition to the saved level * 2. Destroy all existing entities (level-spawned ones) * 3. Recreate entities from save data * 4. Restore transforms on entities with nodes * 5. Re-establish parent-child hierarchy * 6. Call afterDeserialize hooks */ deserialize(data: SaveData): Promise; $teardown(): Promise; } export {};