aboutsummaryrefslogtreecommitdiff
path: root/test-client
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-06-29 19:04:57 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-29 19:04:57 +0200
commitfd2c907274095031917e6279db436186d95d74fc (patch)
tree62e064f445e791c78ada2b68f7e84220f33e76fb /test-client
parent5f361ffedfd132c5a900ca8dcb1b25fcb21a2e33 (diff)
downloadhurrycurry-fd2c907274095031917e6279db436186d95d74fc.tar
hurrycurry-fd2c907274095031917e6279db436186d95d74fc.tar.bz2
hurrycurry-fd2c907274095031917e6279db436186d95d74fc.tar.zst
optionally persist messages
Diffstat (limited to 'test-client')
-rw-r--r--test-client/main.ts15
-rw-r--r--test-client/protocol.ts4
2 files changed, 12 insertions, 7 deletions
diff --git a/test-client/main.ts b/test-client/main.ts
index 72e88c90..7f33bc98 100644
--- a/test-client/main.ts
+++ b/test-client/main.ts
@@ -78,6 +78,7 @@ export interface PlayerData extends MovementBase {
character: number,
anim_position: V2,
message?: MessageData,
+ message_clear?: number,
}
export interface TileData {
@@ -191,8 +192,10 @@ function packet(p: PacketC) {
break;
case "communicate": {
const player = players.get(p.player)!
+ if (player.message_clear) clearTimeout(player.message_clear)
if (p.message) player.message = { inner: p.message, anim_size: 0., anim_position: player.anim_position }
else player.message = undefined
+ if (!p.persist) player.message_clear = setTimeout(() => delete player.message, 3000)
break;
}
case "score":
@@ -203,6 +206,9 @@ function packet(p: PacketC) {
case "error":
console.warn(p.message)
break;
+ case "set_ingame":
+ console.log(`ingame ${p.state}`);
+ break;
default:
console.warn("unknown packet", p);
}
@@ -218,9 +224,9 @@ function keyboard(ev: KeyboardEvent, down: boolean) {
if (HANDLED_KEYS.includes(ev.code)) ev.preventDefault()
if (!keys_down.has(KEY_INTERACT) && ev.code == KEY_INTERACT && down) set_interact(true)
if (keys_down.has(KEY_INTERACT) && ev.code == KEY_INTERACT && !down) set_interact(false)
- if (down && ev.code == "Numpad1") send({ type: "communicate", message: { text: "/start default-small-default" } })
- if (down && ev.code == "Numpad2") send({ type: "communicate", message: { text: "/start default-big-default" } })
- if (down && ev.code == "Numpad0") send({ type: "communicate", message: { text: "/end" } })
+ if (down && ev.code == "Numpad1") send({ type: "communicate", message: { text: "/start default-small-default" }, persist: false })
+ if (down && ev.code == "Numpad2") send({ type: "communicate", message: { text: "/start default-big-default" }, persist: false })
+ if (down && ev.code == "Numpad0") send({ type: "communicate", message: { text: "/end" }, persist: false })
if (down) keys_down.add(ev.code)
else keys_down.delete(ev.code)
}
@@ -233,8 +239,7 @@ function close_chat() {
}
function toggle_chat() {
if (chat) {
- if (chat.value.length) send({ type: "communicate", message: { text: chat.value } })
- else send({ type: "communicate" })
+ if (chat.value.length) send({ type: "communicate", message: { text: chat.value }, persist: false })
chat.remove()
canvas.focus()
chat = null;
diff --git a/test-client/protocol.ts b/test-client/protocol.ts
index 94858387..1334ddf8 100644
--- a/test-client/protocol.ts
+++ b/test-client/protocol.ts
@@ -32,7 +32,7 @@ export type PacketS =
{ type: "join", name: string, character: number } // You join, sent as first packet.
| { type: "position", pos: Vec2, rot: number } // Update your position and rotation in radians (0 is -y)
| { type: "interact", pos: Vec2, edge: boolean } // Interact with some tile. edge is true when pressing and false when releasing interact button
- | { type: "communicate", message?: Message } // Send a message
+ | { type: "communicate", message?: Message, persist: boolean } // Send a message
| { type: "collide", player: PlayerID, force: Vec2 } // Apply force to another player as a result of a collision
export type PacketC =
@@ -47,7 +47,7 @@ export type PacketC =
| { type: "set_player_item", player: PlayerID, item?: ItemIndex } // A player changed their item
| { type: "set_active", tile: Vec2, progress?: number, warn: boolean } // A tile is doing something. progress goes from 0 to 1, then null when finished
| { type: "update_map", tile: Vec2, kind: TileIndex | null, neighbors: [TileIndex | null] } // A map tile was changed
- | { type: "communicate", player: PlayerID, message?: Message } // A player wants to communicate something, message is null when cleared
+ | { type: "communicate", player: PlayerID, message?: Message, persist: boolean } // A player wants to communicate something, message is null when cleared
| { type: "score", points: number, demands_failed: number, demands_completed: number, } // Supplies information for score OSD
| { type: "set_ingame", state: boolean } // Set to false when entering the game or switching maps
| { type: "error", message?: Message } // Your client did something wrong.