@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.
- package/lib/dist/camera/camera-node.d.ts +16 -0
- package/lib/dist/camera/camera-node.d.ts.map +1 -0
- package/lib/dist/camera/camera-node.js +17 -0
- package/lib/dist/math/vec3.d.ts +1 -0
- package/lib/dist/math/vec3.d.ts.map +1 -1
- package/lib/dist/math/vec3.js +11 -1
- package/lib/dist/painter/background-with-depth/background.d.ts +55 -0
- package/lib/dist/painter/background-with-depth/background.d.ts.map +1 -0
- package/lib/dist/painter/background-with-depth/background.js +99 -0
- package/package.json +4 -1
- package/lib/dist/data/gltf/gltf.d.ts +0 -60
- package/lib/dist/data/gltf/gltf.d.ts.map +0 -1
- package/lib/dist/data/gltf/gltf.js +0 -337
- package/lib/dist/data/gltf/index.d.ts +0 -2
- package/lib/dist/data/gltf/index.d.ts.map +0 -1
- package/lib/dist/data/gltf/index.js +0 -2
- package/lib/dist/data/gltf/parser.d.ts +0 -13
- package/lib/dist/data/gltf/parser.d.ts.map +0 -1
- package/lib/dist/data/gltf/parser.js +0 -54
|
@@ -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
|
package/lib/dist/math/vec3.d.ts
CHANGED
|
@@ -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":"AACA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC,qBAAa,OAAQ,SAAQ,YAAY;IACrC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAuB;IAClD,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAuB;IAClD,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAuB;IAElD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClB,OAAO,GACP,OAAO,GACP,YAAY,GACZ,YAAY,GAAG,OAAO;IAI5B,MAAM,CAAC,UAAU,CACb,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,EAC7D,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,EAC7D,CAAC,SAAM,GACR,OAAO;IAQV,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM;;
|
|
1
|
+
{"version":3,"file":"vec3.d.ts","sourceRoot":"","sources":["../../src/math/vec3.ts"],"names":[],"mappings":"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"}
|
package/lib/dist/math/vec3.js
CHANGED
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjMy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRoL3ZlYzMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFRLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBSzFDLE1BQU0sT0FBTyxPQUFRLFNBQVEsWUFBWTtJQUtyQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBSUw7UUFDZCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQ2IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBa0QsRUFDN0QsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBa0QsRUFDN0QsQ0FBQyxHQUFHLEdBQUc7UUFFUCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUN6QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDekIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQXVCLEVBQUUsRUFBcUI7UUFDMUQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FB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LENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFlBQVksR0FDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM3RCxJQUFJLFlBQVksS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFbkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUErQztRQUNqRCxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUE7UUFDekIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtRQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBQzNCLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNGLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQzdCLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTTtRQUNsQixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUE7UUFDeEIsTUFBTSxHQUFHLEdBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN0RCxPQUFPLENBQUMsR0FBRyxDQUNQLEdBQUcsT0FBTyxNQUFNLEVBQ2hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ2YsWUFBWSxFQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDdEIsQ0FBQTtJQUNMLENBQUM7O0FBbFJNLFNBQUMsR0FBc0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUMzQyxTQUFDLEdBQXNCLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDM0MsU0FBQyxHQUFzQixJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBIn0=
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjMy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRoL3ZlYzMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFRLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBSzFDLE1BQU0sT0FBTyxPQUFRLFNBQVEsWUFBWTtJQUtyQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBSUw7UUFDZCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQ2IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBa0QsRUFDN0QsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBa0QsRUFDN0QsQ0FBQyxHQUFHLEdBQUc7UUFFUCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUN6QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDekIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQXVCLEVBQUUsRUFBcUI7UUFDMUQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FB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
|
|
@@ -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.
|
|
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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/gltf/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA"}
|
|
@@ -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
|