diff options
Diffstat (limited to 'src/spectate/main.ts')
-rw-r--r-- | src/spectate/main.ts | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/spectate/main.ts b/src/spectate/main.ts index 508ca30..3fcf414 100644 --- a/src/spectate/main.ts +++ b/src/spectate/main.ts @@ -7,6 +7,8 @@ type Packet = "tick" | { game: { width: number, height: number } } | { player: { id: number, name: string } } | { die: number[] } + | { win: [number, number] } + | { chat: string } class Snake { parts: { x: number, y: number, dx: number, dy: number }[] = [] @@ -132,15 +134,34 @@ ws.onmessage = message => { } else if ("game" in p) { snakes.clear() size = p.game.width + } else if ("win" in p) { + const winner = snakes.get(p.win[0])?.name; + if (winner) chat(`${winner} won this round.`, "win") + else chat(`round ended in a tie.`, "tie") } else if ("player" in p) { snakes.set(p.player.id, new Snake(p.player.name)) } else if ("pos" in p) { snakes.get(p.pos.id)?.add_part(p.pos.x, p.pos.y) } else if ("die" in p) { + chat(`${p.die.map(e => snakes.get(e)?.name).join(", ")} died.`, "die") for (const d of p.die) { const s = snakes.get(d) if (s) s.dead = true } + } else if ("chat" in p) { + chat(p.chat) } } +const chat_history: HTMLElement[] = []; +function chat(message: string, clas = "chat") { + const e = document.createElement("p") + e.textContent = message; + e.classList.add("message") + e.classList.add(clas) + document.getElementById("chat_messages")!.prepend(e) + chat_history.push(e); + while (chat_history.length > 64) { + chat_history.splice(0, 1).forEach(e => e.remove()) + } +} |