diff options
Diffstat (limited to 'test-client/main.ts')
-rw-r--r-- | test-client/main.ts | 27 |
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) } |