@tolokoban/tgd 2.0.26 → 2.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,16 @@
1
+ import { TgdTransfo } from "../math";
2
+ import { TgdPainterNodeChild } from "../painter";
3
+ import { TgdCamera } from "./camera";
4
+ /**
5
+ * This node holds a camera and move it according to its parent.
6
+ *
7
+ * Once in such a node, a camera cannot be moved directly.
8
+ */
9
+ export declare class TgdCameraNode implements TgdPainterNodeChild {
10
+ camera: TgdCamera;
11
+ readonly transfo: TgdTransfo;
12
+ constructor(camera: TgdCamera);
13
+ paint(_time: number, _delay: number): void;
14
+ delete(): void;
15
+ }
16
+ //# sourceMappingURL=camera-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera-node.d.ts","sourceRoot":"","sources":["../../src/camera/camera-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC;;;;GAIG;AACH,qBAAa,aAAc,YAAW,mBAAmB;IAGlC,MAAM,EAAE,SAAS;IAFpC,SAAgB,OAAO,aAAmB;gBAEvB,MAAM,EAAE,SAAS;IAEpC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1C,MAAM,IAAI,IAAI;CACjB"}
@@ -0,0 +1,17 @@
1
+ import { TgdTransfo } from "./../math/index.js";
2
+ /**
3
+ * This node holds a camera and move it according to its parent.
4
+ *
5
+ * Once in such a node, a camera cannot be moved directly.
6
+ */
7
+ export class TgdCameraNode {
8
+ constructor(camera) {
9
+ this.camera = camera;
10
+ this.transfo = new TgdTransfo();
11
+ }
12
+ paint(_time, _delay) {
13
+ this.camera.fromTransfo(this.transfo.matrix);
14
+ }
15
+ delete() { }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2FtZXJhL2NhbWVyYS1ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFJdEM7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBR3RCLFlBQW1CLE1BQWlCO1FBQWpCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFGcEIsWUFBTyxHQUFHLElBQUksVUFBVSxFQUFFLENBQUE7SUFFSCxDQUFDO0lBRXhDLEtBQUssQ0FBQyxLQUFhLEVBQUUsTUFBYztRQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFRCxNQUFNLEtBQVUsQ0FBQztDQUNwQiJ9
@@ -9,6 +9,7 @@ export declare class TgdVec3 extends Float32Array {
9
9
  static newFrom([x, y, z]: TgdVec3 | TgdVec4 | ArrayNumber3 | ArrayNumber4): TgdVec3;
10
10
  static newFromMix([x1, y1, z1]: TgdVec3 | TgdVec4 | ArrayNumber3 | ArrayNumber4, [x2, y2, z2]: TgdVec3 | TgdVec4 | ArrayNumber3 | ArrayNumber4, a?: number): TgdVec3;
11
11
  static distance(from: TgdVec3 | TgdVec4, to: TgdVec3 | TgdVec4): number;
12
+ static center(points: Array<TgdVec3 | ArrayNumber3>): TgdVec3;
12
13
  constructor();
13
14
  constructor(x: Readonly<TgdVec3 | ArrayNumber3>);
14
15
  constructor(x: number);
@@ -1 +1 @@
1
- {"version":3,"file":"vec3.d.ts","sourceRoot":"","sources":["../../src/math/vec3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vec3.d.ts","sourceRoot":"","sources":["../../src/math/vec3.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,16 @@ export class TgdVec3 extends Float32Array {
17
17
  const z = to.z - from.z;
18
18
  return Math.hypot(x, y, z);
19
19
  }
20
+ static center(points) {
21
+ const center = new TgdVec3();
22
+ if (points.length === 0)
23
+ return center;
24
+ for (const point of points) {
25
+ center.add(point);
26
+ }
27
+ center.scale(1 / points.length);
28
+ return center;
29
+ }
20
30
  constructor(x = 0, y = 0, z = 0) {
21
31
  super(3);
22
32
  if (typeof x !== "number") {
@@ -217,4 +227,4 @@ export class TgdVec3 extends Float32Array {
217
227
  TgdVec3.X = new TgdVec3(1, 0, 0);
218
228
  TgdVec3.Y = new TgdVec3(0, 1, 0);
219
229
  TgdVec3.Z = new TgdVec3(0, 0, 1);
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjMy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRoL3ZlYzMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFRLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBSzFDLE1BQU0sT0FBTyxPQUFRLFNBQVEsWUFBWTtJQUtyQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBSUw7UUFDZCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQ2IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBa0QsRUFDN0QsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBa0QsRUFDN0QsQ0FBQyxHQUFHLEdBQUc7UUFFUCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUN6QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDekIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQXVCLEVBQUUsRUFBcUI7UUFDMUQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN2QixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQU9ELFlBQ0ksSUFBK0MsQ0FBQyxFQUNoRCxJQUFZLENBQUMsRUFDYixJQUFZLENBQUM7UUFFYixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDUixJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDYixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNiLE9BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDVixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNWLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2QsQ0FBQztJQUVELEtBQUs7UUFDRCxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBc0IsRUFBRSxLQUFLLEdBQUcsR0FBRztRQUNuQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDdEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUN0QyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ3RDLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFxQztRQUN6QyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUE7UUFDckIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUM5QixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBQzlCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFDOUIsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQXFDLEVBQUUsT0FBTyxHQUFHLElBQUk7UUFDekQsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFBO1FBQ3JCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUNoRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFDaEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBQ2hELE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FDUixJQUFzQyxFQUN0QyxjQUFzQjtRQUV0Qix5REFBeUQ7UUFDekQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNsQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ2xDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQTtRQUN6QixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUE7UUFDekIsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFDdkMsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFDaEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDckMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNyQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ3JDLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLE1BQW1DO1FBQzNDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQTtRQUN4QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFBO1FBQ3pELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUE7UUFDekQsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQTtRQUN6RCxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxlQUFlLENBQUMsVUFBNEM7UUFDeEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQzFDLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBQyxHQUErQztRQUNoRCxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUE7UUFDckIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDVixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNWLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ1YsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsR0FBK0M7UUFDeEQsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNYLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELE9BQU8sQ0FDSCxTQUE0QixFQUM1QixTQUE0QixFQUM1QixDQUFTO1FBRVQsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFBO1FBQzlCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQTtRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQ2IsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQ3JCLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUNyQixVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDeEIsQ0FBQTtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWSxDQUFDLEVBQUUsSUFBWSxDQUFDLEVBQUUsSUFBWSxDQUFDO1FBQzdDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDWCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ1gsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNYLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELHFCQUFxQixDQUNqQixNQUFlLEVBQ2YsbUJBQTRCO1FBRTVCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQTtRQUN6QixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUE7UUFDM0IsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsbUJBQW1CLENBQUE7UUFDeEMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDM0QsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFDdkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFDdkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFDdkIsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtRQUNqQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBQ2pCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEIsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLEtBQWE7UUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFBO0lBQ25CLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNsQixDQUFDO0lBQ0QsSUFBSSxDQUFDLENBQUMsS0FBYTtRQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUE7SUFDbkIsQ0FBQztJQUVELElBQUksQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xCLENBQUM7SUFDRCxJQUFJLENBQUMsQ0FBQyxLQUFhO1FBQ2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUNuQixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQUcsT0FBNEQ7UUFDL0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUN4QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUE7WUFDckIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNaLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDWixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2hCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBc0IsRUFBRSxLQUFhO1FBQzlDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUN4QixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDeEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFBO1FBQ3hCLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUErQztRQUNwRCxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqQixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBYztRQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUE7UUFDakIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQTtRQUNqQixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBK0M7UUFDL0MsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFlBQVksR0FDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM3RCxJQUFJLFlBQVksS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFbkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUErQztRQUNqRCxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUE7UUFDekIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtRQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBQzNCLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNGLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQzdCLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTTtRQUNsQixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUE7UUFDeEIsTUFBTSxHQUFHLEdBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN0RCxPQUFPLENBQUMsR0FBRyxDQUNQLEdBQUcsT0FBTyxNQUFNLEVBQ2hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ2YsWUFBWSxFQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDdEIsQ0FBQTtJQUNMLENBQUM7O0FBbFJNLFNBQUMsR0FBc0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUMzQyxTQUFDLEdBQXNCLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDM0MsU0FBQyxHQUFzQixJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBIn0=
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjMy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRoL3ZlYzMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFRLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBSzFDLE1BQU0sT0FBTyxPQUFRLFNBQVEsWUFBWTtJQUtyQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBSUw7UUFDZCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQ2IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBa0QsRUFDN0QsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBa0QsRUFDN0QsQ0FBQyxHQUFHLEdBQUc7UUFFUCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUN6QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDekIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQXVCLEVBQUUsRUFBcUI7UUFDMUQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN2QixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBcUM7UUFDL0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtRQUM1QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFBO1FBRXRDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNyQixDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQy9CLE9BQU8sTUFBTSxDQUFBO0lBQ2pCLENBQUM7SUFPRCxZQUNJLElBQStDLENBQUMsRUFDaEQsSUFBWSxDQUFDLEVBQ2IsSUFBWSxDQUFDO1FBRWIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ1IsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNiLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDYixPQUFNO1FBQ1YsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ1YsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDVixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNkLENBQUM7SUFFRCxLQUFLO1FBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQXNCLEVBQUUsS0FBSyxHQUFHLEdBQUc7UUFDbkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ3RDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDdEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUN0QyxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBcUM7UUFDekMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFDOUIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUM5QixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBQzlCLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFxQyxFQUFFLE9BQU8sR0FBRyxJQUFJO1FBQ3pELE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtRQUNyQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFDaEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBQ2hELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUNoRCxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQ1IsSUFBc0MsRUFDdEMsY0FBc0I7UUFFdEIseURBQXlEO1FBQ3pELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDbEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNsQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUE7UUFDekIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFDaEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUN2QixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDckMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNyQyxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxNQUFtQztRQUMzQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUE7UUFDeEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQTtRQUN6RCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFBO1FBQ3pELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUE7UUFDekQsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQTRDO1FBQ3hELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUMxQyxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBK0M7UUFDaEQsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ1YsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDVixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNWLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLEdBQStDO1FBQ3hELE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtRQUNyQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDWCxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxPQUFPLENBQ0gsU0FBNEIsRUFDNUIsU0FBNEIsRUFDNUIsQ0FBUztRQUVULE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQTtRQUM5QixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUE7UUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUNiLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUNyQixVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFDckIsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQ3hCLENBQUE7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVksQ0FBQyxFQUFFLElBQVksQ0FBQyxFQUFFLElBQVksQ0FBQztRQUM3QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ1gsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNYLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDWCxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxxQkFBcUIsQ0FDakIsTUFBZSxFQUNmLG1CQUE0QjtRQUU1QixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUE7UUFDekIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFBO1FBQzNCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLG1CQUFtQixDQUFBO1FBQ3hDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBQzNELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBQ3ZCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBQ3ZCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFDakIsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtRQUNqQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQUVELElBQUksQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xCLENBQUM7SUFDRCxJQUFJLENBQUMsQ0FBQyxLQUFhO1FBQ2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUNuQixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEIsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLEtBQWE7UUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFBO0lBQ25CLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNsQixDQUFDO0lBQ0QsSUFBSSxDQUFDLENBQUMsS0FBYTtRQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUE7SUFDbkIsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFHLE9BQTREO1FBQy9ELEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFBO1lBQ3JCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDWixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ1osSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNoQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQXNCLEVBQUUsS0FBYTtRQUM5QyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDeEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUN4QixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBK0M7UUFDcEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakIsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQWM7UUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQTtRQUNqQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUE7UUFDakIsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQStDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakUsQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxZQUFZLEdBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDN0QsSUFBSSxZQUFZLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRW5DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRCxLQUFLLENBQUMsR0FBK0M7UUFDakQsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtRQUN4QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtRQUMzQixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUM3QixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU07UUFDbEIsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFBO1FBQ3hCLE1BQU0sR0FBRyxHQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FDUCxHQUFHLE9BQU8sTUFBTSxFQUNoQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNmLFlBQVksRUFDWixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3RCLENBQUE7SUFDTCxDQUFDOztBQTdSTSxTQUFDLEdBQXNCLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDM0MsU0FBQyxHQUFzQixJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQzNDLFNBQUMsR0FBc0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQSJ9
@@ -0,0 +1,55 @@
1
+ import { TgdPainter } from "../painter";
2
+ import { TgdTexture2D } from "../../texture";
3
+ export interface TgdPainterBackgroundOptions {
4
+ zoom: number;
5
+ x: number;
6
+ y: number;
7
+ z: number;
8
+ /**
9
+ * By default, we preserve the aspect ratio.
10
+ * But you can change `scaleX` and `scaleY` if you need
11
+ * another behavior.
12
+ */
13
+ scaleX: number;
14
+ /**
15
+ * By default, we preserve the aspect ratio.
16
+ * But you can change `scaleX` and `scaleY` if you need
17
+ * another behavior.
18
+ */
19
+ scaleY: number;
20
+ /**
21
+ * Defaults to `cover`.
22
+ * If you choose `contain`, the image will be totally visible
23
+ * and taking the maximum space.
24
+ */
25
+ mode: "cover" | "contain";
26
+ }
27
+ export declare class TgdPainterBackground extends TgdPainter {
28
+ private readonly context;
29
+ texture: TgdTexture2D;
30
+ private readonly program;
31
+ private readonly vao;
32
+ /**
33
+ * With a zoom of **1**, the image will have the smaller size to cover
34
+ * the whole scene.
35
+ */
36
+ zoom: number;
37
+ x: number;
38
+ y: number;
39
+ z: number;
40
+ mode: "cover" | "contain";
41
+ constructor(context: {
42
+ gl: WebGL2RenderingContext;
43
+ }, texture: TgdTexture2D, { x, y, z, zoom, scaleX, scaleY, mode, }?: Partial<TgdPainterBackgroundOptions>);
44
+ delete(): void;
45
+ paint(): void;
46
+ getScaleForCover(): {
47
+ scaleX: number;
48
+ scaleY: number;
49
+ };
50
+ getScaleForContain(): {
51
+ scaleX: number;
52
+ scaleY: number;
53
+ };
54
+ }
55
+ //# sourceMappingURL=background.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../../src/painter/background-with-depth/background.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAIvC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAM3C,MAAM,WAAW,2BAA2B;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC5B;AAED,qBAAa,oBAAqB,SAAQ,UAAU;IAiB5C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhBrB,OAAO,EAAE,YAAY,CAAA;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IAEpC;;;OAGG;IACI,IAAI,SAAI;IACR,CAAC,SAAI;IACL,CAAC,SAAI;IACL,CAAC,SAAI;IACL,IAAI,EAAE,OAAO,GAAG,SAAS,CAAU;gBAGrB,OAAO,EAAE;QAAE,EAAE,EAAE,sBAAsB,CAAA;KAAE,EACxD,OAAO,EAAE,YAAY,EACrB,EACI,CAAK,EACL,CAAK,EACL,CAAY,EACZ,IAAQ,EACR,MAAU,EACV,MAAU,EACV,IAAc,GACjB,GAAE,OAAO,CAAC,2BAA2B,CAAM;IAkChD,MAAM,IAAI,IAAI;IAKd,KAAK,IAAI,IAAI;IAkBb,gBAAgB;;;;IAchB,kBAAkB;;;;CAoBrB"}
@@ -0,0 +1,99 @@
1
+ import { TgdPainter } from "../painter.js";
2
+ import { TgdDataset } from "./../../dataset/dataset.js";
3
+ import { TgdVertexArray } from "./../../vao/index.js";
4
+ import { TgdProgram } from "./../../program/index.js";
5
+ import VERT from "./background.vert";
6
+ import FRAG from "./background.frag";
7
+ export class TgdPainterBackground extends TgdPainter {
8
+ constructor(context, texture, { x = 0, y = 0, z = 0.999999, zoom = 1, scaleX = 1, scaleY = 1, mode = "cover", } = {}) {
9
+ super();
10
+ this.context = context;
11
+ /**
12
+ * With a zoom of **1**, the image will have the smaller size to cover
13
+ * the whole scene.
14
+ */
15
+ this.zoom = 1;
16
+ this.x = 0;
17
+ this.y = 0;
18
+ this.z = 1;
19
+ this.mode = "cover";
20
+ this.mode = mode;
21
+ this.x = x;
22
+ this.y = y;
23
+ this.z = z;
24
+ this.zoom = zoom;
25
+ this.texture = texture;
26
+ this.program = new TgdProgram(context.gl, {
27
+ vert: VERT,
28
+ frag: FRAG,
29
+ });
30
+ const dataset = new TgdDataset({
31
+ attPoint: "vec2",
32
+ attUV: "vec2",
33
+ });
34
+ dataset.set("attPoint", new Float32Array([
35
+ -1 * scaleX,
36
+ +1 * scaleY,
37
+ +1 * scaleX,
38
+ +1 * scaleY,
39
+ -1 * scaleX,
40
+ -1 * scaleY,
41
+ +1 * scaleX,
42
+ -1 * scaleY,
43
+ ]));
44
+ dataset.set("attUV", new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]));
45
+ this.vao = new TgdVertexArray(context.gl, this.program, [dataset]);
46
+ }
47
+ delete() {
48
+ const { vao } = this;
49
+ vao.delete();
50
+ }
51
+ paint() {
52
+ const { gl } = this.context;
53
+ const { vao, program, texture, zoom, x, y, z, mode } = this;
54
+ program.use();
55
+ const { scaleX, scaleY } = mode === "cover"
56
+ ? this.getScaleForCover()
57
+ : this.getScaleForContain();
58
+ program.uniform2f("uniScale", scaleX, scaleY);
59
+ program.uniform2f("uniScroll", x, y);
60
+ program.uniform1f("uniZoom", 1 / zoom);
61
+ program.uniform1f("uniZ", z);
62
+ texture.activate(0, program, "uniTexture");
63
+ gl.disable(gl.CULL_FACE);
64
+ vao.bind();
65
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
66
+ }
67
+ getScaleForCover() {
68
+ const { texture, context } = this;
69
+ const { drawingBufferWidth: width, drawingBufferHeight: height } = context.gl;
70
+ const horizontal = texture.width * height > texture.height * width;
71
+ const scaleX = horizontal
72
+ ? (texture.width * height) / (width * texture.height)
73
+ : 1;
74
+ const scaleY = horizontal
75
+ ? 1
76
+ : (texture.height * width) / (height * texture.width);
77
+ return { scaleX, scaleY };
78
+ }
79
+ getScaleForContain() {
80
+ const { texture, context } = this;
81
+ const { drawingBufferWidth: width, drawingBufferHeight: height } = context.gl;
82
+ const aspectRatio = width / height;
83
+ const aspectRatioTexture = texture.width / texture.height;
84
+ const sx = width / texture.width;
85
+ const sy = height / texture.height;
86
+ if (sx > sy) {
87
+ // We took all vertical space and have void on right an left.
88
+ return {
89
+ scaleX: aspectRatioTexture / aspectRatio,
90
+ scaleY: 1,
91
+ };
92
+ }
93
+ return {
94
+ scaleX: 1,
95
+ scaleY: aspectRatio / aspectRatioTexture,
96
+ };
97
+ }
98
+ }
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWludGVyL2JhY2tncm91bmQtd2l0aC1kZXB0aC9iYWNrZ3JvdW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFHekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV6QyxPQUFPLElBQUksTUFBTSxtQkFBbUIsQ0FBQTtBQUNwQyxPQUFPLElBQUksTUFBTSxtQkFBbUIsQ0FBQTtBQTJCcEMsTUFBTSxPQUFPLG9CQUFxQixTQUFRLFVBQVU7SUFnQmhELFlBQ3FCLE9BQXVDLEVBQ3hELE9BQXFCLEVBQ3JCLEVBQ0ksQ0FBQyxHQUFHLENBQUMsRUFDTCxDQUFDLEdBQUcsQ0FBQyxFQUNMLENBQUMsR0FBRyxRQUFRLEVBQ1osSUFBSSxHQUFHLENBQUMsRUFDUixNQUFNLEdBQUcsQ0FBQyxFQUNWLE1BQU0sR0FBRyxDQUFDLEVBQ1YsSUFBSSxHQUFHLE9BQU8sTUFDd0IsRUFBRTtRQUU1QyxLQUFLLEVBQUUsQ0FBQTtRQVpVLFlBQU8sR0FBUCxPQUFPLENBQWdDO1FBWDVEOzs7V0FHRztRQUNJLFNBQUksR0FBRyxDQUFDLENBQUE7UUFDUixNQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ0wsTUFBQyxHQUFHLENBQUMsQ0FBQTtRQUNMLE1BQUMsR0FBRyxDQUFDLENBQUE7UUFDTCxTQUFJLEdBQXdCLE9BQU8sQ0FBQTtRQWdCdEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDVixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNWLElB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tolokoban/tgd",
3
- "version": "2.0.26",
3
+ "version": "2.0.28",
4
4
  "description": "ToloGameDev library for WebGL2",
5
5
  "homepage": "https://tolokoban.github.io/tgd2",
6
6
  "main": "./lib/dist/index.js",
@@ -31,5 +31,8 @@
31
31
  "license": "GPL-3.0",
32
32
  "bugs": {
33
33
  "url": "https://github.com/tolokoban/tgd2/issues"
34
+ },
35
+ "dependencies": {
36
+ "gl-matrix": "^3.4.3"
34
37
  }
35
38
  }
@@ -1,60 +0,0 @@
1
- /**
2
- * GLTF specs can be found here:
3
- * https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html
4
- */
5
- import { TgdDataset } from "../../dataset";
6
- import { TgdFormatGltf, TgdFormatGltfAccessor, TgdFormatGltfMaterial, TgdFormatGltfMesh, TgdFormatGltfMeshPrimitive, TgdFormatGltfNode, TgdFormatGltfScene } from "../../types/gltf";
7
- import { TgdTypeArrayForElements } from "../../types";
8
- import { TgdGeometry } from "../../geometry";
9
- import { TgdTexture2D } from "../../texture";
10
- export declare class TgdDataGLB {
11
- readonly gltf: Readonly<TgdFormatGltf>;
12
- private readonly chunks;
13
- private readonly chunkDetails;
14
- private readonly cacheImages;
15
- private readonly cacheImageURLs;
16
- private readonly cacheBufferViewDatas;
17
- /**
18
- * @param content The binary content of a GLB file.
19
- */
20
- constructor(content: ArrayBuffer);
21
- getChunkDetails(): {
22
- size: number;
23
- type: "JSON" | "BIN";
24
- }[];
25
- get fileSize(): number;
26
- getScenes(): TgdFormatGltfScene[];
27
- getScene(sceneIndex: number): TgdFormatGltfScene;
28
- getNode(nodeIndex: number): TgdFormatGltfNode;
29
- getNodeByName(nodeName: string): TgdFormatGltfNode | undefined;
30
- getNodeByNameOrThrow(nodeName: string): TgdFormatGltfNode;
31
- getAccessor(accessorIndex?: number): TgdFormatGltfAccessor;
32
- getMaterial(materialIndex: number): TgdFormatGltfMaterial;
33
- getMesh(meshIndex?: number): TgdFormatGltfMesh;
34
- getMeshPrimitive(meshIndex?: number, primitiveIndex?: number): {
35
- attributes: Record<string, number>;
36
- indices?: number;
37
- mode?: number;
38
- material?: number;
39
- };
40
- getMeshPrimitiveIndices(meshIndex?: number, primitiveIndex?: number): TgdTypeArrayForElements;
41
- getAccessorByAttributeName(primitive: TgdFormatGltfMeshPrimitive, attribName: string): TgdFormatGltfAccessor;
42
- createTexture2D(context: {
43
- gl: WebGL2RenderingContext;
44
- }, textureIndex: number): TgdTexture2D;
45
- loadImage(imageIndex: number): Promise<HTMLImageElement | undefined>;
46
- getImageURL(imageIndex: number): string | undefined;
47
- getBufferViewData(accessor: TgdFormatGltfAccessor): Int8Array | Uint8Array | Int16Array | Uint16Array | Uint32Array | Float32Array;
48
- getBufferViewData(bufferViewIndex: number, type?: number | "Int8" | "Uint8" | "Int16" | "Uint16" | "Uint32" | "Float32"): Int8Array | Uint8Array | Int16Array | Uint16Array | Uint32Array | Float32Array;
49
- findAccessorForBufferView(bufferViewIndex: number): TgdFormatGltfAccessor | undefined;
50
- setAttrib(dataset: TgdDataset, attribName: string, meshIndex?: number, primitiveIndex?: number, primitiveAttribName?: string): void;
51
- makeGeometry({ computeNormals, meshIndex, primitiveIndex, attPositionName, attNormalName, attTextureCoordsName, }?: {
52
- computeNormals?: boolean;
53
- meshIndex?: number;
54
- primitiveIndex?: number;
55
- attPositionName?: string;
56
- attNormalName?: string;
57
- attTextureCoordsName?: string;
58
- }): TgdGeometry;
59
- }
60
- //# sourceMappingURL=gltf.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gltf.d.ts","sourceRoot":"","sources":["../../../src/data/gltf/gltf.ts"],"names":[],"mappings":"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"}
@@ -1,337 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- /**
3
- * GLTF specs can be found here:
4
- * https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html
5
- */
6
- import { TgdDataset } from "./../../dataset/index.js";
7
- import { parseGLB } from "./parser.js";
8
- import { assertTgdTypeArrayForElements, } from "./../../types/index.js";
9
- import { TgdGeometry } from "./../../geometry/index.js";
10
- import { TgdTexture2D } from "./../../texture/index.js";
11
- export class TgdDataGLB {
12
- /**
13
- * @param content The binary content of a GLB file.
14
- */
15
- constructor(content) {
16
- this.chunkDetails = [];
17
- this.cacheImages = new Map();
18
- this.cacheImageURLs = new Map();
19
- this.cacheBufferViewDatas = new Map();
20
- try {
21
- const data = parseGLB(content);
22
- this.gltf = data.gltf;
23
- this.chunks = data.chunks;
24
- this.chunkDetails = data.chunkTypes;
25
- }
26
- catch (error) {
27
- const message = error instanceof Error ? error.message : JSON.stringify(error);
28
- throw new Error(`[TgdParserGLTransfertFormatBinary] ${message}`);
29
- }
30
- }
31
- getChunkDetails() {
32
- return structuredClone(this.chunkDetails);
33
- }
34
- get fileSize() {
35
- return (12 + this.chunks.reduce((size, chunk) => size + chunk.byteLength, 0));
36
- }
37
- getScenes() {
38
- var _a;
39
- return (_a = this.gltf.scenes) !== null && _a !== void 0 ? _a : [];
40
- }
41
- getScene(sceneIndex) {
42
- var _a;
43
- const scene = (_a = this.gltf.scenes) === null || _a === void 0 ? void 0 : _a[sceneIndex];
44
- if (!scene) {
45
- throw new Error(`Asset has no scene with index #${sceneIndex}!`);
46
- }
47
- return scene;
48
- }
49
- getNode(nodeIndex) {
50
- var _a;
51
- const node = (_a = this.gltf.nodes) === null || _a === void 0 ? void 0 : _a[nodeIndex];
52
- if (!node) {
53
- throw new Error(`Asset has no node with index #${nodeIndex}!`);
54
- }
55
- return node;
56
- }
57
- getNodeByName(nodeName) {
58
- const nodes = this.gltf.nodes;
59
- if (!nodes)
60
- return;
61
- for (const node of nodes) {
62
- if (node.name === nodeName)
63
- return node;
64
- }
65
- }
66
- getNodeByNameOrThrow(nodeName) {
67
- var _a;
68
- const node = this.getNodeByName(nodeName);
69
- if (node)
70
- return node;
71
- throw new Error(`Unknown node "${nodeName}"!\nAvailable names:${((_a = this.gltf.nodes) !== null && _a !== void 0 ? _a : [])
72
- .map((node, index) => `\n - ${typeof node.name === "string"
73
- ? JSON.stringify(node.name)
74
- : `#${index}`}`)
75
- .join("")}`);
76
- }
77
- getAccessor(accessorIndex = 0) {
78
- var _a;
79
- const accessor = (_a = this.gltf.accessors) === null || _a === void 0 ? void 0 : _a[accessorIndex];
80
- if (!accessor) {
81
- throw new Error(`Asset has no accessor with index #${accessorIndex}!`);
82
- }
83
- return accessor;
84
- }
85
- getMaterial(materialIndex) {
86
- var _a;
87
- const material = (_a = this.gltf.materials) === null || _a === void 0 ? void 0 : _a[materialIndex];
88
- if (!material) {
89
- throw new Error(`Asset has no material with index #${materialIndex}!`);
90
- }
91
- return material;
92
- }
93
- getMesh(meshIndex = 0) {
94
- var _a;
95
- const mesh = (_a = this.gltf.meshes) === null || _a === void 0 ? void 0 : _a[meshIndex];
96
- if (!mesh) {
97
- throw new Error(`Asset has no mesh with index #${meshIndex}!`);
98
- }
99
- return mesh;
100
- }
101
- getMeshPrimitive(meshIndex = 0, primitiveIndex = 0) {
102
- const mesh = this.getMesh(meshIndex);
103
- const primitive = mesh.primitives[primitiveIndex];
104
- if (!primitive) {
105
- throw new Error(`Asset has no primitive #${primitiveIndex} in mesh #${meshIndex}!`);
106
- }
107
- return primitive;
108
- }
109
- getMeshPrimitiveIndices(meshIndex = 0, primitiveIndex = 0) {
110
- var _a, _b;
111
- const primitive = this.getMeshPrimitive(meshIndex, primitiveIndex);
112
- const accessor = this.getAccessor((_a = primitive.indices) !== null && _a !== void 0 ? _a : 0);
113
- const elements = this.getBufferViewData((_b = accessor.bufferView) !== null && _b !== void 0 ? _b : 0, accessor.componentType);
114
- assertTgdTypeArrayForElements(elements);
115
- return elements;
116
- }
117
- getAccessorByAttributeName(primitive, attribName) {
118
- const { attributes } = primitive;
119
- if (!attributes || Object.keys(attributes).length === 0)
120
- throw new Error("No attributes found!");
121
- const accessorIndex = attributes[attribName];
122
- if (typeof accessorIndex !== "number") {
123
- throw new TypeError(`No attribute with name "${attribName}"!\nAvailable names are: ${Object.keys(attributes)
124
- .map(name => JSON.stringify(name))
125
- .join(", ")}.`);
126
- }
127
- try {
128
- return this.getAccessor(accessorIndex);
129
- }
130
- catch (error) {
131
- const message = error instanceof Error ? error.message : JSON.stringify(error);
132
- throw new Error(`Attribute "${attribName}" pointed to an inexisting accessor!\n${message}`);
133
- }
134
- }
135
- createTexture2D(context, textureIndex) {
136
- var _a, _b, _c, _d, _e;
137
- const gltfTex = (_a = this.gltf.textures) === null || _a === void 0 ? void 0 : _a[textureIndex];
138
- if (!gltfTex) {
139
- throw new Error(`Asset has no texture with index #${textureIndex}!`);
140
- }
141
- const source = (_e = (_b = gltfTex.source) !== null && _b !== void 0 ? _b : (_d = (_c = gltfTex.extensions) === null || _c === void 0 ? void 0 : _c.EXT_texture_webp) === null || _d === void 0 ? void 0 : _d.source) !== null && _e !== void 0 ? _e : 0;
142
- const url = this.getImageURL(source);
143
- const texture = new TgdTexture2D(context);
144
- if (url) {
145
- loadImage(url)
146
- .then(bmp => {
147
- if (bmp)
148
- texture.loadBitmap(bmp);
149
- else
150
- console.error("Unable to load this file:", url);
151
- })
152
- .catch(console.error);
153
- }
154
- else {
155
- console.error(`[GLTF] texture index #${textureIndex} is empty!`);
156
- }
157
- return texture;
158
- }
159
- loadImage(imageIndex) {
160
- return __awaiter(this, void 0, void 0, function* () {
161
- const fromCache = this.cacheImages.get(imageIndex);
162
- if (fromCache)
163
- return fromCache;
164
- const url = this.getImageURL(imageIndex);
165
- if (!url)
166
- return;
167
- const promise = new Promise((resolve, reject) => {
168
- const img = new Image();
169
- img.src = url;
170
- img.addEventListener("load", () => {
171
- resolve(img);
172
- });
173
- img.addEventListener("error", () => {
174
- var _a;
175
- console.error(`Unable to load image #${imageIndex}!`, (_a = this.gltf.images) === null || _a === void 0 ? void 0 : _a[imageIndex]);
176
- reject();
177
- });
178
- });
179
- this.cacheImages.set(imageIndex, promise);
180
- return promise;
181
- });
182
- }
183
- getImageURL(imageIndex) {
184
- var _a;
185
- const fromCache = this.cacheImageURLs.get(imageIndex);
186
- if (fromCache)
187
- return fromCache;
188
- const { gltf } = this;
189
- const image = (_a = gltf.images) === null || _a === void 0 ? void 0 : _a[imageIndex];
190
- if (!image)
191
- return;
192
- if (image.uri)
193
- return image.uri;
194
- if (typeof image.bufferView !== "number")
195
- return;
196
- const buffer = this.getBufferViewData(image.bufferView, "Uint8");
197
- if (!buffer)
198
- return;
199
- const blob = new Blob([buffer], {
200
- type: image.mimeType,
201
- });
202
- const url = URL.createObjectURL(blob);
203
- this.cacheImageURLs.set(imageIndex, url);
204
- return url;
205
- }
206
- getBufferViewData(accessor, type = "Float32") {
207
- var _a, _b, _c, _d, _e;
208
- if (typeof accessor !== "number") {
209
- return this.getBufferViewData((_a = accessor.bufferView) !== null && _a !== void 0 ? _a : 0, accessor.componentType);
210
- }
211
- const bufferViewIndex = accessor;
212
- const fromCache = this.cacheBufferViewDatas.get(bufferViewIndex);
213
- if (fromCache)
214
- return fromCache;
215
- const { gltf } = this;
216
- const bufferView = (_b = gltf.bufferViews) === null || _b === void 0 ? void 0 : _b[bufferViewIndex];
217
- if (!bufferView)
218
- throw new Error(`No bufferView with index #${bufferViewIndex}!`);
219
- const buffer = this.chunks[bufferView.buffer];
220
- const byteOffset = (_c = bufferView.byteOffset) !== null && _c !== void 0 ? _c : 0;
221
- const data = buffer.slice(byteOffset, byteOffset + bufferView.byteLength);
222
- const view = figureOutView(data, convertTypeToNumber((_e = type !== null && type !== void 0 ? type : (_d = this.findAccessorForBufferView(bufferViewIndex)) === null || _d === void 0 ? void 0 : _d.componentType) !== null && _e !== void 0 ? _e : "Float32"));
223
- this.cacheBufferViewDatas.set(bufferViewIndex, view);
224
- return view;
225
- }
226
- findAccessorForBufferView(bufferViewIndex) {
227
- var _a;
228
- return ((_a = this.gltf.accessors) !== null && _a !== void 0 ? _a : []).find(accessor => accessor.bufferView === bufferViewIndex);
229
- }
230
- setAttrib(dataset, attribName, meshIndex = 0, primitiveIndex = 0, primitiveAttribName) {
231
- var _a, _b, _c, _d, _e;
232
- const { gltf } = this;
233
- const accessorIndex = (_b = (_a = gltf.meshes) === null || _a === void 0 ? void 0 : _a[meshIndex].primitives[primitiveIndex].attributes[primitiveAttribName !== null && primitiveAttribName !== void 0 ? primitiveAttribName : attribName]) !== null && _b !== void 0 ? _b : -1;
234
- const accessor = (_c = gltf.accessors) === null || _c === void 0 ? void 0 : _c[accessorIndex];
235
- if (!accessor) {
236
- throw new Error(`No attribute "${primitiveAttribName !== null && primitiveAttribName !== void 0 ? primitiveAttribName : attribName}" for primitive #${primitiveIndex} of mesh #${meshIndex}!`);
237
- }
238
- const bufferViewIndex = (_d = accessor.bufferView) !== null && _d !== void 0 ? _d : 0;
239
- const bufferView = (_e = gltf.bufferViews) === null || _e === void 0 ? void 0 : _e[bufferViewIndex];
240
- if (!bufferView) {
241
- throw new Error(`No bufferView with index #${bufferViewIndex}!`);
242
- }
243
- const view = this.getBufferViewData(bufferViewIndex, accessor.componentType);
244
- dataset.set(attribName, view, {
245
- byteStride: bufferView.byteStride,
246
- byteOffset: accessor.byteOffset,
247
- count: accessor.count,
248
- });
249
- }
250
- makeGeometry({ computeNormals, meshIndex = 0, primitiveIndex = 0, attPositionName = "POSITION", attNormalName = "NORMAL", attTextureCoordsName = "TEXCOORD_0", } = {}) {
251
- const primitive = this.getMeshPrimitive(meshIndex, primitiveIndex);
252
- try {
253
- const { attributes } = primitive;
254
- if (!attributes)
255
- throw new Error("No attributes found!");
256
- const elements = this.getMeshPrimitiveIndices(meshIndex, primitiveIndex);
257
- const definition = {
258
- [attPositionName]: "vec3",
259
- };
260
- if (typeof attributes[attNormalName] === "string") {
261
- definition[attNormalName] = "vec3";
262
- }
263
- if (typeof attributes[attTextureCoordsName] === "string") {
264
- definition[attTextureCoordsName] = "vec2";
265
- }
266
- const dataset = new TgdDataset(definition);
267
- dataset.set(attPositionName, returnFloat32Array(this.getBufferViewData(this.getAccessorByAttributeName(primitive, attPositionName))));
268
- if (typeof attributes[attNormalName] === "string") {
269
- dataset.set(attNormalName, returnFloat32Array(this.getBufferViewData(this.getAccessorByAttributeName(primitive, attNormalName))));
270
- }
271
- if (typeof attributes[attTextureCoordsName] === "string") {
272
- dataset.set(attTextureCoordsName, returnFloat32Array(this.getBufferViewData(this.getAccessorByAttributeName(primitive, attTextureCoordsName))));
273
- }
274
- return new TgdGeometry({
275
- computeNormalsIfMissing: computeNormals,
276
- dataset,
277
- elements,
278
- attPosition: attPositionName,
279
- attNormal: attNormalName,
280
- attUV: attTextureCoordsName,
281
- });
282
- }
283
- catch (error) {
284
- const message = error instanceof Error ? error.message : JSON.stringify(error);
285
- throw new Error(`Error in primitive #${primitiveIndex} of mesh #${meshIndex}:\n${message}`);
286
- }
287
- }
288
- }
289
- function figureOutView(data, componentType) {
290
- switch (componentType) {
291
- case 5120:
292
- return new Int8Array(data);
293
- case 5121:
294
- return new Uint8Array(data);
295
- case 5122:
296
- return new Int16Array(data);
297
- case 5123:
298
- return new Uint16Array(data);
299
- case 5125:
300
- return new Uint32Array(data);
301
- default:
302
- return new Float32Array(data);
303
- }
304
- }
305
- function convertTypeToNumber(type) {
306
- if (typeof type === "number")
307
- return type;
308
- switch (type) {
309
- case "Int8":
310
- return 5120;
311
- case "Uint8":
312
- return 5121;
313
- case "Int16":
314
- return 5122;
315
- case "Uint16":
316
- return 5123;
317
- case "Uint32":
318
- return 5125;
319
- default:
320
- return WebGL2RenderingContext.FLOAT;
321
- }
322
- throw new Error("Function not implemented.");
323
- }
324
- function returnFloat32Array(data) {
325
- if (data instanceof Float32Array)
326
- return data;
327
- throw new Error("We were expecting a Float32Array!");
328
- }
329
- function loadImage(url) {
330
- return new Promise(resolve => {
331
- const img = new Image();
332
- img.src = url;
333
- img.addEventListener("load", () => resolve(img));
334
- img.addEventListener("error", () => resolve(null));
335
- });
336
- }
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2x0Zi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhL2dsdGYvZ2x0Zi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBd0IsTUFBTSxjQUFjLENBQUE7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQVVuQyxPQUFPLEVBQ0gsNkJBQTZCLEdBRWhDLE1BQU0sWUFBWSxDQUFBO0FBQ25CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUUzQyxNQUFNLE9BQU8sVUFBVTtJQXVCbkI7O09BRUc7SUFDSCxZQUFZLE9BQW9CO1FBdEJmLGlCQUFZLEdBR3hCLEVBQUUsQ0FBQTtRQUNVLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBR25DLENBQUE7UUFDYyxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO1FBQzFDLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQVE1QyxDQUFBO1FBTUMsSUFBSSxDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7WUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFBO1FBQ3ZDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsTUFBTSxPQUFPLEdBQ1QsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNsRSxNQUFNLElBQUksS0FBSyxDQUFD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
@@ -1,2 +0,0 @@
1
- export * from "./gltf";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/gltf/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA"}
@@ -1,2 +0,0 @@
1
- export * from "./gltf.js";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YS9nbHRmL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsUUFBUSxDQUFBIn0=
@@ -1,13 +0,0 @@
1
- import { TgdFormatGltf } from "../../types/gltf";
2
- /**
3
- * @see https://www.khronos.org/files/gltf20-reference-guide.pdf
4
- */
5
- export declare function parseGLB(data: ArrayBuffer): {
6
- gltf: TgdFormatGltf;
7
- chunks: ArrayBuffer[];
8
- chunkTypes: Array<{
9
- size: number;
10
- type: "JSON" | "BIN";
11
- }>;
12
- };
13
- //# sourceMappingURL=parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/data/gltf/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,kBAAkB,CAAA;AAErE;;GAEG;AAEH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG;IACzC,IAAI,EAAE,aAAa,CAAA;IACnB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;KAAE,CAAC,CAAA;CAC5D,CAiDA"}
@@ -1,54 +0,0 @@
1
- import { assertTgdFormatGltf } from "../../types/gltf.js";
2
- /**
3
- * @see https://www.khronos.org/files/gltf20-reference-guide.pdf
4
- */
5
- export function parseGLB(data) {
6
- const view = new DataView(data);
7
- const magicNumber = view.getUint32(0, true);
8
- if (magicNumber !== 0x46546c67) {
9
- throw new Error("Invalid magic number for GLB file!");
10
- }
11
- const version = view.getUint32(4, true);
12
- if (version !== 2) {
13
- throw new Error(`We support only version 2, but this file is in version ${version}!`);
14
- }
15
- const length = view.getUint32(8, true);
16
- let gltf = {};
17
- const chunks = [];
18
- const chunkTypes = [];
19
- let offset = 12;
20
- while (offset < length) {
21
- const chunkLength = view.getUint32(offset, true);
22
- offset += 4;
23
- const chunkType = view.getUint32(offset, true);
24
- offset += 4;
25
- const chunkData = data.slice(offset, offset + chunkLength);
26
- offset += chunkLength;
27
- if (chunkType === 0x4e4f534a) {
28
- // This is the JSON part.
29
- const json = new TextDecoder().decode(chunkData);
30
- try {
31
- const object = JSON.parse(json);
32
- assertTgdFormatGltf(object);
33
- gltf = object;
34
- chunkTypes.push({ type: "JSON", size: chunkData.byteLength });
35
- }
36
- catch (error) {
37
- console.error("Unable to parse this JSON file:", json);
38
- console.error(error);
39
- throw new Error("Invalid JSON data in the chunk!");
40
- }
41
- }
42
- else if (chunkType === 0x004e4942) {
43
- chunks.push(chunkData);
44
- chunkTypes.push({ type: "BIN", size: chunkData.byteLength });
45
- }
46
- else {
47
- throw new Error(`We got an invalid chunk type: 0x${chunkType
48
- .toString(16)
49
- .padStart(8, "0")}!`);
50
- }
51
- }
52
- return { gltf, chunks, chunkTypes };
53
- }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGEvZ2x0Zi9wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRXJFOztHQUVHO0FBRUgsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFpQjtJQUt0QyxNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMzQyxJQUFJLFdBQVcsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3ZDLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQ1gsMERBQTBELE9BQU8sR0FBRyxDQUN2RSxDQUFBO0lBQ0wsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3RDLElBQUksSUFBSSxHQUFHLEVBQW1CLENBQUE7SUFDOUIsTUFBTSxNQUFNLEdBQWtCLEVBQUUsQ0FBQTtJQUNoQyxNQUFNLFVBQVUsR0FBa0QsRUFBRSxDQUFBO0lBQ3BFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQTtJQUNmLE9BQU8sTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ2hELE1BQU0sSUFBSSxDQUFDLENBQUE7UUFDWCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUM5QyxNQUFNLElBQUksQ0FBQyxDQUFBO1FBQ1gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFBO1FBQzFELE1BQU0sSUFBSSxXQUFXLENBQUE7UUFDckIsSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDM0IseUJBQXlCO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ2hELElBQUksQ0FBQztnQkFDRCxNQUFNLE1BQU0sR0FBWSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN4QyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsSUFBSSxHQUFHLE1BQU0sQ0FBQTtnQkFDYixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7WUFDakUsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFDdEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO1lBQ3RELENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUN0QixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7UUFDaEUsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLElBQUksS0FBSyxDQUNYLG1DQUFtQyxTQUFTO2lCQUN2QyxRQUFRLENBQUMsRUFBRSxDQUFDO2lCQUNaLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FDM0IsQ0FBQTtRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUE7QUFDdkMsQ0FBQyJ9