diff --git a/package.json b/package.json index 1d95078..253bd6f 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "predeploy": "npm run dist", "lint": "eslint src --ext .ts", "lint:fix": "eslint src --ext .ts --fix", - "format": "prettier --write ./src/**/*.ts" + "format": "prettier --write ./src/**/*.ts", + "test": "jest" }, "devDependencies": { "@jest/globals": "^29.7.0", diff --git a/src/vector2d.test.ts b/src/vector2d.test.ts index 4d81c7c..7f803cc 100644 --- a/src/vector2d.test.ts +++ b/src/vector2d.test.ts @@ -120,11 +120,11 @@ describe("Vector2D", () => { expect(result.getY()).toBeCloseTo(1); }); - test('lerp interpolates correctly', () => { + test("lerp interpolates correctly", () => { const vector1 = new Vector2D(0, 0); const vector2 = new Vector2D(10, 10); const result = vector1.lerp(vector2, 0.5); expect(result.getX()).toBe(5); expect(result.getY()).toBe(5); -}); + }); }); diff --git a/src/vector2d.ts b/src/vector2d.ts index 4aaf2c9..1030ded 100644 --- a/src/vector2d.ts +++ b/src/vector2d.ts @@ -2,14 +2,32 @@ export class Vector2D { private x: number; private y: number; + constructor(); + /** + * Creates a new vector with coordinates of provided Vector2D. + * @param {Vector2D} vec - The x-coordinate. + */ + constructor(vec: Vector2D); /** * Creates a new vector with coordinates (x, y). - * @param {number} x - The x-coordinate. - * @param {number} y - The y-coordinate. + * @param {number} a - The x-coordinate. + * @param {number} b - The y-coordinate. */ - constructor(x: number = 0, y: number = 0) { - this.x = x; - this.y = y; + constructor(a: number, b: number); + + constructor(a?: number | Vector2D, b?: number) { + if (a === undefined && b === undefined) { + this.x = this.y = 0; + return; + } + + if (a instanceof Vector2D) { + this.x = a.x ?? 0; + this.y = a.y ?? 0; + } else { + this.x = a ?? 0; + this.y = b ?? 0; + } } /** @@ -130,7 +148,7 @@ export class Vector2D { * @returns {Vector2D} The cloned vector. */ clone(): Vector2D { - return new Vector2D(this.x, this.y); + return new Vector2D(this); } /**