Newer
Older
rpg / apps / game / src / data / migrations.ts
import { GameState, type GameStateData } from '@rpg/engine';
import { FLAGS } from './ids';

/**
 * Миграции GameStateData (ось state-версии, отдельная от SAVE_VERSION):
 * регистрируются в Game один раз, применяются в state.load при чтении сейва.
 * Контракт движка: миграция сама повышает version; от старых версий к новым.
 */

/** Текущая версия формата данных состояния. */
export const STATE_DATA_VERSION = 2;

/** v1→v2: знакомства metElder/metTrader → единый snake_case реестра FLAGS. */
export function migrateV1toV2(data: GameStateData): GameStateData {
    const rename = (f: string): string =>
        f === 'metElder' ? FLAGS.met_elder : f === 'metTrader' ? FLAGS.met_mila : f;
    return { version: 2, flags: data.flags.map(rename), vars: { ...data.vars } };
}

/** Зарегистрировать все миграции (зовёт Game при создании состояния). */
export function registerStateMigrations(state: GameState): void {
    state.dataVersion = STATE_DATA_VERSION;
    state.addMigration(migrateV1toV2);
}