@pilotlab/lux-attributes
Version:
A luxurious user experience framework, developed by your friends at Pilot.
244 lines • 9.44 kB
JavaScript
"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