aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui/src/stores/game.svelte.ts
diff options
context:
space:
mode:
authorNatsuu <natsukawa247@outlook.com>2026-01-14 03:41:18 +0000
committerNatsuu <natsukawa247@outlook.com>2026-01-14 03:41:18 +0000
commit64b939e6ac0b196d18ee183a37a40b0bf7927a80 (patch)
tree54b366819e9f3fd8694092c0053dd5e706da59f9 /ui/src/stores/game.svelte.ts
parent8aeadd2c2203540b93eabc6ba53b7b4ceaff7eb7 (diff)
downloadDropOut-64b939e6ac0b196d18ee183a37a40b0bf7927a80.tar.gz
DropOut-64b939e6ac0b196d18ee183a37a40b0bf7927a80.zip
refactor: split App.svelte into components
Diffstat (limited to 'ui/src/stores/game.svelte.ts')
-rw-r--r--ui/src/stores/game.svelte.ts48
1 files changed, 48 insertions, 0 deletions
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<Version[]>([]);
+ 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();