@jsprismarine/math
Version:
JSPrismarine math utilities
79 lines (76 loc) • 7.52 kB
JavaScript
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=