aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2026-01-28 11:58:07 +0100
committertpart <tpart120@proton.me>2026-02-26 20:49:13 +0100
commit4d380b8faad6f9a9253e7adbc22ea4dfa4cabc5f (patch)
tree82891b00de87e50acb5100b83f0d72cb4ab2faa7
parentc547ebad211177a0b05c7842584d4b3e412ad9b0 (diff)
downloadhurrycurry-4d380b8faad6f9a9253e7adbc22ea4dfa4cabc5f.tar
hurrycurry-4d380b8faad6f9a9253e7adbc22ea4dfa4cabc5f.tar.bz2
hurrycurry-4d380b8faad6f9a9253e7adbc22ea4dfa4cabc5f.tar.zst
crude port of test-client
-rw-r--r--test-client/main.ts34
-rw-r--r--test-client/movement.ts7
-rw-r--r--test-client/visual.ts3
3 files changed, 26 insertions, 18 deletions
diff --git a/test-client/main.ts b/test-client/main.ts
index 34291984..317eee27 100644
--- a/test-client/main.ts
+++ b/test-client/main.ts
@@ -105,7 +105,7 @@ export interface PlayerData extends MovementBase {
export interface TileData extends ItemSlot {
x: number, y: number // tile position
position: V2, // center position
- kind: TileIndex
+ parts: TileIndex[]
}
export type MessageStyle = "hint" | "normal" | "error" | "pinned"
export interface MessageData {
@@ -126,12 +126,13 @@ export let data: Gamedata = {
item_names: [],
tile_names: [],
tile_interactable_empty: [],
+ tile_placeable_any: [],
tile_placeable_items: {},
maps: [],
hand_count: 0,
bot_algos: [],
current_map: "",
- tile_walkable: []
+ tile_collide: [],
}
export let global_message: MessageData | undefined = undefined
@@ -242,15 +243,16 @@ function packet(p: PacketC) {
break;
}
case "update_map":
- 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
+ for (const [pos, parts] of p.changes) {
+ tiles.set(pos.toString(), {
+ x: pos[0],
+ y: pos[1],
+ position: { x: pos[0] + 0.5, y: pos[1] + 0.5 },
+ parts
})
- else
- tiles.delete(p.tile.toString())
+ if (!parts.length)
+ tiles.delete(pos.toString())
+ }
break;
case "communicate": {
const player = players.get(p.player)!
@@ -323,8 +325,6 @@ function packet(p: PacketC) {
break
case "effect2":
break;
- case "flush_map":
- break;
case "pause":
break; // TODO
case "menu":
@@ -407,10 +407,12 @@ function toggle_chat() {
}
export function can_interact_with_tile(t: TileData, hand: ItemSlot) {
- return t.item
- || (!hand.item && data.tile_interactable_empty.includes(t.kind))
- || (hand.item && !data.tile_placeable_items[t.kind])
- || (hand.item && data.tile_placeable_items[t.kind]?.includes(hand.item?.kind))
+ // TODO
+ return true
+ // return t.item
+ // || (!hand.item && data.tile_interactable_empty.includes(t.kind))
+ // || (hand.item && !data.tile_placeable_items[t.kind])
+ // || (hand.item && data.tile_placeable_items[t.kind]?.includes(hand.item?.kind))
}
export function get_interact_target(): V2 | undefined {
diff --git a/test-client/movement.ts b/test-client/movement.ts
index 6250b70c..394f741e 100644
--- a/test-client/movement.ts
+++ b/test-client/movement.ts
@@ -63,7 +63,12 @@ function collide_player(p: MovementBase, _dt: number) {
const y = Math.floor(p.position.y) + yo
const tile = tiles.get([x, y].toString())
- if (tile && data.tile_walkable.includes(tile.kind)) continue
+ if (!tile) continue
+ let has_coll = false
+ for (const p of tile.parts) {
+ has_coll ||= data.tile_collide.includes(p) //? eff
+ }
+ if (!has_coll) continue
const d = aabb_point_distance(x, y, x + 1, y + 1, p.position.x, p.position.y)
if (d > PLAYER_SIZE) continue
diff --git a/test-client/visual.ts b/test-client/visual.ts
index fa183004..38fc94f9 100644
--- a/test-client/visual.ts
+++ b/test-client/visual.ts
@@ -154,7 +154,8 @@ function draw_info_overlay() {
function draw_tile(tile: TileData) {
ctx.save()
ctx.translate(tile.x + 0.5, tile.y + 0.5)
- draw_tile_sprite(ctx, data.tile_names[tile.kind] as TileName)
+ for (const p of tile.parts)
+ draw_tile_sprite(ctx, data.tile_names[p] as TileName)
ctx.restore()
}