Spaces:
Running
Running
File size: 1,179 Bytes
794cf6c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
import { writable, derived } from "svelte/store";
import type * as GAME from "vibegame";
type GameInstance = Awaited<ReturnType<typeof GAME.run>>;
export interface GameState {
instance: GameInstance | null;
isRunning: boolean;
isStarting: boolean;
isAutoRunning: boolean;
}
function createGameStore() {
const { subscribe, set, update } = writable<GameState>({
instance: null,
isRunning: false,
isStarting: false,
isAutoRunning: true,
});
return {
subscribe,
setInstance: (instance: GameInstance | null) =>
update((state) => ({
...state,
instance,
isRunning: instance !== null,
})),
setStarting: (isStarting: boolean) =>
update((state) => ({
...state,
isStarting,
})),
setAutoRunning: (isAutoRunning: boolean) =>
update((state) => ({
...state,
isAutoRunning,
})),
reset: () =>
set({
instance: null,
isRunning: false,
isStarting: false,
isAutoRunning: true,
}),
};
}
export const gameStore = createGameStore();
export const isGameRunning = derived(gameStore, ($game) => $game.isRunning);
|