summaryrefslogtreecommitdiff
path: root/test-client/main.ts
diff options
context:
space:
mode:
Diffstat (limited to 'test-client/main.ts')
-rw-r--r--test-client/main.ts73
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)!