UNPKG

@jsprismarine/math

Version:
86 lines (84 loc) 7.07 kB
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