UNPKG

hexagrid

Version:

Hexagonal grid with fast lookup

71 lines 2.73 kB
"use strict"; 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