19 lines
821 B
JavaScript
19 lines
821 B
JavaScript
export function nextKeypadTarget(items, current, direction) {
|
|
if (!items.length) return -1;
|
|
if (current < 0 || current >= items.length) return 0;
|
|
const vectors = {ArrowLeft: [-1, 0], ArrowRight: [1, 0], ArrowUp: [0, -1], ArrowDown: [0, 1]};
|
|
const vector = vectors[direction];
|
|
if (!vector) return -1;
|
|
const origin = items[current];
|
|
let best = -1, score = Infinity;
|
|
for (let index = 0; index < items.length; index++) {
|
|
if (index === current) continue;
|
|
const dx = items[index].x - origin.x, dy = items[index].y - origin.y;
|
|
const forward = dx * vector[0] + dy * vector[1];
|
|
if (forward <= 1) continue;
|
|
const sideways = Math.abs(dx * vector[1] - dy * vector[0]);
|
|
const distance = forward + sideways * 3;
|
|
if (distance < score) { best = index; score = distance; }
|
|
}
|
|
return best;
|
|
}
|