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) | 
