2023-11-08 15:45:25 +00:00
|
|
|
export default class Vec3 {
|
2023-04-10 14:42:14 +01:00
|
|
|
public x:number;
|
|
|
|
public y:number;
|
|
|
|
public z:number;
|
|
|
|
|
2023-11-02 08:31:43 +00:00
|
|
|
public constructor(x?:Vec3 | number, y?:number, z?:number) {
|
2023-04-10 14:42:14 +01:00
|
|
|
if (typeof(x) === "number" && typeof(y) === "number" && typeof(z) === "number") {
|
|
|
|
this.x = x;
|
|
|
|
this.y = y;
|
|
|
|
this.z = z;
|
|
|
|
} else if (typeof(x) === "number" && typeof(y) !== "number" && typeof(z) !== "number") {
|
|
|
|
this.x = x;
|
|
|
|
this.y = x;
|
|
|
|
this.z = x;
|
2023-11-02 08:31:43 +00:00
|
|
|
} else if (x instanceof Vec3) {
|
|
|
|
this.x = x.x;
|
|
|
|
this.y = x.y;
|
|
|
|
this.z = x.z;
|
2023-04-10 14:42:14 +01:00
|
|
|
} else {
|
|
|
|
this.x = this.y = this.z = 0;
|
|
|
|
}
|
|
|
|
}
|
2023-04-10 21:52:30 +01:00
|
|
|
|
2023-11-05 10:56:28 +00:00
|
|
|
public get isZero() {
|
|
|
|
return this.x === 0 && this.y === 0 && this.z === 0;
|
|
|
|
}
|
|
|
|
|
2023-11-02 08:31:43 +00:00
|
|
|
public set(x?:Vec3 | number, y?:number, z?:number) {
|
|
|
|
if (x instanceof Vec3) {
|
|
|
|
this.x = x.x;
|
|
|
|
this.y = x.y;
|
|
|
|
this.z = x.z;
|
|
|
|
} else if (typeof(x) === "number" && typeof(y) === "number" && typeof(z) === "number") {
|
|
|
|
this.x = x;
|
|
|
|
this.y = y;
|
|
|
|
this.z = z;
|
|
|
|
} else {
|
2023-11-09 16:30:40 +00:00
|
|
|
throw new Error(`Invalid arguments for Vec3.set : ${typeof(x)}, ${typeof(y)}, ${typeof(z)}`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
add(x:Vec3 | number, y?:number, z?:number) {
|
|
|
|
if (x instanceof Vec3) {
|
|
|
|
this.set(this.x + x.x, this.y + x.y, this.z + x.z);
|
|
|
|
} else if (typeof(x) === "number" && typeof(y) === "number" && typeof(z) === "number") {
|
|
|
|
this.set(this.x + x, this.y + y, this.z + z);
|
|
|
|
} else {
|
|
|
|
throw new Error(`Invalid arguments for Vec3.add : ${typeof(x)}, ${typeof(y)}, ${typeof(z)}`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-29 16:32:07 +00:00
|
|
|
sub(x:Vec3 | number, y?:number, z?:number) {
|
|
|
|
if (x instanceof Vec3) {
|
|
|
|
this.set(this.x - x.x, this.y - x.y, this.z - x.z);
|
|
|
|
} else if (typeof(x) === "number" && typeof(y) === "number" && typeof(z) === "number") {
|
|
|
|
this.set(this.x - x, this.y - y, this.z - z);
|
|
|
|
} else {
|
|
|
|
throw new Error(`Invalid arguments for Vec3.add : ${typeof(x)}, ${typeof(y)}, ${typeof(z)}`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-11-09 16:30:40 +00:00
|
|
|
mult(x:Vec3 | number, y?:number, z?:number) {
|
|
|
|
if (x instanceof Vec3) {
|
|
|
|
this.set(this.x * x.x, this.y * x.y, this.z * x.z);
|
|
|
|
} else if (typeof(x) === "number" && typeof(y) === "number" && typeof(z) === "number") {
|
|
|
|
this.set(this.x * x, this.y * y, this.z * z);
|
|
|
|
} else {
|
|
|
|
throw new Error(`Invalid arguments for Vec3.mult : ${typeof(x)}, ${typeof(y)}, ${typeof(z)}`);
|
2023-11-02 08:31:43 +00:00
|
|
|
}
|
2023-04-10 21:52:30 +01:00
|
|
|
}
|
2024-02-16 09:34:02 +00:00
|
|
|
|
|
|
|
toAbs() {
|
|
|
|
return new Vec3(Math.round(this.x * 32), Math.round(this.y * 32), Math.round(this.z * 32));
|
|
|
|
}
|
2024-11-25 22:28:33 +00:00
|
|
|
|
|
|
|
toString() {
|
|
|
|
return `Vec3(${this.x},${this.y},${this.z})`;
|
|
|
|
}
|
2023-04-10 14:42:14 +01:00
|
|
|
}
|