UNPKG

@js-basics/vector

Version:

A 3D Vector lib including arithmetic operator overloading (+ - * / % **).

78 lines (75 loc) 1.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IDegree = exports.Degree = void 0; exports.degree = degree; exports.idegree = idegree; exports.isAngle = isAngle; var _math = require("./utils/math.cjs"); var _css = require("./utils/css.cjs"); const ANGLE = Symbol('angle rad'); const DEG_TO_RAD = Math.PI / 180; class ADegree { constructor(angle) { if (angle instanceof ADegree) { this[ANGLE] = angle[ANGLE]; } else { this[ANGLE] = (0, _math.normRad)(angle * DEG_TO_RAD); } } valueOf() { return this[ANGLE]; } toJSON() { return { angle: this[ANGLE] }; } toString() { return JSON.stringify(this.toJSON()); } toCSSVars(name, target) { return (0, _css.convertToCSSVars)(name, this.toJSON(), target); } } class Degree extends ADegree { set(angle) { if (angle instanceof ADegree) { this[ANGLE] = angle[ANGLE]; } else { this[ANGLE] = (0, _math.normRad)((angle || 0) * DEG_TO_RAD); } } } exports.Degree = Degree; class IDegree extends ADegree { toDegree() { return new Degree(this[ANGLE]); } } exports.IDegree = IDegree; const ZERO = new IDegree(0); /** * @param {number | ADegree} angle * @returns {Degree & number} */ function degree(angle) { return new Degree(angle); } /** * @param {number | ADegree} angle * @returns {IDegree & number} */ function idegree(angle) { if (angle instanceof IDegree) { return angle; } if (!angle) { return ZERO; } return new IDegree(angle); } function isAngle(angle) { return (0, _math.isNumber)(angle) || angle instanceof ADegree; }