diff options
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) | 
