Skip to content

Commit 9fbb4c6

Browse files
committed
refactor: Changed Vector and Matrix class to 2D and changed in every math component
1 parent 21eae23 commit 9fbb4c6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+766
-747
lines changed

src/core/graphics/Display.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { GameError } from "@/core/GameError";
2-
import { Vector } from "@/core/math/geometry/Vector";
2+
import { Vector2D } from "@/core/math/geometry/Vector2D";
33
import { Dimension } from "@/core/math/geometry/Dimension";
44
import { Graphics } from "@/core/graphics/rendering/Graphics";
55
import { DisplayOrientationType } from "@/core/graphics/DisplayOrientation";
@@ -16,13 +16,13 @@ export interface DisplayConfiguration {
1616
export class Display {
1717
private readonly viewport: HTMLElement;
1818
private readonly viewportDimension: Dimension;
19-
private readonly viewportOffset: Vector;
20-
private readonly viewportCenter: Vector;
19+
private readonly viewportOffset: Vector2D;
20+
private readonly viewportCenter: Vector2D;
2121

2222
private readonly layers: Map<string, Graphics>;
2323

2424
private readonly dimension: Dimension;
25-
private readonly center: Vector;
25+
private readonly center: Vector2D;
2626

2727
private orientationLocked: boolean;
2828

@@ -49,9 +49,9 @@ export class Display {
4949
height: parseFloat(this.viewport.style.height) * devicePixelRatio
5050
};
5151

52-
this.viewportOffset = new Vector(this.viewport.offsetLeft * devicePixelRatio, this.viewport.offsetTop * devicePixelRatio);
52+
this.viewportOffset = new Vector2D(this.viewport.offsetLeft * devicePixelRatio, this.viewport.offsetTop * devicePixelRatio);
5353

54-
this.viewportCenter = new Vector(this.viewportOffset.x + this.viewportDimension.width / 2, this.viewportOffset.y + this.viewportDimension.height / 2);
54+
this.viewportCenter = new Vector2D(this.viewportOffset.x + this.viewportDimension.width / 2, this.viewportOffset.y + this.viewportDimension.height / 2);
5555

5656
this.layers = new Map<string, Graphics>();
5757

@@ -66,7 +66,7 @@ export class Display {
6666
height: screen.height * devicePixelRatio
6767
};
6868

69-
this.center = new Vector(this.dimension.width / 2, this.dimension.height / 2);
69+
this.center = new Vector2D(this.dimension.width / 2, this.dimension.height / 2);
7070

7171
this.orientationLocked = false;
7272
}
@@ -315,19 +315,19 @@ export class Display {
315315
return this.viewportDimension;
316316
}
317317

318-
public getViewportOffset(): Vector {
318+
public getViewportOffset(): Vector2D {
319319
return this.viewportOffset;
320320
}
321321

322-
public getViewportCenter(): Vector {
322+
public getViewportCenter(): Vector2D {
323323
return this.viewportCenter;
324324
}
325325

326326
public getDimension(): Dimension {
327327
return this.dimension;
328328
}
329329

330-
public getCenter(): Vector {
330+
public getCenter(): Vector2D {
331331
return this.center;
332332
}
333333

src/core/graphics/components/Label.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Dimension } from "@/core/math/geometry/Dimension";
2-
import { Vector } from "@/core/math/geometry/Vector";
2+
import { Vector2D } from "@/core/math/geometry/Vector2D";
33
import { FontStyle } from "@/core/graphics/styles/text/FontStyle";
44
import { TextStyle } from "@/core/graphics/styles/text/TextStyle";
55

@@ -16,15 +16,15 @@ export interface LabelSettings {
1616

1717
export class Label {
1818
private readonly text: string;
19-
private readonly position: Vector;
19+
private readonly position: Vector2D;
2020
private readonly dimension: Dimension;
2121

2222
private readonly fontStyle?: FontStyle;
2323
private readonly textStyle?: TextStyle;
2424

2525
constructor(settings: LabelSettings) {
2626
this.text = settings.text;
27-
this.position = new Vector(settings.x, settings.y);
27+
this.position = new Vector2D(settings.x, settings.y);
2828

2929
this.dimension = {
3030
width: settings.width,
@@ -39,7 +39,7 @@ export class Label {
3939
return this.text;
4040
}
4141

42-
public getPosition(): Vector {
42+
public getPosition(): Vector2D {
4343
return this.position;
4444
}
4545

src/core/input/Input.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Vector } from "@/core/math/geometry/Vector";
1+
import { Vector2D } from "@/core/math/geometry/Vector2D";
22
import { InputChannel } from "@/core/input/InputChannel";
33
import { GamepadInputType } from "@/core/input/gamepad/GamepadInput";
44
import { KeyboardInputType } from "@/core/input/keyboard/KeyboardInput";
@@ -23,8 +23,8 @@ export interface Input {
2323
export interface Pointer {
2424
identifier: number;
2525
position: {
26-
current: Vector;
27-
previous: Vector;
26+
current: Vector2D;
27+
previous: Vector2D;
2828
};
2929
state: Input;
3030
}

src/core/input/mouse/MouseDevice.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Vector } from "@/core/math/geometry/Vector";
1+
import { Vector2D } from "@/core/math/geometry/Vector2D";
22
import { Input, Pointer } from "@/core/input/Input";
33
import { MouseInput, MouseInputType } from "@/core/input/mouse/MouseInput";
44
import { Display } from "@/core/graphics/Display";
@@ -94,8 +94,8 @@ export class MouseDevice {
9494
return {
9595
identifier: -1,
9696
position: {
97-
current: new Vector(0, 0),
98-
previous: new Vector(0, 0)
97+
current: new Vector2D(0, 0),
98+
previous: new Vector2D(0, 0)
9999
},
100100
state: {
101101
current: false,
@@ -132,7 +132,7 @@ export class MouseDevice {
132132
const viewportX = x - offset.x;
133133
const viewportY = y - offset.y;
134134

135-
pointer.position.current = new Vector(viewportX, viewportY);
135+
pointer.position.current = new Vector2D(viewportX, viewportY);
136136
}
137137

138138
private cancelEvent(event: Event) {

src/core/input/touchpad/TouchpadDevice.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { Matrix } from "@/core/math/geometry/Matrix";
2-
import { Vector } from "@/core/math/geometry/Vector";
1+
import { Matrix } from "@/core/math/geometry/Matrix2D";
2+
import { Vector2D } from "@/core/math/geometry/Vector2D";
33
import { Input, Pointer } from "@/core/input/Input";
44
import { SwipeInput, SwipeInputType, ofAngle } from "@/core/input/touchpad/SwipeInput";
55
import { TouchInput, TouchInputType } from "@/core/input/touchpad/TouchInput";
@@ -110,8 +110,8 @@ export class TouchpadDevice {
110110
return {
111111
identifier: -1,
112112
position: {
113-
current: new Vector(0, 0),
114-
previous: new Vector(0, 0)
113+
current: new Vector2D(0, 0),
114+
previous: new Vector2D(0, 0)
115115
},
116116
state: {
117117
current: false,
@@ -148,7 +148,7 @@ export class TouchpadDevice {
148148
const viewportX = x - offset.x;
149149
const viewportY = y - offset.y;
150150

151-
pointer.position.current = new Vector(viewportX, viewportY);
151+
pointer.position.current = new Vector2D(viewportX, viewportY);
152152
}
153153

154154
private cancelEvent(event: Event) {

src/core/math/curves/BezierCurve.ts

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Vector } from "@/core/math/geometry/Vector";
1+
import { Vector2D } from "@/core/math/geometry/Vector2D";
22
import { Rectangle } from "@/core/math/geometry/Rectangle";
33
import { Line } from "@/core/math/geometry/Line";
44

@@ -8,12 +8,12 @@ import { Line } from "@/core/math/geometry/Line";
88
* animations, and UI transitions in games.
99
*/
1010
export class BezierCurve {
11-
private readonly controlPoints: Vector[];
11+
private readonly controlPoints: Vector2D[];
1212
private readonly degree: number;
1313
private cachedLength?: number;
14-
private cachedLookupTable?: Vector[];
14+
private cachedLookupTable?: Vector2D[];
1515

16-
constructor(controlPoints: Vector[]) {
16+
constructor(controlPoints: Vector2D[]) {
1717
if (controlPoints.length < 2) {
1818
throw new Error("BezierCurve requires at least 2 control points");
1919
}
@@ -28,21 +28,21 @@ export class BezierCurve {
2828
/**
2929
* Creates a quadratic Bezier curve (3 control points)
3030
*/
31-
public static quadratic(start: Vector, control: Vector, end: Vector): BezierCurve {
31+
public static quadratic(start: Vector2D, control: Vector2D, end: Vector2D): BezierCurve {
3232
return new BezierCurve([start, control, end]);
3333
}
3434

3535
/**
3636
* Creates a cubic Bezier curve (4 control points)
3737
*/
38-
public static cubic(start: Vector, control1: Vector, control2: Vector, end: Vector): BezierCurve {
38+
public static cubic(start: Vector2D, control1: Vector2D, control2: Vector2D, end: Vector2D): BezierCurve {
3939
return new BezierCurve([start, control1, control2, end]);
4040
}
4141

4242
/**
4343
* Creates a linear Bezier curve (straight line between 2 points)
4444
*/
45-
public static linear(start: Vector, end: Vector): BezierCurve {
45+
public static linear(start: Vector2D, end: Vector2D): BezierCurve {
4646
return new BezierCurve([start, end]);
4747
}
4848

@@ -51,7 +51,7 @@ export class BezierCurve {
5151
* @param t - Parameter value between 0 and 1
5252
* @returns Point on the curve at t
5353
*/
54-
public getPoint(t: number): Vector {
54+
public getPoint(t: number): Vector2D {
5555
t = Math.max(0, Math.min(1, t)); // Clamp to [0, 1]
5656

5757
if (this.degree === 1) {
@@ -69,7 +69,7 @@ export class BezierCurve {
6969
/**
7070
* Gets the tangent (direction) vector at parameter t
7171
*/
72-
public getTangent(t: number): Vector {
72+
public getTangent(t: number): Vector2D {
7373
t = Math.max(0, Math.min(1, t));
7474
const epsilon = 0.0001;
7575

@@ -82,15 +82,15 @@ export class BezierCurve {
8282
/**
8383
* Gets the normal (perpendicular) vector at parameter t
8484
*/
85-
public getNormal(t: number): Vector {
85+
public getNormal(t: number): Vector2D {
8686
const tangent = this.getTangent(t);
87-
return new Vector(-tangent.y, tangent.x); // 2D perpendicular
87+
return new Vector2D(-tangent.y, tangent.x); // 2D perpendicular
8888
}
8989

9090
/**
9191
* Gets the derivative (velocity) at parameter t
9292
*/
93-
public getDerivative(t: number): Vector {
93+
public getDerivative(t: number): Vector2D {
9494
t = Math.max(0, Math.min(1, t));
9595

9696
if (this.degree === 1) {
@@ -149,7 +149,7 @@ export class BezierCurve {
149149
* @param distance - Distance from start of curve
150150
* @returns Point at that distance, or null if distance exceeds curve length
151151
*/
152-
public getPointAtDistance(distance: number): Vector | null {
152+
public getPointAtDistance(distance: number): Vector2D | null {
153153
const totalLength = this.getLength();
154154
if (distance < 0 || distance > totalLength) {
155155
return null;
@@ -173,14 +173,14 @@ export class BezierCurve {
173173
};
174174
}
175175

176-
const leftPoints: Vector[] = [];
177-
const rightPoints: Vector[] = [];
176+
const leftPoints: Vector2D[] = [];
177+
const rightPoints: Vector2D[] = [];
178178

179179
let points = [...this.controlPoints];
180180
leftPoints.push(points[0]);
181181

182182
for (let i = 0; i < this.degree; i++) {
183-
const newPoints: Vector[] = [];
183+
const newPoints: Vector2D[] = [];
184184
for (let j = 0; j < points.length - 1; j++) {
185185
newPoints.push(points[j].interpolate(points[j + 1], t));
186186
}
@@ -192,7 +192,7 @@ export class BezierCurve {
192192
rightPoints.unshift(points[points.length - 1]);
193193

194194
for (let i = 0; i < this.degree; i++) {
195-
const newPoints: Vector[] = [];
195+
const newPoints: Vector2D[] = [];
196196
for (let j = 0; j < points.length - 1; j++) {
197197
newPoints.push(points[j].interpolate(points[j + 1], t));
198198
}
@@ -209,8 +209,8 @@ export class BezierCurve {
209209
/**
210210
* Gets evenly spaced points along the curve
211211
*/
212-
public getPoints(count: number): Vector[] {
213-
const points: Vector[] = [];
212+
public getPoints(count: number): Vector2D[] {
213+
const points: Vector2D[] = [];
214214
for (let i = 0; i <= count; i++) {
215215
const t = i / count;
216216
points.push(this.getPoint(t));
@@ -245,7 +245,7 @@ export class BezierCurve {
245245
/**
246246
* Finds the closest point on the curve to a given point
247247
*/
248-
public getClosestPoint(point: Vector, samples: number = 100): { point: Vector; t: number; distance: number } {
248+
public getClosestPoint(point: Vector2D, samples: number = 100): { point: Vector2D; t: number; distance: number } {
249249
let closestPoint = this.getPoint(0);
250250
let closestT = 0;
251251
let closestDistance = point.distanceBetween(closestPoint);
@@ -268,29 +268,29 @@ export class BezierCurve {
268268
/**
269269
* Checks if a point is near the curve within a tolerance
270270
*/
271-
public containsPoint(point: Vector, tolerance: number = 1): boolean {
271+
public containsPoint(point: Vector2D, tolerance: number = 1): boolean {
272272
const closest = this.getClosestPoint(point);
273273
return closest.distance <= tolerance;
274274
}
275275

276276
/**
277277
* Gets all control points
278278
*/
279-
public getControlPoints(): Vector[] {
279+
public getControlPoints(): Vector2D[] {
280280
return [...this.controlPoints];
281281
}
282282

283283
/**
284284
* Gets the start point of the curve
285285
*/
286-
public getStart(): Vector {
286+
public getStart(): Vector2D {
287287
return this.controlPoints[0];
288288
}
289289

290290
/**
291291
* Gets the end point of the curve
292292
*/
293-
public getEnd(): Vector {
293+
public getEnd(): Vector2D {
294294
return this.controlPoints[this.controlPoints.length - 1];
295295
}
296296

@@ -320,12 +320,12 @@ export class BezierCurve {
320320

321321
// Private helper methods
322322

323-
private evaluateLinear(t: number): Vector {
323+
private evaluateLinear(t: number): Vector2D {
324324
const [p0, p1] = this.controlPoints;
325325
return p0.interpolate(p1, t);
326326
}
327327

328-
private evaluateQuadratic(t: number): Vector {
328+
private evaluateQuadratic(t: number): Vector2D {
329329
const [p0, p1, p2] = this.controlPoints;
330330
const oneMinusT = 1 - t;
331331
const oneMinusTSquared = oneMinusT * oneMinusT;
@@ -335,10 +335,10 @@ export class BezierCurve {
335335
const y = oneMinusTSquared * p0.y + 2 * oneMinusT * t * p1.y + tSquared * p2.y;
336336
const z = oneMinusTSquared * p0.z + 2 * oneMinusT * t * p1.z + tSquared * p2.z;
337337

338-
return new Vector(x, y, z);
338+
return new Vector2D(x, y, z);
339339
}
340340

341-
private evaluateCubic(t: number): Vector {
341+
private evaluateCubic(t: number): Vector2D {
342342
const [p0, p1, p2, p3] = this.controlPoints;
343343
const oneMinusT = 1 - t;
344344
const oneMinusTCubed = oneMinusT * oneMinusT * oneMinusT;
@@ -350,15 +350,15 @@ export class BezierCurve {
350350
const y = oneMinusTCubed * p0.y + 3 * oneMinusTSquared * t * p1.y + 3 * oneMinusT * tSquared * p2.y + tCubed * p3.y;
351351
const z = oneMinusTCubed * p0.z + 3 * oneMinusTSquared * t * p1.z + 3 * oneMinusT * tSquared * p2.z + tCubed * p3.z;
352352

353-
return new Vector(x, y, z);
353+
return new Vector2D(x, y, z);
354354
}
355355

356-
private deCasteljau(points: Vector[], t: number): Vector {
356+
private deCasteljau(points: Vector2D[], t: number): Vector2D {
357357
if (points.length === 1) {
358358
return points[0];
359359
}
360360

361-
const newPoints: Vector[] = [];
361+
const newPoints: Vector2D[] = [];
362362
for (let i = 0; i < points.length - 1; i++) {
363363
newPoints.push(points[i].interpolate(points[i + 1], t));
364364
}

0 commit comments

Comments
 (0)