From 64b939e6ac0b196d18ee183a37a40b0bf7927a80 Mon Sep 17 00:00:00 2001 From: Natsuu Date: Wed, 14 Jan 2026 03:41:18 +0000 Subject: refactor: split App.svelte into components --- ui/src/stores/game.svelte.ts | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 ui/src/stores/game.svelte.ts (limited to 'ui/src/stores/game.svelte.ts') diff --git a/ui/src/stores/game.svelte.ts b/ui/src/stores/game.svelte.ts new file mode 100644 index 0000000..feaf8d6 --- /dev/null +++ b/ui/src/stores/game.svelte.ts @@ -0,0 +1,48 @@ +import { invoke } from "@tauri-apps/api/core"; +import type { Version } from "../types"; +import { uiState } from "./ui.svelte"; +import { authState } from "./auth.svelte"; + +export class GameState { + versions = $state([]); + selectedVersion = $state(""); + + async loadVersions() { + try { + this.versions = await invoke("get_versions"); + if (this.versions.length > 0) { + const latest = this.versions.find((v) => v.type === "release"); + this.selectedVersion = latest ? latest.id : this.versions[0].id; + } + } catch (e) { + console.error("Failed to fetch versions:", e); + uiState.setStatus("Error fetching versions: " + e); + } + } + + async startGame() { + if (!authState.currentAccount) { + alert("Please login first!"); + authState.openLoginModal(); + return; + } + + if (!this.selectedVersion) { + alert("Please select a version!"); + return; + } + + uiState.setStatus("Preparing to launch " + this.selectedVersion + "..."); + console.log("Invoking start_game for version:", this.selectedVersion); + try { + const msg = await invoke("start_game", { versionId: this.selectedVersion }); + console.log("Response:", msg); + uiState.setStatus(msg as string); + } catch (e) { + console.error(e); + uiState.setStatus("Error: " + e); + } + } +} + +export const gameState = new GameState(); -- cgit v1.2.3-70-g09d2 From 4675607a34f57e3a1bd6f3cf065079aa5aca40f1 Mon Sep 17 00:00:00 2001 From: Natsuu Date: Wed, 14 Jan 2026 03:54:44 +0000 Subject: refactor: specify generic type for invoke calls in GameState class --- ui/src/stores/game.svelte.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'ui/src/stores/game.svelte.ts') diff --git a/ui/src/stores/game.svelte.ts b/ui/src/stores/game.svelte.ts index feaf8d6..0af3daf 100644 --- a/ui/src/stores/game.svelte.ts +++ b/ui/src/stores/game.svelte.ts @@ -9,7 +9,7 @@ export class GameState { async loadVersions() { try { - this.versions = await invoke("get_versions"); + this.versions = await invoke("get_versions"); if (this.versions.length > 0) { const latest = this.versions.find((v) => v.type === "release"); this.selectedVersion = latest ? latest.id : this.versions[0].id; @@ -35,9 +35,9 @@ export class GameState { uiState.setStatus("Preparing to launch " + this.selectedVersion + "..."); console.log("Invoking start_game for version:", this.selectedVersion); try { - const msg = await invoke("start_game", { versionId: this.selectedVersion }); + const msg = await invoke("start_game", { versionId: this.selectedVersion }); console.log("Response:", msg); - uiState.setStatus(msg as string); + uiState.setStatus(msg); } catch (e) { console.error(e); uiState.setStatus("Error: " + e); -- cgit v1.2.3-70-g09d2