ca5faeea创建于 9 天前历史提交
/**
 * SaveSystem.js
 *
 * Persistence using localStorage. Saves the tilemap (terrain + objects)
 * along with camera state for a smoother return-to-game experience.
 */

import { CONFIG } from '../config.js';
import { PlacedObject } from '../building/PlacedObject.js';

const KEY = CONFIG.storageKey;

export const SaveSystem = {
    save(tileMap, camera) {
        const payload = {
            v: 1,
            tileMap: tileMap.serialize(),
            camera: {
                offsetX: camera.offsetX,
                offsetY: camera.offsetY,
                zoom: camera.zoom,
            },
        };
        try {
            localStorage.setItem(KEY, JSON.stringify(payload));
            return true;
        } catch (e) {
            console.error('Save failed:', e);
            return false;
        }
    },

    load(tileMap, camera) {
        try {
            const raw = localStorage.getItem(KEY);
            if (!raw) return false;
            const data = JSON.parse(raw);
            tileMap.deserialize(data.tileMap, d => new PlacedObject(d));
            if (data.camera) {
                camera.offsetX = data.camera.offsetX;
                camera.offsetY = data.camera.offsetY;
                camera.zoom    = data.camera.zoom;
            }
            return true;
        } catch (e) {
            console.error('Load failed:', e);
            return false;
        }
    },

    clear() {
        try { localStorage.removeItem(KEY); } catch {}
    },
};