From 4dc15a1e86ef1ae985fdf36f1a84d07b1de99ea7 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 25 Jun 2024 23:34:10 +0200 Subject: server can change map at runtime --- test-client/main.ts | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'test-client/main.ts') diff --git a/test-client/main.ts b/test-client/main.ts index 69a4ff69..0f841b06 100644 --- a/test-client/main.ts +++ b/test-client/main.ts @@ -92,7 +92,6 @@ export const items_removed = new Set() export let data: Gamedata = { item_names: [], tile_names: [], spawn: [0, 0], tile_collide: [], tile_interact: [] } - export let my_id: PlayerID = -1 export const camera: V2 = { x: 0, y: 0 } export const interact_target_anim: V2 = { x: 0, y: 0 } @@ -107,6 +106,8 @@ function packet(p: PacketC) { switch (p.type) { case "init": my_id = p.id + break; + case "data": data = p.data break; case "add_player": { @@ -172,7 +173,8 @@ function packet(p: PacketC) { break; } case "update_map": - tiles.set(p.pos.toString(), { x: p.pos[0], y: p.pos[1], kind: p.tile }) + if (p.kind !== undefined && p.kind !== null) tiles.set(p.tile.toString(), { x: p.tile[0], y: p.tile[1], kind: p.kind }) + else tiles.delete(p.tile.toString()) break; case "communicate": { const player = players.get(p.player)! @@ -188,9 +190,14 @@ function packet(p: PacketC) { } } +export let chat: null | HTMLInputElement = null; + export const keys_down = new Set(); const HANDLED_KEYS = ["KeyW", "KeyA", "KeyS", "KeyD", "Space"] function keyboard(ev: KeyboardEvent, down: boolean) { + if (down && ev.code == "Enter") return toggle_chat() + else if (down && ev.code == "Escape" && chat) return close_chat() + else if (chat) return if (HANDLED_KEYS.includes(ev.code)) ev.preventDefault() if (!keys_down.has("Space") && ev.code == "Space" && down) set_interact(true) if (keys_down.has("Space") && ev.code == "Space" && !down) set_interact(false) @@ -198,6 +205,27 @@ function keyboard(ev: KeyboardEvent, down: boolean) { else keys_down.delete(ev.code) } +function close_chat() { + if (!chat) return + chat.remove() + canvas.focus() + chat = null; +} +function toggle_chat() { + if (chat) { + if (chat.value.length) send({ type: "communicate", message: { text: chat.value } }) + chat.remove() + canvas.focus() + chat = null; + } else { + chat = document.createElement("input") + chat.type = "text" + chat.placeholder = "Message" + document.body.append(chat) + chat.focus() + } +} + export function get_interact_target(): V2 | undefined { if (interacting) return interacting const me = players.get(my_id) -- cgit v1.2.3-70-g09d2