@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
94 lines • 6.45 kB
JavaScript
import { padColOfNumbers } from "./../debug/index.js";
import { TgdVec3 } from "./vec3.js";
import { TgdVec4 } from "./vec4.js";
import { TgdMat4 } from "./mat4.js";
import { mat2 } from "gl-matrix";
import { TgdMat3 } from "./mat3.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.log(caption, this.slice());
console.log(" ", row0.join(" | "));
console.log(" ", row1.join(" | "));
}
}
const IDX_m00 = 0;
const IDX_m10 = 1;
const IDX_m01 = 2;
const IDX_m11 = 3;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRoL21hdDIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRWhDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFaEM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLE9BQVEsU0FBUSxZQUFZO0lBUXJDLFlBQ0ksTUFPZ0IsQ0FBQyxFQUNqQixNQUE0QyxDQUFDLEVBQzdDLE1BQWMsQ0FBQyxFQUNmLE1BQWMsQ0FBQztRQUVmLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3JELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDL0IsQ0FBQzthQUFNLElBQ0gsQ0FBQyxHQUFHLFlBQVksT0FBTyxJQUFJLEdBQUcsWUFBWSxPQUFPLENBQUM7WUFDbEQsQ0FBQyxHQUFHLFlBQVksT0FBTyxJQUFJLEdBQUcsWUFBWSxPQUFPLENBQUMsRUFDcEQsQ0FBQztZQUNDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQTtZQUNoQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUE7WUFDaEIsa0JBQWtCO1lBQ2xCLEtBQUssQ0FBQztnQkFDRixJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNkLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENB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