import { chebyshevDistance, traceLine, hasLineOfSight, canTarget, resolveArea, Level, WALL, FLOOR } from '@datamoc/mw_games/roguelike';
const level = new Level(20, 20, [WALL, FLOOR], 1); // an open floor
const origin = { x: 2, y: 2 };
const target = { x: 8, y: 5 };
chebyshevDistance(origin, target); // 6
traceLine(origin, target); // every cell the shot crosses
hasLineOfSight(level, origin, target); // true - nothing blocks it
if (canTarget(level, origin, target, { range: 10 })) {
const hit = resolveArea(origin, target, { kind: 'burst', radius: 2 });
}
The straight-line ruler distance a roguelike uses: diagonals cost the same as a step.