UNPKG

@pilotlab/lux-attributes

Version:

A luxurious user experience framework, developed by your friends at Pilot.

244 lines 9.44 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var lux_attributes_1 = require("@pilotlab/lux-attributes"); var types_1 = require("./types"); var pointBase_1 = require("./pointBase"); var lux_attributes_2 = require("@pilotlab/lux-attributes"); var Vector = (function (_super) { __extends(Vector, _super); function Vector(x, y, z, w, label) { if (x === void 0) { x = 0; } if (y === void 0) { y = 0; } if (z === void 0) { z = 0; } if (w === void 0) { w = 0; } var _this = _super.call(this, 'vector', x, y, z, label) || this; _this.p_w = _this.children.get('w', new lux_attributes_2.AttributeCreateOptions(w, lux_attributes_2.DataType.NUMBER, null, lux_attributes_1.AttributeChangeOptions.zero)); return _this; } Object.defineProperty(Vector.prototype, "w", { get: function () { return this.p_w.value; }, set: function (value) { this.p_w.set(value, lux_attributes_1.AttributeChangeOptions.save.durationZero); }, enumerable: true, configurable: true }); Object.defineProperty(Vector.prototype, "size", { get: function () { return Math.sqrt(this.dot(this)); }, enumerable: true, configurable: true }); Object.defineProperty(Vector.prototype, "magnitude", { get: function () { return this.size; }, enumerable: true, configurable: true }); Object.defineProperty(Vector.prototype, "abs", { get: function () { return new Vector(Math.abs(this.x), Math.abs(this.y), Math.abs(this.z), Math.abs(this.w)); }, enumerable: true, configurable: true }); Vector.prototype.dot = function (v) { var values = this.children.list; var valuesIn = v.children.list; if (values.size != values.size) throw new Error('Vectors of different dimensions.'); var erg = 0.0; for (var i = 0; i < values.size; i++) erg += values.item(i).value * valuesIn.item(i).value; return erg; }; Vector.prototype.normalize = function () { var m = this.magnitude; var values = this.children.list; if (m <= types_1.default.tolerance) m = 1.0; for (var i = 0; i < values.size; i++) { values.item(i).value = values.item(i).value / m; if (Math.abs(values.item(i).value) < types_1.default.tolerance) values.item(i).value = 0.0; } return this; }; Vector.prototype.multiply = function (v) { var values = this.children.list; var valuesIn = v.children.list; if (valuesIn.size !== values.size) return null; for (var i = 0; i < values.size; i++) { values.item(i).value = values.item(i).value * valuesIn.item(i).value; } return this; }; Vector.prototype.divide = function (v) { var values = this.children.list; var valuesIn = v.children.list; if (valuesIn.size !== values.size) return null; for (var i = 0; i < values.size; i++) { values.item(i).value = values.item(i).value / valuesIn.item(i).value; } return this; }; Vector.prototype.go = function (target, durationSpeed, ease, repeatCount) { if (repeatCount === void 0) { repeatCount = 0; } var options = new lux_attributes_1.AttributeChangeOptions(lux_attributes_2.AttributeChangeActions.SIGNAL_CHANGE, durationSpeed, ease); options.repeatCount = repeatCount; return this.attributes.update(target, options); }; Object.defineProperty(Vector, "identity", { get: function () { return new Vector(0, 0); }, enumerable: true, configurable: true }); Vector.fromPoint3D = function (pt) { return new Vector(pt.x, pt.y, pt.z, null); }; Object.defineProperty(Vector, "empty", { get: function () { return new Vector(); }, enumerable: true, configurable: true }); Vector.cross = function (v1, v2, dest) { if (dest === void 0) { dest = null; } var values1 = v1.children.list; var values2 = v2.children.list; if (values1.size != values2.size || values1.size < 3) return new Vector(); if (!dest) dest = new Vector(0, 0, 0); dest.x = v1.y * v2.z - v1.z * v2.y; dest.y = v1.z * v2.x - v1.x * v2.z; dest.z = v1.x * v2.y - v1.y * v2.x; return dest; }; Vector.dot = function (v1, v2) { var values1 = v1.children.list; var values2 = v2.children.list; if (values1.size !== values2.size) return -1.0; var e = 0.0; var d = 0.0; for (var i = 0; i < values1.size; i++) { d = (values1.item(i).value * values2.item(i).value); e += d; } return e; }; Vector.distance = function (v1, v2) { var values1 = v1.children.list; var values2 = v2.children.list; if (values1.size !== values2.size) return -1.0; var e = 0.0; var d = 0.0; for (var i = 0; i < values1.size; i++) { d = (values1.item(i).value - values2.item(i).value); e += d * d; } return Math.sqrt(e); }; Vector.direction = function (v1, v2, dest) { if (dest === void 0) { dest = new Vector(); } var values1 = v1.children.list; var values2 = v2.children.list; var valuesDest = dest.children.list; if (values1.size !== values2.size) return new Vector(); var d = 0.0; var size = 0.0; for (var i = 0; i < values1.size; i++) { valuesDest.item(i).value = values1.item(i).value - values2.item(i).value; size += d * d; } if (size === 0) { for (var i = 0; i < values1.size; i++) { valuesDest.item(i).value = 0; } return dest; } size = 1 / size; for (var i = 0; i < values1.size; i++) { valuesDest.item(i).value = valuesDest.item(i).value * size; } return dest; }; Vector.mix = function (v1, v2, time, dest) { if (dest === void 0) { dest = new Vector(); } var values1 = v1.children.list; var values2 = v2.children.list; var valuesDest = dest.children.list; if (values1.size !== values2.size) return new Vector(); for (var i = 0; i < values1.size; i++) { valuesDest.item(i).value = values1.item(i).value + time * (values2.item(i).value - values1.item(i).value); } return dest; }; Vector.sum = function (v1, v2, dest) { if (dest === void 0) { dest = new Vector(); } var values1 = v1.children.list; var values2 = v2.children.list; var valuesDest = dest.children.list; if (values1.size !== values2.size) return new Vector(); for (var i = 0; i < values1.size; i++) { valuesDest.item(i).value = values1.item(i).value + values2.item(i).value; } return dest; }; Vector.difference = function (v1, v2, dest) { if (dest === void 0) { dest = new Vector(); } var values1 = v1.children.list; var values2 = v2.children.list; var valuesDest = dest.children.list; if (values1.size !== values2.size) return new Vector(); for (var i = 0; i < values1.size; i++) { valuesDest.item(i).value = values1.item(i).value - values2.item(i).value; } return dest; }; Vector.product = function (v1, v2, dest) { if (dest === void 0) { dest = new Vector(); } var values1 = v1.children.list; var values2 = v2.children.list; var valuesDest = dest.children.list; if (values1.size !== values2.size) return new Vector(); for (var i = 0; i < values1.size; i++) { valuesDest.item(i).value = values1.item(i).value * values2.item(i).value; } return dest; }; Vector.quotient = function (v1, v2, dest) { if (dest === void 0) { dest = new Vector(); } var values1 = v1.children.list; var values2 = v2.children.list; var valuesDest = dest.children.list; if (values1.size !== values2.size) return new Vector(); for (var i = 0; i < values1.size; i++) { valuesDest.item(i).value = values1.item(i).value / values2.item(i).value; } return dest; }; Vector.zero = new Vector(0, 0, 0); Vector.up = new Vector(0, 1, 0); Vector.right = new Vector(1, 0, 0); Vector.forward = new Vector(0, 0, 1); return Vector; }(pointBase_1.default)); exports.Vector = Vector; exports.default = Vector; //# sourceMappingURL=vector.js.map