Newer
Older
rpg / v2 / apps / game / src / save.ts
/**
 * Сейвы игры (движковый SaveManager, хранилище — localStorage): автосейв
 * при меню Esc, «Продолжить» после перезагрузки страницы. Пейлоад —
 * полный снапшот сюжета: область/тайл героя, флаги+вары (used-интерактивы
 * и знакомства тоже флаги), сумка, часы суток, правки цветков по областям.
 */
import { SaveManager, type InventoryData } from '@rpg/engine';
import type { GameStateData } from './state';
import type { Tile } from './data/areas';

/** Снапшот игры для слота (version — формат пейлоада, не движка). */
export interface GameSave {
    version: 1;
    /** Область и тайл героя (вход = тайл, без повторного триггера перехода). */
    area: string;
    tile: Tile;
    /** Сюжет: флаги + числовые вары (GameStateData). */
    state: GameStateData;
    /** Сумка героя. */
    inv: InventoryData;
    /** Минуты суток (GameClock.set). */
    minutes: number;
    /** Правки цветков по областям: areaId → [индекс тайла, стоит ли]. */
    flowers: [string, [number, boolean][]][];
}

/** Менеджер слотов игры (localStorage; в тестах — Map, движковый интерфейс). */
export function createSaveManager(storage: Storage): SaveManager {
    return new SaveManager(storage, 'rpg2:');
}