summaryrefslogtreecommitdiff
path: root/server/web/game
diff options
context:
space:
mode:
authorEwy <ewy@ewy.one>2026-09-18 15:06:59 +0200
committerEwy <ewy@ewy.one>2026-09-18 15:06:59 +0200
commit1f8364b145dbd0ff9ff7583f50aeb7498967b0f9 (patch)
treecf09f5b2151f1d37327831c00148f8431b527e70 /server/web/game
parentb82e6069c9dc93eff6e539a8cccd73e69ecde38e (diff)
add more stuff
Diffstat (limited to 'server/web/game')
-rw-r--r--server/web/game/game.js39
-rw-r--r--server/web/game/index.html40
-rw-r--r--server/web/game/style.css3
3 files changed, 82 insertions, 0 deletions
diff --git a/server/web/game/game.js b/server/web/game/game.js
new file mode 100644
index 0000000..5e71786
--- /dev/null
+++ b/server/web/game/game.js
@@ -0,0 +1,39 @@
+"use strict"
+const showGame = (g) => {
+ const tmpl = document.querySelector("template#tmpl")
+ const disp = document.querySelector("#game")
+ const clone = document.importNode(tmpl.content, true)
+ doDistance(clone, g.Distance.Value)
+ disp.replaceChildren(clone)
+};
+
+const doDistance = (clone, value) => {
+ clone.querySelector(".distance").setAttribute("data-value", value);
+ [...clone.querySelectorAll(".distance .sakura")].map((n, i) => {
+ if (i < value) {
+ n.checked = true
+ } else {
+ n.checked = false
+ }
+ })
+
+}
+
+const connect = (gameId) => {
+ const connection = new WebSocket(`/api/game/${gameId}/connect`);
+ window.socket = connection;
+ connection.addEventListener("message", (ev) => {
+ const game = JSON.parse(ev.data);
+ console.debug(game);
+ showGame(game);
+ document.querySelector("#game-json").innerText =
+ JSON.stringify(ev.data, null, 2);
+ });
+}
+
+const init = () => {
+ const id = window.location.hash.slice(1)
+ connect(id)
+}
+
+init()
diff --git a/server/web/game/index.html b/server/web/game/index.html
new file mode 100644
index 0000000..414ff5c
--- /dev/null
+++ b/server/web/game/index.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta
+ name="viewport"
+ content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
+ />
+ <meta http-equiv="X-UA-Compatible" content="ie=edge" />
+ <title>sakura | game</title>
+ <link rel="stylesheet" type="text/css" href="/style.css" />
+ <link rel="stylesheet" type="text/css" href="/game/style.css" />
+ </head>
+ <body>
+ <header>
+ <details>
+ <summary>Game state</summary>
+ <pre id="game-json"></pre>
+ </details>
+ </header>
+ <main id="game"></main>
+
+ <template id="tmpl">
+ <div class="distance">
+ <input type="checkbox" class="sakura" />
+ <input type="checkbox" class="sakura" />
+ <input type="checkbox" class="sakura" />
+ <input type="checkbox" class="sakura" />
+ <input type="checkbox" class="sakura" />
+ <input type="checkbox" class="sakura" />
+ <input type="checkbox" class="sakura" />
+ <input type="checkbox" class="sakura" />
+ <input type="checkbox" class="sakura" />
+ <input type="checkbox" class="sakura" />
+ </div>
+ </template>
+
+ <script src="/game/game.js"></script>
+ </body>
+</html>
diff --git a/server/web/game/style.css b/server/web/game/style.css
new file mode 100644
index 0000000..dd0e421
--- /dev/null
+++ b/server/web/game/style.css
@@ -0,0 +1,3 @@
+.hidden {
+ display: none;
+}