VulpesOS/services/keypad-navigation.mjs
2026-10-22 20:42:26 +02:00

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;
}