diff options
author | metamuffin <metamuffin@disroot.org> | 2024-07-02 00:52:42 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-07-02 00:52:42 +0200 |
commit | 8ee3eca5d6de0b950881783821d1be86cd0586d5 (patch) | |
tree | 15bfb6fafe9642260fbfcf874f17a2f89afe6b72 /test-client/main.ts | |
parent | a57c833665172c83eb449f739073ac36238377c9 (diff) | |
download | hurrycurry-8ee3eca5d6de0b950881783821d1be86cd0586d5.tar hurrycurry-8ee3eca5d6de0b950881783821d1be86cd0586d5.tar.bz2 hurrycurry-8ee3eca5d6de0b950881783821d1be86cd0586d5.tar.zst |
generalize protocol
Diffstat (limited to 'test-client/main.ts')
-rw-r--r-- | test-client/main.ts | 73 |
1 files changed, 37 insertions, 36 deletions
diff --git a/test-client/main.ts b/test-client/main.ts index aeca8084..580ff755 100644 --- a/test-client/main.ts +++ b/test-client/main.ts @@ -18,8 +18,8 @@ /// <reference lib="dom" /> import { MovementBase, update_movement } from "./movement.ts"; -import { Gamedata, ItemIndex, Message, PacketC, PacketS, PlayerID, TileIndex } from "./protocol.ts"; -import { V2, add_v2, lerp_exp_v2_mut, normalize, lerp_exp } from "./util.ts"; +import { Gamedata, ItemIndex, ItemLocation, Message, PacketC, PacketS, PlayerID, TileIndex } from "./protocol.ts"; +import { V2, lerp_exp_v2_mut, normalize, lerp_exp } from "./util.ts"; import { draw_ingame, draw_wait } from "./visual.ts"; const KEY_INTERACT = "KeyJ" @@ -82,8 +82,8 @@ export interface PlayerData extends MovementBase { } export interface TileData { - x: number - y: number + x: number, y: number // tile position + position: V2, // center position kind: TileIndex item?: ItemData } @@ -113,6 +113,12 @@ export let interact_possible_anim: number = 0 export let interact_active_anim: number = 0 let interacting: V2 | undefined; +function get_item_location(loc: ItemLocation): PlayerData | TileData { + if ("tile" in loc) return tiles.get(loc.tile.toString())! + if ("player" in loc) return players.get(loc.player)! + throw new Error("invalid item location"); +} + function send(p: PacketS) { ws.send(JSON.stringify(p)) } function packet(p: PacketC) { if (!["position", "set_active", "update_map"].includes(p.type)) @@ -153,45 +159,40 @@ function packet(p: PacketC) { pl.rot = p.rot break; } - case "take_item": { - const player = players.get(p.player)! - const tile = tiles.get(p.tile.toString())! - player.item = tile.item; - player.item!.tracking = player.position - tile.item = undefined - break; - } - case "put_item": { - 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; - } - case "set_tile_item": { - const tile = tiles.get(p.tile.toString())! - if (tile.item !== undefined && tile.item !== null) items_removed.add(tile.item) - tile.item = undefined - if (p.item !== undefined && p.item !== null) tile.item = { kind: p.item, x: p.tile[0] + 0.5, y: p.tile[1] + 0.5 } + case "move_item": { + const from = get_item_location(p.from) + const to = get_item_location(p.to) + + to.item = from.item + to.item!.tracking = to.position + from.item = undefined + break; } - case "set_player_item": { - const player = players.get(p.player)! - if (player.item !== undefined && player.item !== null) items_removed.add(player.item) - player.item = undefined - if (p.item !== undefined && p.item !== null) player.item = { kind: p.item, x: player.position.x + 0.5, y: player.position.y + 0.5 } + case "set_item": { + const slot = get_item_location(p.location) + if (slot.item !== undefined && slot.item !== null) items_removed.add(slot.item) + slot.item = undefined + if (p.item !== undefined && p.item !== null) slot.item = { kind: p.item, x: slot.position.x, y: slot.position.y } break; } - case "set_active": { - const item = tiles.get(p.tile.toString())!.item!; - item.progress = p.progress - item.progress_warn = p.warn + case "set_progress": { + const slot = get_item_location(p.item) + if (!slot.item) return + slot.item.progress = p.progress + slot.item.progress_warn = p.warn break; } case "update_map": - if (p.kind !== undefined && p.kind !== null) tiles.set(p.tile.toString(), { x: p.tile[0], y: p.tile[1], kind: p.kind }) - else tiles.delete(p.tile.toString()) + if (p.kind !== undefined && p.kind !== null) + tiles.set(p.tile.toString(), { + x: p.tile[0], + y: p.tile[1], + position: { x: p.tile[0] + 0.5, y: p.tile[1] + 0.5 }, + kind: p.kind + }) + else + tiles.delete(p.tile.toString()) break; case "communicate": { const player = players.get(p.player)! |