summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-06-19 10:19:53 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-23 19:21:22 +0200
commitf0a144001373c2a4a67ef75a49de51b0cad5bb96 (patch)
tree6b91b6dede5b63ad488c506df20bc0f665e7aa8d
parent9b82a6725ad52424bed4b9f61601f8c2e2a75ae2 (diff)
downloadhurrycurry-f0a144001373c2a4a67ef75a49de51b0cad5bb96.tar
hurrycurry-f0a144001373c2a4a67ef75a49de51b0cad5bb96.tar.bz2
hurrycurry-f0a144001373c2a4a67ef75a49de51b0cad5bb96.tar.zst
animate item removal
-rw-r--r--test-client/main.ts30
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)