UNPKG

@jsprismarine/math

Version:
90 lines (86 loc) 7.17 kB
'use strict'; Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 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); } } exports.Vector2 = Vector2; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yMi5janMuY2pzIiwic291cmNlcyI6WyIuLi9zcmMvVmVjdG9yMi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIDJEIFZlY3Rvci5cbiAqL1xuZXhwb3J0IGNsYXNzIFZlY3RvcjIge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBWZWN0b3IyIHdpdGggMCBvbiBhbGwgYXhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldCBaRVJPKCk6IFZlY3RvcjIge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoMCwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGBWZWN0b3IyYCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgWiBjb29yZGluYXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHZlY3RvciA9IG5ldyBWZWN0b3IyKDEwLCAyMCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgeDogbnVtYmVyID0gMCxcbiAgICAgICAgcHJvdGVjdGVkIHo6IG51bWJlciA9IDBcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB4OiDCp2Ike3RoaXMueC50b0ZpeGVkKDIpfcKnciwgejogwqdiJHt0aGlzLnoudG9GaXhlZCgyKX3Cp3JgO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgVmVjdG9yMiBpbnN0YW5jZSBmcm9tIGFuIG9iamVjdCB3aXRoIHggYW5kIHogcHJvcGVydGllcy5cbiAgICAgKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCBjb250YWluaW5nIHggYW5kIHogcHJvcGVydGllcy5cbiAgICAgKiBAcmV0dXJucyB7VmVjdG9yMn0gQSBuZXcgVmVjdG9yMiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21PYmplY3QoeyB4LCB6IH06IHsgeDogbnVtYmVyOyB6OiBudW1iZXIgfSk6IFZlY3RvcjIge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoeCwgeik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBYIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgWCBjb29yZGluYXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGF3YWl0IGVudGl0eS5zZXRYKDEwKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0WCh4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIFogY29vcmRpbmF0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geiAtIFRoZSBaIGNvb3JkaW5hdGUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogYXdhaXQgZW50aXR5LnNldFooMTApO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRaKHo6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnogPSB6O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgeCBjb29yZGluYXRlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUncyB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0WCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy54O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgeiBjb29yZGluYXRlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSB6IGNvb3JkaW5hdGUncyB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0WigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy56O1xuICAgIH1cblxuICAgIHB1YmxpYyBmbG9vcigpOiBWZWN0b3IyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKE1hdGguZmxvb3IodGhpcy54KSwgTWF0aC5mbG9vcih0aGlzLnopKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJ1bmMoKTogVmVjdG9yMiB7XG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMihNYXRoLnRydW5jKHRoaXMueCksIE1hdGgudHJ1bmModGhpcy56KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbXBhcmUgYW4gaW5zdGFuY2Ugb2YgYFZlY3RvcjNgIHdpdGggYW5vdGhlci5cbiAgICAgKiBAcGFyYW0ge1ZlY3RvcjJ9IHZlY3RvciAtIFRoZSBgVmVjdG9yM2AgdG8gY29tcGFyZSB0by5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXkncmUgZXF1YWwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgcHVibGljIGVxdWFscyh2ZWN0b3I6IFZlY3RvcjIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpID09PSBKU09OLnN0cmluZ2lmeSh2ZWN0b3IpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBR08sTUFBTSxPQUFRLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWlCVixXQUNPLENBQUEsQ0FBQSxHQUFZLENBQ1osRUFBQSxDQUFBLEdBQVksQ0FDeEIsRUFBQTtBQUZZLElBQUEsSUFBQSxDQUFBLENBQUEsR0FBQSxDQUFBO0FBQ0EsSUFBQSxJQUFBLENBQUEsQ0FBQSxHQUFBLENBQUE7QUFBQTtBQUNYO0FBQUE7QUFBQTtBQUFBLEVBaEJILFdBQWtCLElBQWdCLEdBQUE7QUFDOUIsSUFBTyxPQUFBLElBQUksT0FBUSxDQUFBLENBQUEsRUFBRyxDQUFDLENBQUE7QUFBQTtBQUMzQixFQWdCTyxRQUFtQixHQUFBO0FBQ3RCLElBQU8sT0FBQSxDQUFBLEtBQUEsRUFBUSxJQUFLLENBQUEsQ0FBQSxDQUFFLE9BQVEsQ0FBQSxDQUFDLENBQUMsQ0FBQSxTQUFBLEVBQVksSUFBSyxDQUFBLENBQUEsQ0FBRSxPQUFRLENBQUEsQ0FBQyxDQUFDLENBQUEsRUFBQSxDQUFBO0FBQUE7QUFDakU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBYyxVQUFBLENBQVcsRUFBRSxDQUFBLEVBQUcsR0FBd0MsRUFBQTtBQUNsRSxJQUFPLE9BQUEsSUFBSSxPQUFRLENBQUEsQ0FBQSxFQUFHLENBQUMsQ0FBQTtBQUFBO0FBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVPLEtBQUssQ0FBaUIsRUFBQTtBQUN6QixJQUFBLElBQUEsQ0FBSyxDQUFJLEdBQUEsQ0FBQTtBQUFBO0FBQ2I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVU8sS0FBSyxDQUFpQixFQUFBO0FBQ3pCLElBQUEsSUFBQSxDQUFLLENBQUksR0FBQSxDQUFBO0FBQUE7QUFDYjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sSUFBZSxHQUFBO0FBQ2xCLElBQUEsT0FBTyxJQUFLLENBQUEsQ0FBQTtBQUFBO0FBQ2hCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTyxJQUFlLEdBQUE7QUFDbEIsSUFBQSxPQUFPLElBQUssQ0FBQSxDQUFBO0FBQUE7QUFDaEIsRUFFTyxLQUFpQixHQUFBO0FBQ3BCLElBQU8sT0FBQSxJQUFJLE9BQVEsQ0FBQSxJQUFBLENBQUssS0FBTSxDQUFBLElBQUEsQ0FBSyxDQUFDLENBQUEsRUFBRyxJQUFLLENBQUEsS0FBQSxDQUFNLElBQUssQ0FBQSxDQUFDLENBQUMsQ0FBQTtBQUFBO0FBQzdELEVBRU8sS0FBaUIsR0FBQTtBQUNwQixJQUFPLE9BQUEsSUFBSSxPQUFRLENBQUEsSUFBQSxDQUFLLEtBQU0sQ0FBQSxJQUFBLENBQUssQ0FBQyxDQUFBLEVBQUcsSUFBSyxDQUFBLEtBQUEsQ0FBTSxJQUFLLENBQUEsQ0FBQyxDQUFDLENBQUE7QUFBQTtBQUM3RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTyxPQUFPLE1BQTBCLEVBQUE7QUFDcEMsSUFBQSxPQUFPLEtBQUssU0FBVSxDQUFBLElBQUksQ0FBTSxLQUFBLElBQUEsQ0FBSyxVQUFVLE1BQU0sQ0FBQTtBQUFBO0FBRTdEOzs7OyJ9