summaryrefslogtreecommitdiff
path: root/test-client/main.ts
diff options
context:
space:
mode:
Diffstat (limited to 'test-client/main.ts')
-rw-r--r--test-client/main.ts51
1 files changed, 49 insertions, 2 deletions
diff --git a/test-client/main.ts b/test-client/main.ts
index d093c62e..b9fb1557 100644
--- a/test-client/main.ts
+++ b/test-client/main.ts
@@ -1,10 +1,11 @@
/// <reference lib="dom" />
import { PacketC, PacketS } from "./protocol.ts";
+import { normalize } from "./util.ts";
let ctx: CanvasRenderingContext2D;
let canvas: HTMLCanvasElement;
-let ws: WebSocket
+let ws: WebSocket;
document.addEventListener("DOMContentLoaded", () => {
ws = new WebSocket(`${window.location.protocol.endsWith("s:") ? "wss" : "ws"}://${window.location.hostname}:27032/`)
ws.onerror = console.error
@@ -23,6 +24,10 @@ document.addEventListener("DOMContentLoaded", () => {
resize()
globalThis.addEventListener("resize", resize)
draw()
+
+ document.addEventListener("keydown", ev => keyboard(ev, true))
+ document.addEventListener("keyup", ev => keyboard(ev, false))
+ setInterval(tick_update, 1000 / 25);
})
interface Player { x: number; y: number, name: string, rot: number }
@@ -31,10 +36,11 @@ interface Item { x: number; y: number }
const items = new Map<number, Item>()
interface Tile { x: number; y: number }
const tiles = new Map<string, Tile>()
-let my_id = undefined
+let my_id: number = -1
function send(p: PacketS) { ws.send(JSON.stringify(p)) }
function packet(p: PacketC) {
+ console.log(p);
if ("joined" in p) {
my_id = p.joined.id
} else if ("add_player" in p) {
@@ -55,13 +61,45 @@ function packet(p: PacketC) {
} else console.warn("unknown packet", p);
}
+const keys_down = new Set();
+const HANDLED_KEYS = ["KeyW", "KeyA", "KeyS", "KeyD", "Space"]
+function keyboard(ev: KeyboardEvent, down: boolean) {
+ if (HANDLED_KEYS.includes(ev.code)) ev.preventDefault()
+ if (ev.code == "Space") interact()
+ if (down) keys_down.add(ev.code)
+ else keys_down.delete(ev.code)
+}
+
+function interact() {
+
+}
+
+function tick_update() {
+ const p = players.get(my_id)
+ if (!p) return
+}
+function frame_update(dt: number) {
+ const p = players.get(my_id)
+ if (!p) return
+
+ const input = normalize({
+ x: (+keys_down.has("KeyD") - +keys_down.has("KeyA")),
+ y: (+keys_down.has("KeyS") - +keys_down.has("KeyW"))
+ })
+ p.x += input.x * dt * 10
+ p.y += input.y * dt * 10
+}
function resize() {
canvas.width = globalThis.innerWidth
canvas.height = globalThis.innerHeight
}
+let last_frame = Date.now()
function draw() {
+ const now = Date.now()
+ frame_update((now - last_frame) / 1000)
+ last_frame = now;
if (ws.readyState == ws.CONNECTING) draw_wait("Connecting...")
else if (ws.readyState == ws.CLOSING) draw_wait("Closing...")
else if (ws.readyState == ws.CLOSED) draw_wait("Disconnected")
@@ -79,6 +117,8 @@ function draw_wait(text: string) {
ctx.lineWidth = 10
ctx.textAlign = "center"
ctx.textBaseline = "middle"
+ ctx.lineJoin = "round"
+ ctx.lineCap = "round"
ctx.strokeText(text, canvas.width / 2, canvas.height / 2)
ctx.fillText(text, canvas.width / 2, canvas.height / 2)
}
@@ -87,6 +127,11 @@ function draw_ingame() {
ctx.fillStyle = "#111"
ctx.fillRect(0, 0, canvas.width, canvas.height)
+ const scale = Math.min(canvas.width, canvas.height) / 10;
+ ctx.save()
+ ctx.translate(canvas.width / 2, canvas.height / 2)
+ ctx.scale(scale, scale)
+
for (const [_, player] of players) {
ctx.save()
ctx.translate(player.x, player.y)
@@ -95,5 +140,7 @@ function draw_ingame() {
ctx.fillRect(-0.5, -0.5, 1, 1)
ctx.restore()
}
+
+ ctx.restore()
}