diff options
Diffstat (limited to 'test-client/main.ts')
-rw-r--r-- | test-client/main.ts | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/test-client/main.ts b/test-client/main.ts index e19f8192..2a95d3c2 100644 --- a/test-client/main.ts +++ b/test-client/main.ts @@ -42,7 +42,9 @@ interface ItemData { kind: ItemIndex, x: number, y: number, + tracking?: V2, progress?: number + remove_anim?: number } interface PlayerData { x: number, @@ -62,6 +64,7 @@ interface TileData { } const players = new Map<PlayerID, PlayerData>() const tiles = new Map<string, TileData>() +const items_removed = new Set<ItemData>() let data: Gamedata = { item_names: [], tile_names: [], spawn: [0, 0] } @@ -110,6 +113,7 @@ function packet(p: PacketC) { const player = players.get(p.player)! const tile = tiles.get(p.tile.toString())! player.item = tile.item; + player.item!.tracking = player tile.item = undefined break; } @@ -117,6 +121,7 @@ function packet(p: PacketC) { const player = players.get(p.player)! const tile = tiles.get(p.tile.toString())! tile.item = player.item + tile.item!.tracking = add_v2(tile, 0.5) player.item = undefined break; } @@ -126,7 +131,9 @@ function packet(p: PacketC) { break; } case "consume_item": { - tiles.get(p.tile.toString())!.item = undefined + const tile = tiles.get(p.tile.toString())! + if (tile.item) items_removed.add(tile.item) + tile.item = undefined break; } case "set_active": { @@ -195,16 +202,25 @@ function frame_update(dt: number) { collide_player(p) lerp_exp_v2_mut(p.vel, { x: 0, y: 0 }, dt * 5.) - const update_item = (item: ItemData, parent: V2) => { - lerp_exp_v2_mut(item, parent, dt * 10.) + const update_item = (item: ItemData) => { + if (item.tracking) lerp_exp_v2_mut(item, item.tracking, dt * 10.) } for (const [_, player] of players) { - if (player.item) update_item(player.item, player) + if (player.item) update_item(player.item) } for (const [_, tile] of tiles) { - if (tile.item) update_item(tile.item, add_v2(tile, 0.5)) + if (tile.item) update_item(tile.item) } + const remove = [] + for (const item of items_removed) { + update_item(item) + if (item.remove_anim === undefined) item.remove_anim = 0 + item.remove_anim += dt * 4. + if (item.remove_anim > 1.) remove.push(item) + } + remove.forEach(i => items_removed.delete(i)) + lerp_exp_v2_mut(interact_target_anim, get_interact_target() ?? { x: 0, y: 0 }, dt * 15.) lerp_exp_v2_mut(camera, p, dt * 10.) @@ -300,6 +316,9 @@ function draw_ingame() { if (player.item) draw_item(player.item) } + for (const item of items_removed) { + draw_item(item) + } for (const [_, tile] of tiles) { if (tile.item) draw_item(tile.item) } @@ -312,6 +331,7 @@ function draw_ingame() { function draw_item(item: ItemData) { ctx.save() ctx.translate(item.x, item.y) + if (item.remove_anim) ctx.scale(1 - item.remove_anim, 1 - item.remove_anim) const comps = ITEMS[data.item_names[item.kind]] ?? FALLBACK_ITEM for (const c of comps) { c(ctx) |