@web-engine-dev/save
Save/load system with serialization, save slots, auto-save, and cloud integration.
Features
- Save Slots: Multiple save game slots
- Auto-Save: Automatic periodic saving
- Serialization: ECS world serialization
- Cloud Sync: Optional cloud save support
- Compression: Compressed save files
- Validation: Save file integrity checking
Installation
bash
npm install @web-engine-dev/save
# or
pnpm add @web-engine-dev/saveQuick Start
typescript
import { SaveManager, SaveSlot } from '@web-engine-dev/save';
// Create save manager
const saves = new SaveManager({
maxSlots: 10,
autoSave: true,
autoSaveInterval: 60000, // 1 minute
});
// Save game
await saves.save('slot1', {
player: serializePlayer(),
world: serializeWorld(),
progress: gameProgress,
});
// Load game
const data = await saves.load('slot1');
restorePlayer(data.player);
restoreWorld(data.world);
// List saves
const slots = await saves.list();API Overview
Save Manager
| Method | Description |
|---|---|
save(slot, data) | Save to slot |
load(slot) | Load from slot |
delete(slot) | Delete save slot |
list() | List all save slots |
exists(slot) | Check if slot exists |
getMetadata(slot) | Get save metadata |
Save Slot Metadata
typescript
const slots = await saves.list();
for (const slot of slots) {
console.log(slot.name);
console.log(slot.timestamp);
console.log(slot.playtime);
console.log(slot.thumbnail);
}Auto-Save
typescript
const saves = new SaveManager({
autoSave: true,
autoSaveInterval: 60000,
autoSaveSlot: 'autosave',
maxAutoSaves: 3, // Rotating autosaves
});
// Trigger manual autosave
saves.triggerAutoSave();
// Disable temporarily
saves.pauseAutoSave();
saves.resumeAutoSave();Cloud Sync
typescript
const saves = new SaveManager({
cloudProvider: new CloudSaveProvider({
apiUrl: 'https://api.game.com/saves',
}),
syncOnSave: true,
syncOnLoad: true,
});
// Manual sync
await saves.syncToCloud('slot1');
await saves.syncFromCloud('slot1');ECS Integration
typescript
import { WorldSerializer } from '@web-engine-dev/save';
const serializer = new WorldSerializer(world, {
include: [Player, Inventory, Progress],
exclude: [Particle, Temporary],
});
// Serialize
const data = serializer.serialize();
// Deserialize
serializer.deserialize(data);