diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-01-28 11:58:07 +0100 |
|---|---|---|
| committer | tpart <tpart120@proton.me> | 2026-02-26 20:49:13 +0100 |
| commit | 4d380b8faad6f9a9253e7adbc22ea4dfa4cabc5f (patch) | |
| tree | 82891b00de87e50acb5100b83f0d72cb4ab2faa7 | |
| parent | c547ebad211177a0b05c7842584d4b3e412ad9b0 (diff) | |
| download | hurrycurry-4d380b8faad6f9a9253e7adbc22ea4dfa4cabc5f.tar hurrycurry-4d380b8faad6f9a9253e7adbc22ea4dfa4cabc5f.tar.bz2 hurrycurry-4d380b8faad6f9a9253e7adbc22ea4dfa4cabc5f.tar.zst | |
crude port of test-client
| -rw-r--r-- | test-client/main.ts | 34 | ||||
| -rw-r--r-- | test-client/movement.ts | 7 | ||||
| -rw-r--r-- | test-client/visual.ts | 3 |
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() } |