// Save/Load System const SaveLoad = { STORAGE_KEY: 'minifactory_saves', // Get all saves getSaves() { try { return JSON.parse(localStorage.getItem(this.STORAGE_KEY) || '{}'); } catch { return {}; } }, // Set all saves setSaves(saves) { localStorage.setItem(this.STORAGE_KEY, JSON.stringify(saves)); }, // Save game to slot saveGame(slotId) { const saves = this.getSaves(); saves[slotId] = { date: new Date().toISOString(), resources: Resources.getAll(), terrain: Terrain.getData(), buildings: Buildings.getData(), towers: Towers.getData(), enemies: Enemies.getData(), camera: { ...Renderer.camera }, simulation: Simulation.getData() }; this.setSaves(saves); }, // Load game from slot loadGame(slotId) { const saves = this.getSaves(); const save = saves[slotId]; if (!save) return false; Resources.setAll(save.resources); Terrain.setData(save.terrain); Buildings.setData(save.buildings); if (save.towers) Towers.setData(save.towers); if (save.enemies) Enemies.setData(save.enemies); Renderer.camera = { ...save.camera }; if (save.simulation) { Simulation.setData(save.simulation); } return true; }, // Delete a save deleteSave(slotId) { const saves = this.getSaves(); delete saves[slotId]; this.setSaves(saves); }, // Save to new slot saveToNewSlot() { const slotId = 'save_' + Date.now(); this.saveGame(slotId); }, // Update save slots UI updateSaveSlots() { const container = document.getElementById('save-slots'); const saves = this.getSaves(); const slots = Object.entries(saves); if (slots.length === 0) { container.innerHTML = '
No saved games
'; return; } container.innerHTML = slots.map(([id, save]) => `
Save ${new Date(save.date).toLocaleDateString()}
${new Date(save.date).toLocaleTimeString()}
`).join(''); }, // Update load slots UI updateLoadSlots() { const container = document.getElementById('load-slots'); const saves = this.getSaves(); const slots = Object.entries(saves); if (slots.length === 0) { container.innerHTML = '
No saved games
'; return; } container.innerHTML = slots.map(([id, save]) => `
Save ${new Date(save.date).toLocaleDateString()}
${new Date(save.date).toLocaleTimeString()}
`).join(''); } };