import { writable, derived } from "svelte/store"; import type * as GAME from "vibegame"; type GameInstance = Awaited>; export interface GameState { instance: GameInstance | null; isRunning: boolean; isStarting: boolean; isAutoRunning: boolean; } function createGameStore() { const { subscribe, set, update } = writable({ 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);