Only interact with tiles ~2 tile distances away

This commit is contained in:
2026-03-07 19:53:33 -03:00
parent 8baf356218
commit 906a549382
2 changed files with 31 additions and 0 deletions
+16
View File
@@ -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);
+15
View File
@@ -21,3 +21,18 @@ export function get_sprite_region(id: string): SpriteRegion {
const textures_info = AssetManager.instance.get<TexturesInfo>("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);
}