Skip to main content
Version: Next

Save & load menu

This example shows a tiny save/load UI:

  • save current game state into localStorage
  • list saves
  • load a save by id

It uses Button for UI and game.saves for persistence.

Define a save payload

type GameState = {
schemaVersion: 1;
level: number;
hp: number;
};

Save button

import { Button, Vector } from "sliver-engine";

const saveButton = new Button(
"save",
new Vector(40, 40),
new Vector(160, 50),
"Save",
"#2da44e",
"white",
() => {
const state: GameState = { schemaVersion: 1, level: 2, hp: 10 };
const id = game.saves.create(state, { label: `L${state.level}` });
console.log("Saved:", id);
}
);

Load menu (list + load)

This is intentionally simple: it logs entries and loads the most recent one.

const entries = game.saves.list();
console.log("Saves:", entries);

const mostRecent = entries[0];
if (mostRecent) {
const save = game.saves.read<GameState>(mostRecent.id);
if (save) {
console.log("Loaded data:", save.data);
// Apply it to your game (player stats, current level, etc.)
}
}

Tip: for a real menu, render one Button per save entry and call read(entry.id) in its click handler.