UNPKG

@jsprismarine/math

Version:
79 lines (76 loc) 7.52 kB
import { Vector2 } from './Vector2.es.js'; class Vector3 extends 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); } } export { Vector3 }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yMy5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL1ZlY3RvcjMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVjdG9yMiB9IGZyb20gJy4vVmVjdG9yMic7XG5cbi8qKlxuICogM0QgVmVjdG9yLlxuICovXG5leHBvcnQgY2xhc3MgVmVjdG9yMyBleHRlbmRzIFZlY3RvcjIge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBWZWN0b3IzIHdpdGggMCBvbiBhbGwgYXhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldCBaRVJPKCk6IFZlY3RvcjMge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGBWZWN0b3IzYCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgWSBjb29yZGluYXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gVGhlIFogY29vcmRpbmF0ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCB2ZWN0b3IgPSBuZXcgVmVjdG9yMygxMCwgMjAsIDMwKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHg6IG51bWJlcixcbiAgICAgICAgcHJvdGVjdGVkIHk6IG51bWJlcixcbiAgICAgICAgejogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKHgsIHopO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHg6IMKnYiR7dGhpcy54LnRvRml4ZWQoMil9wqdyLCB5OiDCp2Ike3RoaXMueS50b0ZpeGVkKDIpfcKnciwgejogwqdiJHt0aGlzLnoudG9GaXhlZCgyKX3Cp3JgO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgVmVjdG9yMyBpbnN0YW5jZSBmcm9tIGFuIG9iamVjdCB3aXRoIHgsIHksIGFuZCB6IHByb3BlcnRpZXMuXG4gICAgICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgY29udGFpbmluZyB4LCB5LCBhbmQgeiBwcm9wZXJ0aWVzLlxuICAgICAqIEByZXR1cm5zIHtWZWN0b3IzfSBBIG5ldyBWZWN0b3IzIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdCh7IHgsIHksIHogfTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH0pOiBWZWN0b3IzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKHgsIHksIHopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgWSBjb29yZGluYXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIFkgY29vcmRpbmF0ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBlbnRpdHkuc2V0WSgxMCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldFkoeTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB5IGNvb3JkaW5hdGUuXG4gICAgICogQHJldHVybnMge251bWJlcn0gVGhlIHkgY29vcmRpbmF0ZSdzIHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRZKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHdpdGggZWFjaCBjb21wb25lbnQgcm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuXG4gICAgICogQHJldHVybnMge1ZlY3RvcjN9IEEgbmV3IFZlY3RvcjMgd2l0aCByb3VuZGVkIGRvd24gY29tcG9uZW50cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZmxvb3IoKTogVmVjdG9yMyB7XG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyhNYXRoLmZsb29yKHRoaXMueCksIE1hdGguZmxvb3IodGhpcy55KSwgTWF0aC5mbG9vcih0aGlzLnopKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgd2l0aCBlYWNoIGNvbXBvbmVudCB0cnVuY2F0ZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci5cbiAgICAgKiBAcmV0dXJucyB7VmVjdG9yM30gQSBuZXcgVmVjdG9yMyB3aXRoIHRydW5jYXRlZCBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cnVuYygpOiBWZWN0b3IzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKE1hdGgudHJ1bmModGhpcy54KSwgTWF0aC50cnVuYyh0aGlzLnkpLCBNYXRoLnRydW5jKHRoaXMueikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBhcmUgYW4gaW5zdGFuY2Ugb2YgYFZlY3RvcjNgIHdpdGggYW5vdGhlci5cbiAgICAgKiBAcGFyYW0ge1ZlY3RvcjN9IHZlY3RvciAtIFRoZSBgVmVjdG9yM2AgdG8gY29tcGFyZSB0by5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXkncmUgZXF1YWwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgcHVibGljIGVxdWFscyh2ZWN0b3I6IHR5cGVvZiB0aGlzKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKSA9PT0gSlNPTi5zdHJpbmdpZnkodmVjdG9yKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFLTyxNQUFNLGdCQUFnQixPQUFRLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBa0IxQixXQUFBLENBQ0gsQ0FDVSxFQUFBLENBQUEsRUFDVixDQUNGLEVBQUE7QUFDRSxJQUFBLEtBQUEsQ0FBTSxHQUFHLENBQUMsQ0FBQTtBQUhBLElBQUEsSUFBQSxDQUFBLENBQUEsR0FBQSxDQUFBO0FBQUE7QUFJZDtBQUFBO0FBQUE7QUFBQSxFQXBCQSxXQUFrQixJQUFnQixHQUFBO0FBQzlCLElBQUEsT0FBTyxJQUFJLE9BQUEsQ0FBUSxDQUFHLEVBQUEsQ0FBQSxFQUFHLENBQUMsQ0FBQTtBQUFBO0FBQzlCLEVBb0JPLFFBQW1CLEdBQUE7QUFDdEIsSUFBQSxPQUFPLFFBQVEsSUFBSyxDQUFBLENBQUEsQ0FBRSxPQUFRLENBQUEsQ0FBQyxDQUFDLENBQVksU0FBQSxFQUFBLElBQUEsQ0FBSyxDQUFFLENBQUEsT0FBQSxDQUFRLENBQUMsQ0FBQyxDQUFBLFNBQUEsRUFBWSxLQUFLLENBQUUsQ0FBQSxPQUFBLENBQVEsQ0FBQyxDQUFDLENBQUEsRUFBQSxDQUFBO0FBQUE7QUFDOUY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBYyxVQUFXLENBQUEsRUFBRSxDQUFHLEVBQUEsQ0FBQSxFQUFHLEdBQW1ELEVBQUE7QUFDaEYsSUFBQSxPQUFPLElBQUksT0FBQSxDQUFRLENBQUcsRUFBQSxDQUFBLEVBQUcsQ0FBQyxDQUFBO0FBQUE7QUFDOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVU8sS0FBSyxDQUFpQixFQUFBO0FBQ3pCLElBQUEsSUFBQSxDQUFLLENBQUksR0FBQSxDQUFBO0FBQUE7QUFDYjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sSUFBZSxHQUFBO0FBQ2xCLElBQUEsT0FBTyxJQUFLLENBQUEsQ0FBQTtBQUFBO0FBQ2hCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTyxLQUFpQixHQUFBO0FBQ3BCLElBQUEsT0FBTyxJQUFJLE9BQVEsQ0FBQSxJQUFBLENBQUssS0FBTSxDQUFBLElBQUEsQ0FBSyxDQUFDLENBQUcsRUFBQSxJQUFBLENBQUssS0FBTSxDQUFBLElBQUEsQ0FBSyxDQUFDLENBQUcsRUFBQSxJQUFBLENBQUssS0FBTSxDQUFBLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQTtBQUFBO0FBQ2pGO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTyxLQUFpQixHQUFBO0FBQ3BCLElBQUEsT0FBTyxJQUFJLE9BQVEsQ0FBQSxJQUFBLENBQUssS0FBTSxDQUFBLElBQUEsQ0FBSyxDQUFDLENBQUcsRUFBQSxJQUFBLENBQUssS0FBTSxDQUFBLElBQUEsQ0FBSyxDQUFDLENBQUcsRUFBQSxJQUFBLENBQUssS0FBTSxDQUFBLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQTtBQUFBO0FBQ2pGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLE9BQU8sTUFBOEIsRUFBQTtBQUN4QyxJQUFBLE9BQU8sS0FBSyxTQUFVLENBQUEsSUFBSSxDQUFNLEtBQUEsSUFBQSxDQUFLLFVBQVUsTUFBTSxDQUFBO0FBQUE7QUFFN0Q7Ozs7In0=