From 906a549382d93ae3b1443756d2a5016280d3da95 Mon Sep 17 00:00:00 2001 From: Paula Date: Sat, 7 Mar 2026 19:53:33 -0300 Subject: [PATCH] Only interact with tiles ~2 tile distances away --- client/systems/dimension_logic.ts | 16 ++++++++++++++++ common/utils.ts | 15 +++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/client/systems/dimension_logic.ts b/client/systems/dimension_logic.ts index bc58702..eaa0a84 100644 --- a/client/systems/dimension_logic.ts +++ b/client/systems/dimension_logic.ts @@ -6,6 +6,8 @@ import { InputManager } from "../input_manager.ts"; import { canvas } from "../renderer.ts"; import { TICK_DELTA, TILE_SIZE } from "$/common/constants.ts"; import { EverythingRegistry, TileRegistry } from "$/common/everything_registry.ts"; +import { Position } from "$/common/components/position.ts"; +import { distance_point_rectangle } from "../../common/utils.ts"; export class DimensionLogicSystem extends System { update(world: ClientWorld, delta: number): void { @@ -23,6 +25,7 @@ export class DimensionLogicSystem extends System { } const [player] = world.get_tag("player")!; + const player_position = player.get(Position)!; const camera = player.get(Camera)!; const mouse = InputManager.get_mouse_position(); @@ -47,6 +50,19 @@ export class DimensionLogicSystem extends System { return; } + const distance_to_player = distance_point_rectangle( + tile.x * TILE_SIZE, + tile.y * TILE_SIZE, + player_position.x, + player_position.y, + 72, + 72, + ); + console.log(distance_to_player); + if (distance_to_player > TILE_SIZE * 2) { + return; + } + if (tile_info.on_interact || tile_info.on_click) { if (tile_info.on_interact && InputManager.is_mouse_pressed(2)) { InputManager.consume_mouse(2); diff --git a/common/utils.ts b/common/utils.ts index 0ef0e8b..6a14f83 100644 --- a/common/utils.ts +++ b/common/utils.ts @@ -21,3 +21,18 @@ export function get_sprite_region(id: string): SpriteRegion { const textures_info = AssetManager.instance.get("bworld:textures_info"); return textures_info?.[id] ?? { x: 0, y: 0 }; } + +export function distance_point_rectangle(px: number, py: number, sqx: number, sqy: number, sqw: number, sqh: number) { + const x0 = sqx; + const y0 = sqy; + const x1 = sqx + sqw; + const y1 = sqy + sqh; + + const cx = Math.max(x0, Math.min(px, x1)); + const cy = Math.max(y0, Math.min(py, y1)); + + const dx = px - cx; + const dy = py - cy; + + return Math.sqrt(dx * dx + dy * dy); +}