summaryrefslogtreecommitdiff
path: root/test-client/main.ts
diff options
context:
space:
mode:
Diffstat (limited to 'test-client/main.ts')
-rw-r--r--test-client/main.ts27
1 files changed, 19 insertions, 8 deletions
diff --git a/test-client/main.ts b/test-client/main.ts
index a3bf0105..5d3a6d11 100644
--- a/test-client/main.ts
+++ b/test-client/main.ts
@@ -88,6 +88,7 @@ export interface PlayerData extends MovementBase {
character: number,
anim_position: V2,
message_persist?: MessageData,
+ message_pinned?: MessageData,
message?: MessageData,
}
@@ -97,8 +98,9 @@ export interface TileData {
kind: TileIndex
item?: ItemData
}
+export type MessageStyle = "hint" | "normal" | "error" | "pinned"
export interface MessageData {
- style: "hint" | "normal" | "error"
+ style: MessageStyle
inner: Message
anim_position: V2,
anim_size: number,
@@ -120,7 +122,7 @@ export let camera_scale = 0.05;
export const interact_target_anim: V2 = { x: 0, y: 0 }
export let interact_possible_anim: number = 0
export let interact_active_anim: number = 0
-export let nametag_scale_anim: number = 0
+export let overlay_vis_anim: number = 0
export let is_lobby = false
let interacting: V2 | undefined;
let last_server_sent_position: V2 = { x: 0, y: 0 }
@@ -226,11 +228,18 @@ function packet(p: PacketC) {
inner: p.message,
anim_size: 0.,
anim_position: player.anim_position,
- timeout: p.timeout ?? { initial: 5, remaining: 5 },
+ timeout: p.timeout ?? { initial: 5, remaining: 5, pinned: false },
style: "normal" as const
};
if (p.timeout === undefined) player.message = message
else player.message_persist = message
+ if (p.timeout?.pinned) player.message_pinned = {
+ inner: p.message,
+ anim_size: 0,
+ anim_position: { x: 20, y: 0 },
+ style: "pinned",
+ timeout: p.timeout
+ }
} else if (p.timeout !== undefined) {
delete player.message_persist
}
@@ -248,7 +257,7 @@ function packet(p: PacketC) {
style: p.error ? "error" : "normal",
anim_size: 0.,
anim_position: { x: 0, y: 0 },
- timeout: { initial: 5, remaining: 5 }
+ timeout: { initial: 5, remaining: 5, pinned: false }
}
break;
case "set_ingame":
@@ -286,7 +295,7 @@ function packet(p: PacketC) {
case "book": open("https://s.metamuffin.org/static/hurrycurry/book.pdf"); break
case "score":
global_message = {
- timeout: { initial: 5, remaining: 5 },
+ timeout: { initial: 5, remaining: 5, pinned: false },
inner: { text: `Score: ${JSON.stringify(p.data, null, 4)}` },
anim_position: { x: 0, y: 0 },
anim_size: 0,
@@ -391,16 +400,18 @@ function frame_update(dt: number) {
if (item.active) item.active.position += item.active.speed * dt
}
+ let pin_xo = 0
for (const [pid, player] of players) {
if (pid == my_id) player.anim_position.x = player.position.x, player.anim_position.y = player.position.y
else lerp_exp_v2_mut(player.anim_position, player.position, dt * 15)
if (player.item !== undefined && player.item !== null) update_item(player.item)
if (player.message && tick_message(player.message, dt)) delete player.message
if (player.message_persist && tick_message(player.message_persist, dt)) delete player.message_persist
+ if (player.message_pinned && tick_message(player.message_pinned, dt)) delete player.message_pinned
+ if (player.message_pinned) lerp_exp_v2_mut(player.message_pinned.anim_position, { x: pin_xo++, y: 0 }, dt * 5)
}
- for (const [_, tile] of tiles) {
+ for (const [_, tile] of tiles)
if (tile.item !== undefined && tile.item !== null) update_item(tile.item)
- }
const remove: ItemData[] = []
for (const item of items_removed) {
@@ -426,7 +437,7 @@ function frame_update(dt: number) {
const zoom_target = Math.min(canvas.width, canvas.height) * (keys_down.has("KeyL") ? 0.05 : 0.1)
camera_scale = lerp_exp(camera_scale, zoom_target, dt * 5)
- nametag_scale_anim = lerp_exp(nametag_scale_anim, +keys_down.has("KeyL"), dt * 10)
+ overlay_vis_anim = lerp_exp(overlay_vis_anim, +keys_down.has("KeyL"), dt * 10)
tick_particles(dt)
}