hexagrid
Version:
Hexagonal grid with fast lookup
71 lines • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CubeCoordinates = void 0;
const direction_1 = require("./direction");
class CubeCoordinates {
constructor(q = 0, r = 0) {
this.q = q;
this.r = r;
this.s = -q - r;
}
}
exports.CubeCoordinates = CubeCoordinates;
(function (CubeCoordinates) {
function translated(coord, direction, n = 1) {
const { q, r } = coord;
const s = -q - r;
// q is up, r is diagonal up right.
switch (direction) {
// +, 0
case direction_1.Direction.North: return { r, q: q + n, s: s - n };
// 0, +
case direction_1.Direction.NorthEast: return { r: r + n, q, s: s - n };
// -, +
case direction_1.Direction.SouthEast: return { r: r + n, q: q - n, s };
// -, 0
case direction_1.Direction.South: return { r, q: q - n, s: s + n };
// 0, -
case direction_1.Direction.SouthWest: return { r: r - n, q, s: s + n };
// +, -
case direction_1.Direction.NorthWest: return { r: r - n, q: q + n, s };
default: throw new TypeError("Wrong direction: " + direction);
}
}
CubeCoordinates.translated = translated;
function direction(coord1, coord2) {
if (coord1.q < coord2.q) {
return coord1.r > coord2.r ? direction_1.Direction.NorthWest : direction_1.Direction.North;
}
else if (coord1.q > coord2.q) {
return coord1.r < coord2.r ? direction_1.Direction.SouthEast : direction_1.Direction.South;
}
else {
// coord1.q === coord2.q
return coord1.r < coord2.r ? direction_1.Direction.NorthEast : direction_1.Direction.SouthWest;
}
}
CubeCoordinates.direction = direction;
function parse(str) {
const spl = str.split("x");
const q = +spl[0];
const r = +spl[1];
const s = -q - r;
return { q, r, s };
}
CubeCoordinates.parse = parse;
function distance(coord1, coord2) {
return (Math.abs(coord1.q - coord2.q) + Math.abs(coord1.r - coord2.r) + Math.abs(coord1.s - coord2.s)) / 2;
}
CubeCoordinates.distance = distance;
function toString(coord) {
if (arguments.length === 0) {
return "CubeCoordinates";
}
if (!coord) {
return "undefined";
}
return `${coord.q}x${coord.r}`;
}
CubeCoordinates.toString = toString;
})(CubeCoordinates = exports.CubeCoordinates || (exports.CubeCoordinates = {}));
//# sourceMappingURL=cubecoordinates.js.map