@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
92 lines • 6.44 kB
JavaScript
import { padColOfNumbers } from "./../debug/index.js";
import { mat2 } from "gl-matrix";
import { TgdMat3 } from "./mat3.js";
import { TgdMat4 } from "./mat4.js";
import { TgdVec3 } from "./vec3.js";
import { TgdVec4 } from "./vec4.js";
/**
* Column-first 2x2 matrix.
*
* - `m10` means row 2 and column 1 (__A__).
*
* That's why is better to access members through the accessor `m00`, `m01`, etc.
*/
export class TgdMat2 extends Float32Array {
constructor(m00 = 1, m10 = 0, m01 = 0, m11 = 1) {
if (typeof m00 === "number" && typeof m10 === "number") {
super([m00, m10, m01, m11]);
}
else if ((m00 instanceof TgdVec3 || m00 instanceof TgdVec4) &&
(m10 instanceof TgdVec3 || m10 instanceof TgdVec4)) {
const col1 = m00;
const col2 = m10;
// prettier-ignore
super([
col1.x, col1.y,
col2.x, col2.y,
]);
}
else if (m00 instanceof TgdMat2 || m00 instanceof TgdMat3 || m00 instanceof TgdMat4) {
const mat = m00;
super([mat.m00, mat.m10, mat.m01, mat.m11]);
}
else {
// eslint-disable-next-line prefer-rest-params
console.error("[TgdMat3]", arguments);
throw new Error("Invalid TgdMat3 initialization!");
}
}
multiply(mat) {
mat2.multiply(this, this, mat);
return this;
}
transpose() {
const temporary = this.m10;
this.m10 = this.m01;
this.m01 = temporary;
return this;
}
scale(factor) {
this[0] *= factor;
this[1] *= factor;
this[2] *= factor;
this[3] *= factor;
return this;
}
get m00() {
return this[IDX_m00];
}
set m00(v) {
this[IDX_m00] = v;
}
get m10() {
return this[IDX_m10];
}
set m10(v) {
this[IDX_m10] = v;
}
get m01() {
return this[IDX_m01];
}
set m01(v) {
this[IDX_m01] = v;
}
get m11() {
return this[IDX_m11];
}
set m11(v) {
this[IDX_m11] = v;
}
debug(caption = "Mat3") {
const row0 = padColOfNumbers([this.m00, this.m01]);
const row1 = padColOfNumbers([this.m10, this.m11]);
console.debug(caption, this.slice());
console.debug(" ", row0.join(" | "));
console.debug(" ", row1.join(" | "));
}
}
const IDX_m00 = 0;
const IDX_m10 = 1;
const IDX_m01 = 2;
const IDX_m11 = 3;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRoL21hdDIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM1QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUVoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFaEM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLE9BQVEsU0FBUSxZQUFZO0lBS3JDLFlBQ0ksTUFBMEUsQ0FBQyxFQUMzRSxNQUE0QyxDQUFDLEVBQzdDLEdBQUcsR0FBRyxDQUFDLEVBQ1AsR0FBRyxHQUFHLENBQUM7UUFFUCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNyRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQy9CLENBQUM7YUFBTSxJQUNILENBQUMsR0FBRyxZQUFZLE9BQU8sSUFBSSxHQUFHLFlBQVksT0FBTyxDQUFDO1lBQ2xELENBQUMsR0FBRyxZQUFZLE9BQU8sSUFBSSxHQUFHLFlBQVksT0FBTyxDQUFDLEVBQ3BELENBQUM7WUFDQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUE7WUFDaEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFBO1lBQ2hCLGtCQUFrQjtZQUNsQixLQUFLLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDZCxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2pCLENBQUMsQ0FBQTtRQUNOLENBQUM7YUFBTSxJQUFJLEdBQUcsWUFBWSxPQUFPLElBQUksR0FBRyxZQUFZLE9BQU8sSUFBSSxHQUFHLFlBQVksT0FBTyxFQUFFLENBQUM7WUFDcEYsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFBO1lBQ2YsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDL0MsQ0FBQzthQUFNLENBQUM7WUFDSiw4Q0FBOEM7WUFDOUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUE7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO1FBQ3RELENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQVk7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQzlCLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFBO1FBQzFCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQTtRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQTtRQUNwQixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBYztRQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUE7UUFDakIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQTtRQUNqQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFBO1FBQ2pCLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELElBQUksR0FBRztRQUNILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxDQUFTO1FBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNyQixDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDeEIsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLENBQVM7UUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3JCLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDSCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN4QixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsQ0FBUztRQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDckIsQ0FBQztJQUVELElBQUksR0FBRztRQUNILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxDQUFTO1FBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNyQixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDbEQsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUVsRCxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUNwQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQzFDLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQTtBQUNqQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUE7QUFDakIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFBO0FBQ2pCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQSJ9