@irysius/grid-math
Version:
Tools to assist with grid math and algorithms
78 lines (77 loc) • 2.93 kB
JavaScript
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Gravity;
(function (Gravity) {
Gravity[Gravity["Center"] = 0] = "Center";
Gravity[Gravity["North"] = 1] = "North";
Gravity[Gravity["South"] = 2] = "South";
Gravity[Gravity["East"] = 4] = "East";
Gravity[Gravity["West"] = 8] = "West";
Gravity[Gravity["NorthEast"] = 5] = "NorthEast";
Gravity[Gravity["NorthWest"] = 9] = "NorthWest";
Gravity[Gravity["SouthEast"] = 6] = "SouthEast";
Gravity[Gravity["SouthWest"] = 10] = "SouthWest";
})(Gravity = exports.Gravity || (exports.Gravity = {}));
function hasGravity(value, targetGravity) {
if (targetGravity === Gravity.Center) {
return value === Gravity.Center;
}
else {
return (value & targetGravity) === targetGravity;
}
}
exports.hasGravity = hasGravity;
function gravityToString(value) {
let strings = [
hasGravity(value, Gravity.North) ? 'North' : null,
hasGravity(value, Gravity.South) ? 'South' : null,
hasGravity(value, Gravity.East) ? 'East' : null,
hasGravity(value, Gravity.West) ? 'West' : null
].filter(x => x);
if (strings.length === 0) {
return 'Gravity.Center';
}
else {
return `Gravity.${strings.join('')}`;
}
}
exports.gravityToString = gravityToString;
function northOrSouth(gravity) {
let maskedGravity = 0b0011 & gravity;
switch (maskedGravity) {
case Gravity.North:
return Gravity.North;
case Gravity.South:
return Gravity.South;
case Gravity.Center:
return Gravity.Center;
default:
throw new Error('Cannot be Gravity.North & Gravity.South at the same time.');
}
}
exports.northOrSouth = northOrSouth;
function eastOrWest(gravity) {
let maskedGravity = 0b1100 & gravity;
switch (maskedGravity) {
case Gravity.East:
return Gravity.East;
case Gravity.West:
return Gravity.West;
case Gravity.Center:
return Gravity.Center;
default:
throw new Error('Cannot be Gravity.East & Gravity.West at the same time.');
}
}
exports.eastOrWest = eastOrWest;
exports.default = Gravity;
});