@jsprismarine/math
Version:
JSPrismarine math utilities
83 lines (78 loc) • 7.64 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const Vector2 = require('./Vector2.cjs.cjs');
class Vector3 extends Vector2.Vector2 {
/**
* Create a new `Vector3` instance.
* @param {number} x - The X coordinate.
* @param {number} y - The Y coordinate.
* @param {number} z - The Z coordinate.
* @example
* ```typescript
* const vector = new Vector3(10, 20, 30);
* ```
*/
constructor(x, y, z) {
super(x, z);
this.y = y;
}
/**
* Returns a Vector3 with 0 on all axis.
*/
static get ZERO() {
return new Vector3(0, 0, 0);
}
toString() {
return `x: §b${this.x.toFixed(2)}§r, y: §b${this.y.toFixed(2)}§r, z: §b${this.z.toFixed(2)}§r`;
}
/**
* Creates a new Vector3 instance from an object with x, y, and z properties.
* @param obj - The object containing x, y, and z properties.
* @returns {Vector3} A new Vector3 instance.
*/
static fromObject({ x, y, z }) {
return new Vector3(x, y, z);
}
/**
* Set the Y coordinate.
* @param {number} y - The Y coordinate.
* @example
* ```typescript
* entity.setY(10);
* ```
*/
setY(y) {
this.y = y;
}
/**
* Get the y coordinate.
* @returns {number} The y coordinate's value.
*/
getY() {
return this.y;
}
/**
* Returns a new Vector3 with each component rounded down to the nearest integer.
* @returns {Vector3} A new Vector3 with rounded down components.
*/
floor() {
return new Vector3(Math.floor(this.x), Math.floor(this.y), Math.floor(this.z));
}
/**
* Returns a new Vector3 with each component truncated to the nearest integer.
* @returns {Vector3} A new Vector3 with truncated axis.
*/
trunc() {
return new Vector3(Math.trunc(this.x), Math.trunc(this.y), Math.trunc(this.z));
}
/**
* Compare an instance of `Vector3` with another.
* @param {Vector3} vector - The `Vector3` to compare to.
* @returns {boolean} `true` if they're equal otherwise `false`.
*/
equals(vector) {
return JSON.stringify(this) === JSON.stringify(vector);
}
}
exports.Vector3 = Vector3;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yMy5janMuY2pzIiwic291cmNlcyI6WyIuLi9zcmMvVmVjdG9yMy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWZWN0b3IyIH0gZnJvbSAnLi9WZWN0b3IyJztcblxuLyoqXG4gKiAzRCBWZWN0b3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBWZWN0b3IzIGV4dGVuZHMgVmVjdG9yMiB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIFZlY3RvcjMgd2l0aCAwIG9uIGFsbCBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IFpFUk8oKTogVmVjdG9yMyB7XG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAwLCAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgYFZlY3RvcjNgIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIFggY29vcmRpbmF0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgWiBjb29yZGluYXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHZlY3RvciA9IG5ldyBWZWN0b3IzKDEwLCAyMCwgMzApO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgeDogbnVtYmVyLFxuICAgICAgICBwcm90ZWN0ZWQgeTogbnVtYmVyLFxuICAgICAgICB6OiBudW1iZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIoeCwgeik7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgeDogwqdiJHt0aGlzLngudG9GaXhlZCgyKX3Cp3IsIHk6IMKnYiR7dGhpcy55LnRvRml4ZWQoMil9wqdyLCB6OiDCp2Ike3RoaXMuei50b0ZpeGVkKDIpfcKncmA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBWZWN0b3IzIGluc3RhbmNlIGZyb20gYW4gb2JqZWN0IHdpdGggeCwgeSwgYW5kIHogcHJvcGVydGllcy5cbiAgICAgKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCBjb250YWluaW5nIHgsIHksIGFuZCB6IHByb3BlcnRpZXMuXG4gICAgICogQHJldHVybnMge1ZlY3RvcjN9IEEgbmV3IFZlY3RvcjMgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tT2JqZWN0KHsgeCwgeSwgeiB9OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfSk6IFZlY3RvcjMge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoeCwgeSwgeik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBZIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgWSBjb29yZGluYXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGVudGl0eS5zZXRZKDEwKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0WSh5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHkgY29vcmRpbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlJ3MgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIGdldFkoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgd2l0aCBlYWNoIGNvbXBvbmVudCByb3VuZGVkIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlci5cbiAgICAgKiBAcmV0dXJucyB7VmVjdG9yM30gQSBuZXcgVmVjdG9yMyB3aXRoIHJvdW5kZWQgZG93biBjb21wb25lbnRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBmbG9vcigpOiBWZWN0b3IzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKE1hdGguZmxvb3IodGhpcy54KSwgTWF0aC5mbG9vcih0aGlzLnkpLCBNYXRoLmZsb29yKHRoaXMueikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyB3aXRoIGVhY2ggY29tcG9uZW50IHRydW5jYXRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxuICAgICAqIEByZXR1cm5zIHtWZWN0b3IzfSBBIG5ldyBWZWN0b3IzIHdpdGggdHJ1bmNhdGVkIGF4aXMuXG4gICAgICovXG4gICAgcHVibGljIHRydW5jKCk6IFZlY3RvcjMge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoTWF0aC50cnVuYyh0aGlzLngpLCBNYXRoLnRydW5jKHRoaXMueSksIE1hdGgudHJ1bmModGhpcy56KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSBhbiBpbnN0YW5jZSBvZiBgVmVjdG9yM2Agd2l0aCBhbm90aGVyLlxuICAgICAqIEBwYXJhbSB7VmVjdG9yM30gdmVjdG9yIC0gVGhlIGBWZWN0b3IzYCB0byBjb21wYXJlIHRvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhleSdyZSBlcXVhbCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXF1YWxzKHZlY3RvcjogdHlwZW9mIHRoaXMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpID09PSBKU09OLnN0cmluZ2lmeSh2ZWN0b3IpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJWZWN0b3IyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFLTyxNQUFNLGdCQUFnQkEsZUFBUSxDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWtCMUIsV0FBQSxDQUNILENBQ1UsRUFBQSxDQUFBLEVBQ1YsQ0FDRixFQUFBO0FBQ0UsSUFBQSxLQUFBLENBQU0sR0FBRyxDQUFDLENBQUE7QUFIQSxJQUFBLElBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQTtBQUFBO0FBSWQ7QUFBQTtBQUFBO0FBQUEsRUFwQkEsV0FBa0IsSUFBZ0IsR0FBQTtBQUM5QixJQUFBLE9BQU8sSUFBSSxPQUFBLENBQVEsQ0FBRyxFQUFBLENBQUEsRUFBRyxDQUFDLENBQUE7QUFBQTtBQUM5QixFQW9CTyxRQUFtQixHQUFBO0FBQ3RCLElBQUEsT0FBTyxRQUFRLElBQUssQ0FBQSxDQUFBLENBQUUsT0FBUSxDQUFBLENBQUMsQ0FBQyxDQUFZLFNBQUEsRUFBQSxJQUFBLENBQUssQ0FBRSxDQUFBLE9BQUEsQ0FBUSxDQUFDLENBQUMsQ0FBQSxTQUFBLEVBQVksS0FBSyxDQUFFLENBQUEsT0FBQSxDQUFRLENBQUMsQ0FBQyxDQUFBLEVBQUEsQ0FBQTtBQUFBO0FBQzlGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE9BQWMsVUFBVyxDQUFBLEVBQUUsQ0FBRyxFQUFBLENBQUEsRUFBRyxHQUFtRCxFQUFBO0FBQ2hGLElBQUEsT0FBTyxJQUFJLE9BQUEsQ0FBUSxDQUFHLEVBQUEsQ0FBQSxFQUFHLENBQUMsQ0FBQTtBQUFBO0FBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVPLEtBQUssQ0FBaUIsRUFBQTtBQUN6QixJQUFBLElBQUEsQ0FBSyxDQUFJLEdBQUEsQ0FBQTtBQUFBO0FBQ2I7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1PLElBQWUsR0FBQTtBQUNsQixJQUFBLE9BQU8sSUFBSyxDQUFBLENBQUE7QUFBQTtBQUNoQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sS0FBaUIsR0FBQTtBQUNwQixJQUFBLE9BQU8sSUFBSSxPQUFRLENBQUEsSUFBQSxDQUFLLEtBQU0sQ0FBQSxJQUFBLENBQUssQ0FBQyxDQUFHLEVBQUEsSUFBQSxDQUFLLEtBQU0sQ0FBQSxJQUFBLENBQUssQ0FBQyxDQUFHLEVBQUEsSUFBQSxDQUFLLEtBQU0sQ0FBQSxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUE7QUFBQTtBQUNqRjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sS0FBaUIsR0FBQTtBQUNwQixJQUFBLE9BQU8sSUFBSSxPQUFRLENBQUEsSUFBQSxDQUFLLEtBQU0sQ0FBQSxJQUFBLENBQUssQ0FBQyxDQUFHLEVBQUEsSUFBQSxDQUFLLEtBQU0sQ0FBQSxJQUFBLENBQUssQ0FBQyxDQUFHLEVBQUEsSUFBQSxDQUFLLEtBQU0sQ0FBQSxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUE7QUFBQTtBQUNqRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxPQUFPLE1BQThCLEVBQUE7QUFDeEMsSUFBQSxPQUFPLEtBQUssU0FBVSxDQUFBLElBQUksQ0FBTSxLQUFBLElBQUEsQ0FBSyxVQUFVLE1BQU0sQ0FBQTtBQUFBO0FBRTdEOzs7OyJ9