@jsprismarine/math
Version:
JSPrismarine math utilities
86 lines (84 loc) • 7.07 kB
JavaScript
class Vector2 {
/**
* Create a new `Vector2` instance.
* @param {number} x - The X coordinate.
* @param {number} z - The Z coordinate.
* @example
* ```typescript
* const vector = new Vector2(10, 20);
* ```
*/
constructor(x = 0, z = 0) {
this.x = x;
this.z = z;
}
/**
* Returns a Vector2 with 0 on all axis.
*/
static get ZERO() {
return new Vector2(0, 0);
}
toString() {
return `x: §b${this.x.toFixed(2)}§r, z: §b${this.z.toFixed(2)}§r`;
}
/**
* Creates a new Vector2 instance from an object with x and z properties.
* @param obj - The object containing x and z properties.
* @returns {Vector2} A new Vector2 instance.
*/
static fromObject({ x, z }) {
return new Vector2(x, z);
}
/**
* Set the X coordinate.
* @param {number} x - The X coordinate.
* @example
* ```typescript
* await entity.setX(10);
* ```
*/
setX(x) {
this.x = x;
}
/**
* Set the Z coordinate.
* @param {number} z - The Z coordinate.
* @example
* ```typescript
* await entity.setZ(10);
* ```
*/
setZ(z) {
this.z = z;
}
/**
* Get the x coordinate.
* @returns {number} The x coordinate's value.
*/
getX() {
return this.x;
}
/**
* Get the z coordinate.
* @returns {number} The z coordinate's value.
*/
getZ() {
return this.z;
}
floor() {
return new Vector2(Math.floor(this.x), Math.floor(this.z));
}
trunc() {
return new Vector2(Math.trunc(this.x), Math.trunc(this.z));
}
/**
* Compare an instance of `Vector3` with another.
* @param {Vector2} 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 { Vector2 };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yMi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL1ZlY3RvcjIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAyRCBWZWN0b3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBWZWN0b3IyIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgVmVjdG9yMiB3aXRoIDAgb24gYWxsIGF4aXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXQgWkVSTygpOiBWZWN0b3IyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKDAsIDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBgVmVjdG9yMmAgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgWCBjb29yZGluYXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gVGhlIFogY29vcmRpbmF0ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCB2ZWN0b3IgPSBuZXcgVmVjdG9yMigxMCwgMjApO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHg6IG51bWJlciA9IDAsXG4gICAgICAgIHByb3RlY3RlZCB6OiBudW1iZXIgPSAwXG4gICAgKSB7fVxuXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgeDogwqdiJHt0aGlzLngudG9GaXhlZCgyKX3Cp3IsIHo6IMKnYiR7dGhpcy56LnRvRml4ZWQoMil9wqdyYDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFZlY3RvcjIgaW5zdGFuY2UgZnJvbSBhbiBvYmplY3Qgd2l0aCB4IGFuZCB6IHByb3BlcnRpZXMuXG4gICAgICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgY29udGFpbmluZyB4IGFuZCB6IHByb3BlcnRpZXMuXG4gICAgICogQHJldHVybnMge1ZlY3RvcjJ9IEEgbmV3IFZlY3RvcjIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tT2JqZWN0KHsgeCwgeiB9OiB7IHg6IG51bWJlcjsgejogbnVtYmVyIH0pOiBWZWN0b3IyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHgsIHopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgWCBjb29yZGluYXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIFggY29vcmRpbmF0ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBhd2FpdCBlbnRpdHkuc2V0WCgxMCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldFgoeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBaIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgWiBjb29yZGluYXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGF3YWl0IGVudGl0eS5zZXRaKDEwKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Wih6OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy56ID0gejtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHggY29vcmRpbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlJ3MgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIGdldFgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHogY29vcmRpbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgeiBjb29yZGluYXRlJ3MgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIGdldFooKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuejtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmxvb3IoKTogVmVjdG9yMiB7XG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMihNYXRoLmZsb29yKHRoaXMueCksIE1hdGguZmxvb3IodGhpcy56KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRydW5jKCk6IFZlY3RvcjIge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoTWF0aC50cnVuYyh0aGlzLngpLCBNYXRoLnRydW5jKHRoaXMueikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wYXJlIGFuIGluc3RhbmNlIG9mIGBWZWN0b3IzYCB3aXRoIGFub3RoZXIuXG4gICAgICogQHBhcmFtIHtWZWN0b3IyfSB2ZWN0b3IgLSBUaGUgYFZlY3RvcjNgIHRvIGNvbXBhcmUgdG8uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGV5J3JlIGVxdWFsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIHB1YmxpYyBlcXVhbHModmVjdG9yOiBWZWN0b3IyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKSA9PT0gSlNPTi5zdHJpbmdpZnkodmVjdG9yKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR08sTUFBTSxPQUFRLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWlCVixXQUNPLENBQUEsQ0FBQSxHQUFZLENBQ1osRUFBQSxDQUFBLEdBQVksQ0FDeEIsRUFBQTtBQUZZLElBQUEsSUFBQSxDQUFBLENBQUEsR0FBQSxDQUFBO0FBQ0EsSUFBQSxJQUFBLENBQUEsQ0FBQSxHQUFBLENBQUE7QUFBQTtBQUNYO0FBQUE7QUFBQTtBQUFBLEVBaEJILFdBQWtCLElBQWdCLEdBQUE7QUFDOUIsSUFBTyxPQUFBLElBQUksT0FBUSxDQUFBLENBQUEsRUFBRyxDQUFDLENBQUE7QUFBQTtBQUMzQixFQWdCTyxRQUFtQixHQUFBO0FBQ3RCLElBQU8sT0FBQSxDQUFBLEtBQUEsRUFBUSxJQUFLLENBQUEsQ0FBQSxDQUFFLE9BQVEsQ0FBQSxDQUFDLENBQUMsQ0FBQSxTQUFBLEVBQVksSUFBSyxDQUFBLENBQUEsQ0FBRSxPQUFRLENBQUEsQ0FBQyxDQUFDLENBQUEsRUFBQSxDQUFBO0FBQUE7QUFDakU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBYyxVQUFBLENBQVcsRUFBRSxDQUFBLEVBQUcsR0FBd0MsRUFBQTtBQUNsRSxJQUFPLE9BQUEsSUFBSSxPQUFRLENBQUEsQ0FBQSxFQUFHLENBQUMsQ0FBQTtBQUFBO0FBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVPLEtBQUssQ0FBaUIsRUFBQTtBQUN6QixJQUFBLElBQUEsQ0FBSyxDQUFJLEdBQUEsQ0FBQTtBQUFBO0FBQ2I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVU8sS0FBSyxDQUFpQixFQUFBO0FBQ3pCLElBQUEsSUFBQSxDQUFLLENBQUksR0FBQSxDQUFBO0FBQUE7QUFDYjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sSUFBZSxHQUFBO0FBQ2xCLElBQUEsT0FBTyxJQUFLLENBQUEsQ0FBQTtBQUFBO0FBQ2hCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTyxJQUFlLEdBQUE7QUFDbEIsSUFBQSxPQUFPLElBQUssQ0FBQSxDQUFBO0FBQUE7QUFDaEIsRUFFTyxLQUFpQixHQUFBO0FBQ3BCLElBQU8sT0FBQSxJQUFJLE9BQVEsQ0FBQSxJQUFBLENBQUssS0FBTSxDQUFBLElBQUEsQ0FBSyxDQUFDLENBQUEsRUFBRyxJQUFLLENBQUEsS0FBQSxDQUFNLElBQUssQ0FBQSxDQUFDLENBQUMsQ0FBQTtBQUFBO0FBQzdELEVBRU8sS0FBaUIsR0FBQTtBQUNwQixJQUFPLE9BQUEsSUFBSSxPQUFRLENBQUEsSUFBQSxDQUFLLEtBQU0sQ0FBQSxJQUFBLENBQUssQ0FBQyxDQUFBLEVBQUcsSUFBSyxDQUFBLEtBQUEsQ0FBTSxJQUFLLENBQUEsQ0FBQyxDQUFDLENBQUE7QUFBQTtBQUM3RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTyxPQUFPLE1BQTBCLEVBQUE7QUFDcEMsSUFBQSxPQUFPLEtBQUssU0FBVSxDQUFBLElBQUksQ0FBTSxLQUFBLElBQUEsQ0FBSyxVQUFVLE1BQU0sQ0FBQTtBQUFBO0FBRTdEOzs7OyJ9