UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

94 lines 6.45 kB
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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