diff options
author | metamuffin <metamuffin@disroot.org> | 2024-06-25 23:34:10 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-06-25 23:34:10 +0200 |
commit | 4dc15a1e86ef1ae985fdf36f1a84d07b1de99ea7 (patch) | |
tree | 6a262cd2be9abee480adda3e367c7f8abf8845d6 /test-client/main.ts | |
parent | 84c90e84a1e0d6cd2eae36fd8888354b4e23c354 (diff) | |
download | hurrycurry-4dc15a1e86ef1ae985fdf36f1a84d07b1de99ea7.tar hurrycurry-4dc15a1e86ef1ae985fdf36f1a84d07b1de99ea7.tar.bz2 hurrycurry-4dc15a1e86ef1ae985fdf36f1a84d07b1de99ea7.tar.zst |
server can change map at runtime
Diffstat (limited to 'test-client/main.ts')
-rw-r--r-- | test-client/main.ts | 32 |
1 files changed, 30 insertions, 2 deletions
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<ItemData>() 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) |