aboutsummaryrefslogtreecommitdiff
path: root/src/spectate/main.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/spectate/main.ts')
-rw-r--r--src/spectate/main.ts21
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())
+ }
+}