UNPKG

@irysius/grid-math

Version:

Tools to assist with grid math and algorithms

78 lines (77 loc) 2.93 kB
(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; });