angular-three-soba 1.7.0 → 1.8.1
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/assets/distort.vert.glsl +1 -0
- package/esm2020/materials/angular-three-soba-materials.mjs +5 -0
- package/esm2020/materials/index.mjs +4 -0
- package/esm2020/materials/lib/mesh-distort-material/mesh-distort-material.mjs +74 -0
- package/esm2020/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +328 -0
- package/esm2020/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +67 -0
- package/esm2020/shaders/index.mjs +6 -1
- package/esm2020/shaders/lib/blur-pass/blur-pass.mjs +61 -0
- package/esm2020/shaders/lib/convolution-material/convolution-material.mjs +94 -0
- package/esm2020/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +55 -0
- package/esm2020/shaders/lib/mesh-reflector-material/mesh-reflector-material.mjs +223 -0
- package/esm2020/shaders/lib/mesh-wobble-material/mesh-wobble-material.mjs +37 -0
- package/fesm2015/angular-three-soba-materials.mjs +468 -0
- package/fesm2015/angular-three-soba-materials.mjs.map +1 -0
- package/fesm2015/angular-three-soba-shaders.mjs +467 -1
- package/fesm2015/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2020/angular-three-soba-materials.mjs +468 -0
- package/fesm2020/angular-three-soba-materials.mjs.map +1 -0
- package/fesm2020/angular-three-soba-shaders.mjs +466 -1
- package/fesm2020/angular-three-soba-shaders.mjs.map +1 -1
- package/materials/README.md +3 -0
- package/materials/index.d.ts +3 -0
- package/materials/lib/mesh-distort-material/mesh-distort-material.d.ts +19 -0
- package/materials/lib/mesh-reflector-material/mesh-reflector-material.d.ts +41 -0
- package/materials/lib/mesh-wobble-material/mesh-wobble-material.d.ts +14 -0
- package/package.json +37 -28
- package/plugin/package.json +1 -1
- package/shaders/index.d.ts +5 -0
- package/shaders/lib/blur-pass/blur-pass.d.ts +23 -0
- package/shaders/lib/convolution-material/convolution-material.d.ts +7 -0
- package/shaders/lib/mesh-distort-material/mesh-distort-material.d.ts +144 -0
- package/shaders/lib/mesh-reflector-material/mesh-reflector-material.d.ts +50 -0
- package/shaders/lib/mesh-wobble-material/mesh-wobble-material.d.ts +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#pragma glslify: snoise3 = require(glsl-noise/simplex/3d)
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1zb2JhLW1hdGVyaWFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL21hdGVyaWFscy9zcmMvYW5ndWxhci10aHJlZS1zb2JhLW1hdGVyaWFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './lib/mesh-distort-material/mesh-distort-material';
|
|
2
|
+
export * from './lib/mesh-reflector-material/mesh-reflector-material';
|
|
3
|
+
export * from './lib/mesh-wobble-material/mesh-wobble-material';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9tYXRlcmlhbHMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLGlEQUFpRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1kaXN0b3J0LW1hdGVyaWFsL21lc2gtZGlzdG9ydC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbC9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG4iXX0=
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input } from '@angular/core';
|
|
2
|
+
import { injectBeforeRender, injectNgtRef, NgtArgs, NgtRxStore } from 'angular-three';
|
|
3
|
+
import { NGTS_DISTORT_MATERIAL_SHADER } from 'angular-three-soba/shaders';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class NgtsMeshDistortMaterial extends NgtRxStore {
|
|
6
|
+
set time(time) {
|
|
7
|
+
this.set({ time });
|
|
8
|
+
}
|
|
9
|
+
set distort(distort) {
|
|
10
|
+
this.set({ distort });
|
|
11
|
+
}
|
|
12
|
+
set radius(radius) {
|
|
13
|
+
this.set({ radius });
|
|
14
|
+
}
|
|
15
|
+
set speed(speed) {
|
|
16
|
+
this.set({ speed });
|
|
17
|
+
}
|
|
18
|
+
initialize() {
|
|
19
|
+
super.initialize();
|
|
20
|
+
this.set({ speed: 1, time: 0, distort: 0.4, radius: 1 });
|
|
21
|
+
}
|
|
22
|
+
constructor() {
|
|
23
|
+
super();
|
|
24
|
+
this.MeshDistortMaterial = inject(NGTS_DISTORT_MATERIAL_SHADER);
|
|
25
|
+
this.material = new this.MeshDistortMaterial();
|
|
26
|
+
this.materialRef = injectNgtRef();
|
|
27
|
+
injectBeforeRender(({ clock }) => {
|
|
28
|
+
this.material.time = clock.getElapsedTime() * this.get('speed');
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
NgtsMeshDistortMaterial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsMeshDistortMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
33
|
+
NgtsMeshDistortMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: NgtsMeshDistortMaterial, isStandalone: true, selector: "ngts-mesh-distort-material", inputs: { materialRef: "materialRef", time: "time", distort: "distort", radius: "radius", speed: "speed" }, usesInheritance: true, ngImport: i0, template: `
|
|
34
|
+
<ngt-primitive
|
|
35
|
+
*args="[material]"
|
|
36
|
+
[ref]="materialRef"
|
|
37
|
+
[time]="get('time')"
|
|
38
|
+
[distort]="get('distort')"
|
|
39
|
+
[radius]="get('radius')"
|
|
40
|
+
ngtCompound
|
|
41
|
+
attach="material"
|
|
42
|
+
/>
|
|
43
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsMeshDistortMaterial, decorators: [{
|
|
45
|
+
type: Component,
|
|
46
|
+
args: [{
|
|
47
|
+
selector: 'ngts-mesh-distort-material',
|
|
48
|
+
standalone: true,
|
|
49
|
+
template: `
|
|
50
|
+
<ngt-primitive
|
|
51
|
+
*args="[material]"
|
|
52
|
+
[ref]="materialRef"
|
|
53
|
+
[time]="get('time')"
|
|
54
|
+
[distort]="get('distort')"
|
|
55
|
+
[radius]="get('radius')"
|
|
56
|
+
ngtCompound
|
|
57
|
+
attach="material"
|
|
58
|
+
/>
|
|
59
|
+
`,
|
|
60
|
+
imports: [NgtArgs],
|
|
61
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
62
|
+
}]
|
|
63
|
+
}], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
|
|
64
|
+
type: Input
|
|
65
|
+
}], time: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}], distort: [{
|
|
68
|
+
type: Input
|
|
69
|
+
}], radius: [{
|
|
70
|
+
type: Input
|
|
71
|
+
}], speed: [{
|
|
72
|
+
type: Input
|
|
73
|
+
}] } });
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1kaXN0b3J0LW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvbWF0ZXJpYWxzL3NyYy9saWIvbWVzaC1kaXN0b3J0LW1hdGVyaWFsL21lc2gtZGlzdG9ydC1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQW1CMUUsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFVBQVU7SUFPbkQsSUFBYSxJQUFJLENBQUMsSUFBWTtRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBYSxPQUFPLENBQUMsT0FBZTtRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxLQUFLLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRVEsVUFBVTtRQUNmLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUE1Qkgsd0JBQW1CLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFM0QsYUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFMUMsZ0JBQVcsR0FBRyxZQUFZLEVBQW1DLENBQUM7UUF5Qm5FLGtCQUFrQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7b0hBakNRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHlOQWR0Qjs7Ozs7Ozs7OztLQVVULDREQUNTLE9BQU87MkZBR1IsdUJBQXVCO2tCQWpCbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7O0tBVVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7MEVBTVksV0FBVztzQkFBbkIsS0FBSztnQkFFTyxJQUFJO3NCQUFoQixLQUFLO2dCQUlPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdE5ndFJlZiwgTmd0QXJncywgTmd0UnhTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTkdUU19ESVNUT1JUX01BVEVSSUFMX1NIQURFUiB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLW1lc2gtZGlzdG9ydC1tYXRlcmlhbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXByaW1pdGl2ZVxuICAgICAgICAgICAgKmFyZ3M9XCJbbWF0ZXJpYWxdXCJcbiAgICAgICAgICAgIFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuICAgICAgICAgICAgW3RpbWVdPVwiZ2V0KCd0aW1lJylcIlxuICAgICAgICAgICAgW2Rpc3RvcnRdPVwiZ2V0KCdkaXN0b3J0JylcIlxuICAgICAgICAgICAgW3JhZGl1c109XCJnZXQoJ3JhZGl1cycpXCJcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgICAgICBhdHRhY2g9XCJtYXRlcmlhbFwiXG4gICAgICAgIC8+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTWVzaERpc3RvcnRNYXRlcmlhbCBleHRlbmRzIE5ndFJ4U3RvcmUge1xuICAgIHJlYWRvbmx5IE1lc2hEaXN0b3J0TWF0ZXJpYWwgPSBpbmplY3QoTkdUU19ESVNUT1JUX01BVEVSSUFMX1NIQURFUik7XG5cbiAgICByZWFkb25seSBtYXRlcmlhbCA9IG5ldyB0aGlzLk1lc2hEaXN0b3J0TWF0ZXJpYWwoKTtcblxuICAgIEBJbnB1dCgpIG1hdGVyaWFsUmVmID0gaW5qZWN0Tmd0UmVmPHR5cGVvZiB0aGlzLk1lc2hEaXN0b3J0TWF0ZXJpYWw+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgdGltZSh0aW1lOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0aW1lIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkaXN0b3J0KGRpc3RvcnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGRpc3RvcnQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHJhZGl1cyhyYWRpdXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJhZGl1cyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc3BlZWQoc3BlZWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHNwZWVkIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoeyBzcGVlZDogMSwgdGltZTogMCwgZGlzdG9ydDogMC40LCByYWRpdXM6IDEgfSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcigoeyBjbG9jayB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRpbWUgPSBjbG9jay5nZXRFbGFwc2VkVGltZSgpICogdGhpcy5nZXQoJ3NwZWVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { NgIf } from '@angular/common';
|
|
2
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input } from '@angular/core';
|
|
3
|
+
import { extend, getLocalState, injectBeforeRender, injectNgtRef, NgtArgs, NgtPush, NgtRxStore, NgtStore, startWithUndefined, } from 'angular-three';
|
|
4
|
+
import { BlurPass, MeshReflectorMaterial } from 'angular-three-soba/shaders';
|
|
5
|
+
import { combineLatest, debounceTime, map } from 'rxjs';
|
|
6
|
+
import * as THREE from 'three';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
extend({ MeshReflectorMaterial });
|
|
9
|
+
export class NgtsMeshReflectorMaterial extends NgtRxStore {
|
|
10
|
+
set resolution(resolution) {
|
|
11
|
+
this.set({ resolution });
|
|
12
|
+
}
|
|
13
|
+
set mixBlur(mixBlur) {
|
|
14
|
+
this.set({ mixBlur });
|
|
15
|
+
}
|
|
16
|
+
set mixStrength(mixStrength) {
|
|
17
|
+
this.set({ mixStrength });
|
|
18
|
+
}
|
|
19
|
+
set blur(blur) {
|
|
20
|
+
this.set({ blur });
|
|
21
|
+
}
|
|
22
|
+
set mirror(mirror) {
|
|
23
|
+
this.set({ mirror });
|
|
24
|
+
}
|
|
25
|
+
set minDepthThreshold(minDepthThreshold) {
|
|
26
|
+
this.set({ minDepthThreshold });
|
|
27
|
+
}
|
|
28
|
+
set maxDepthThreshold(maxDepthThreshold) {
|
|
29
|
+
this.set({ maxDepthThreshold });
|
|
30
|
+
}
|
|
31
|
+
set depthScale(depthScale) {
|
|
32
|
+
this.set({ depthScale });
|
|
33
|
+
}
|
|
34
|
+
set depthToBlurRatioBias(depthToBlurRatioBias) {
|
|
35
|
+
this.set({ depthToBlurRatioBias });
|
|
36
|
+
}
|
|
37
|
+
set distortionMap(distortionMap) {
|
|
38
|
+
this.set({ distortionMap });
|
|
39
|
+
}
|
|
40
|
+
set distortion(distortion) {
|
|
41
|
+
this.set({ distortion });
|
|
42
|
+
}
|
|
43
|
+
set mixContrast(mixContrast) {
|
|
44
|
+
this.set({ mixContrast });
|
|
45
|
+
}
|
|
46
|
+
set reflectorOffset(reflectorOffset) {
|
|
47
|
+
this.set({ reflectorOffset });
|
|
48
|
+
}
|
|
49
|
+
get reflectorProps() {
|
|
50
|
+
return this.get('reflectorEntities', 'reflectorProps');
|
|
51
|
+
}
|
|
52
|
+
initialize() {
|
|
53
|
+
super.initialize();
|
|
54
|
+
this.set({
|
|
55
|
+
mixBlur: 0,
|
|
56
|
+
mixStrength: 1,
|
|
57
|
+
resolution: 256,
|
|
58
|
+
blur: [0, 0],
|
|
59
|
+
minDepthThreshold: 0.9,
|
|
60
|
+
maxDepthThreshold: 1,
|
|
61
|
+
depthScale: 0,
|
|
62
|
+
depthToBlurRatioBias: 0.25,
|
|
63
|
+
mirror: 0,
|
|
64
|
+
distortion: 1,
|
|
65
|
+
mixContrast: 1,
|
|
66
|
+
reflectorOffset: 0,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
constructor() {
|
|
70
|
+
super();
|
|
71
|
+
this.materialRef = injectNgtRef();
|
|
72
|
+
this.defines$ = this.select('reflectorEntities', 'reflectorProps', 'defines').pipe(debounceTime(0));
|
|
73
|
+
this.store = inject(NgtStore);
|
|
74
|
+
this.reflectorPlane = new THREE.Plane();
|
|
75
|
+
this.normal = new THREE.Vector3();
|
|
76
|
+
this.reflectorWorldPosition = new THREE.Vector3();
|
|
77
|
+
this.cameraWorldPosition = new THREE.Vector3();
|
|
78
|
+
this.rotationMatrix = new THREE.Matrix4();
|
|
79
|
+
this.lookAtPosition = new THREE.Vector3(0, 0, -1);
|
|
80
|
+
this.clipPlane = new THREE.Vector4();
|
|
81
|
+
this.view = new THREE.Vector3();
|
|
82
|
+
this.target = new THREE.Vector3();
|
|
83
|
+
this.q = new THREE.Vector4();
|
|
84
|
+
this.textureMatrix = new THREE.Matrix4();
|
|
85
|
+
this.virtualCamera = new THREE.PerspectiveCamera();
|
|
86
|
+
this.connect('normalizedBlur', this.select('blur').pipe(map((blur) => (Array.isArray(blur) ? blur : [blur, blur]))));
|
|
87
|
+
this.connect('hasBlur', this.select('normalizedBlur').pipe(map(([x, y]) => x + y > 0)));
|
|
88
|
+
this.connect('reflectorEntities', combineLatest([
|
|
89
|
+
this.store.select('gl'),
|
|
90
|
+
this.select('normalizedBlur'),
|
|
91
|
+
this.select('resolution'),
|
|
92
|
+
this.select('mirror'),
|
|
93
|
+
this.select('hasBlur'),
|
|
94
|
+
this.select('mixBlur'),
|
|
95
|
+
this.select('mixStrength'),
|
|
96
|
+
this.select('minDepthThreshold'),
|
|
97
|
+
this.select('maxDepthThreshold'),
|
|
98
|
+
this.select('depthScale'),
|
|
99
|
+
this.select('depthToBlurRatioBias'),
|
|
100
|
+
this.select('distortion'),
|
|
101
|
+
this.select('distortionMap').pipe(startWithUndefined()),
|
|
102
|
+
this.select('mixContrast'),
|
|
103
|
+
]).pipe(map(([gl, blur, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, distortion, distortionMap, mixContrast,]) => {
|
|
104
|
+
const parameters = {
|
|
105
|
+
minFilter: THREE.LinearFilter,
|
|
106
|
+
magFilter: THREE.LinearFilter,
|
|
107
|
+
encoding: gl.outputEncoding,
|
|
108
|
+
type: THREE.HalfFloatType,
|
|
109
|
+
};
|
|
110
|
+
const fbo1 = new THREE.WebGLRenderTarget(resolution, resolution, parameters);
|
|
111
|
+
fbo1.depthBuffer = true;
|
|
112
|
+
fbo1.depthTexture = new THREE.DepthTexture(resolution, resolution);
|
|
113
|
+
fbo1.depthTexture.format = THREE.DepthFormat;
|
|
114
|
+
fbo1.depthTexture.type = THREE.UnsignedShortType;
|
|
115
|
+
const fbo2 = new THREE.WebGLRenderTarget(resolution, resolution, parameters);
|
|
116
|
+
const blurPass = new BlurPass({
|
|
117
|
+
gl,
|
|
118
|
+
resolution,
|
|
119
|
+
width: blur[0],
|
|
120
|
+
height: blur[1],
|
|
121
|
+
minDepthThreshold,
|
|
122
|
+
maxDepthThreshold,
|
|
123
|
+
depthScale,
|
|
124
|
+
depthToBlurRatioBias,
|
|
125
|
+
});
|
|
126
|
+
const reflectorProps = {
|
|
127
|
+
mirror,
|
|
128
|
+
textureMatrix: this.textureMatrix,
|
|
129
|
+
mixBlur,
|
|
130
|
+
tDiffuse: fbo1.texture,
|
|
131
|
+
tDepth: fbo1.depthTexture,
|
|
132
|
+
tDiffuseBlur: fbo2.texture,
|
|
133
|
+
hasBlur,
|
|
134
|
+
mixStrength,
|
|
135
|
+
minDepthThreshold,
|
|
136
|
+
maxDepthThreshold,
|
|
137
|
+
depthScale,
|
|
138
|
+
depthToBlurRatioBias,
|
|
139
|
+
distortion,
|
|
140
|
+
distortionMap,
|
|
141
|
+
mixContrast,
|
|
142
|
+
defines: {
|
|
143
|
+
USE_BLUR: hasBlur ? '' : undefined,
|
|
144
|
+
USE_DEPTH: depthScale > 0 ? '' : undefined,
|
|
145
|
+
USE_DISTORTION: distortionMap ? '' : undefined,
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
return { fbo1, fbo2, blurPass, reflectorProps };
|
|
149
|
+
})));
|
|
150
|
+
injectBeforeRender(this.onBeforeRender.bind(this));
|
|
151
|
+
console.log(this.materialRef);
|
|
152
|
+
}
|
|
153
|
+
beforeRender(state) {
|
|
154
|
+
const parent = getLocalState(this.materialRef.nativeElement).parent;
|
|
155
|
+
if (!parent)
|
|
156
|
+
return;
|
|
157
|
+
const { camera } = state;
|
|
158
|
+
this.reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);
|
|
159
|
+
this.cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
|
|
160
|
+
this.rotationMatrix.extractRotation(parent.matrixWorld);
|
|
161
|
+
this.normal.set(0, 0, 1);
|
|
162
|
+
this.normal.applyMatrix4(this.rotationMatrix);
|
|
163
|
+
this.reflectorWorldPosition.addScaledVector(this.normal, this.get('reflectorOffset'));
|
|
164
|
+
this.view.subVectors(this.reflectorWorldPosition, this.cameraWorldPosition);
|
|
165
|
+
// Avoid rendering when reflector is facing away
|
|
166
|
+
if (this.view.dot(this.normal) > 0)
|
|
167
|
+
return;
|
|
168
|
+
this.view.reflect(this.normal).negate();
|
|
169
|
+
this.view.add(this.reflectorWorldPosition);
|
|
170
|
+
this.rotationMatrix.extractRotation(camera.matrixWorld);
|
|
171
|
+
this.lookAtPosition.set(0, 0, -1);
|
|
172
|
+
this.lookAtPosition.applyMatrix4(this.rotationMatrix);
|
|
173
|
+
this.lookAtPosition.add(this.cameraWorldPosition);
|
|
174
|
+
this.target.subVectors(this.reflectorWorldPosition, this.lookAtPosition);
|
|
175
|
+
this.target.reflect(this.normal).negate();
|
|
176
|
+
this.target.add(this.reflectorWorldPosition);
|
|
177
|
+
this.virtualCamera.position.copy(this.view);
|
|
178
|
+
this.virtualCamera.up.set(0, 1, 0);
|
|
179
|
+
this.virtualCamera.up.applyMatrix4(this.rotationMatrix);
|
|
180
|
+
this.virtualCamera.up.reflect(this.normal);
|
|
181
|
+
this.virtualCamera.lookAt(this.target);
|
|
182
|
+
this.virtualCamera.far = camera.far; // Used in WebGLBackground
|
|
183
|
+
this.virtualCamera.updateMatrixWorld();
|
|
184
|
+
this.virtualCamera.projectionMatrix.copy(camera.projectionMatrix);
|
|
185
|
+
// Update the texture matrix
|
|
186
|
+
this.textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);
|
|
187
|
+
this.textureMatrix.multiply(this.virtualCamera.projectionMatrix);
|
|
188
|
+
this.textureMatrix.multiply(this.virtualCamera.matrixWorldInverse);
|
|
189
|
+
this.textureMatrix.multiply(parent.matrixWorld);
|
|
190
|
+
// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
|
|
191
|
+
// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
|
|
192
|
+
this.reflectorPlane.setFromNormalAndCoplanarPoint(this.normal, this.reflectorWorldPosition);
|
|
193
|
+
this.reflectorPlane.applyMatrix4(this.virtualCamera.matrixWorldInverse);
|
|
194
|
+
this.clipPlane.set(this.reflectorPlane.normal.x, this.reflectorPlane.normal.y, this.reflectorPlane.normal.z, this.reflectorPlane.constant);
|
|
195
|
+
const projectionMatrix = this.virtualCamera.projectionMatrix;
|
|
196
|
+
this.q.x = (Math.sign(this.clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];
|
|
197
|
+
this.q.y = (Math.sign(this.clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];
|
|
198
|
+
this.q.z = -1.0;
|
|
199
|
+
this.q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];
|
|
200
|
+
// Calculate the scaled plane vector
|
|
201
|
+
this.clipPlane.multiplyScalar(2.0 / this.clipPlane.dot(this.q));
|
|
202
|
+
// Replacing the third row of the projection matrix
|
|
203
|
+
projectionMatrix.elements[2] = this.clipPlane.x;
|
|
204
|
+
projectionMatrix.elements[6] = this.clipPlane.y;
|
|
205
|
+
projectionMatrix.elements[10] = this.clipPlane.z + 1.0;
|
|
206
|
+
projectionMatrix.elements[14] = this.clipPlane.w;
|
|
207
|
+
}
|
|
208
|
+
onBeforeRender(state) {
|
|
209
|
+
if (!this.materialRef.nativeElement)
|
|
210
|
+
return;
|
|
211
|
+
const parent = getLocalState(this.materialRef.nativeElement).parent;
|
|
212
|
+
if (!parent)
|
|
213
|
+
return;
|
|
214
|
+
const { gl, scene } = state;
|
|
215
|
+
const { hasBlur } = this.get();
|
|
216
|
+
const { fbo1, fbo2, blurPass } = this.get('reflectorEntities');
|
|
217
|
+
if (fbo1 && fbo2 && blurPass) {
|
|
218
|
+
parent.visible = false;
|
|
219
|
+
const currentXrEnabled = gl.xr.enabled;
|
|
220
|
+
const currentShadowAutoUpdate = gl.shadowMap.autoUpdate;
|
|
221
|
+
this.beforeRender(state);
|
|
222
|
+
gl.xr.enabled = false;
|
|
223
|
+
gl.shadowMap.autoUpdate = false;
|
|
224
|
+
gl.setRenderTarget(fbo1);
|
|
225
|
+
gl.state.buffers.depth.setMask(true);
|
|
226
|
+
if (!gl.autoClear)
|
|
227
|
+
gl.clear();
|
|
228
|
+
gl.render(scene, this.virtualCamera);
|
|
229
|
+
if (hasBlur)
|
|
230
|
+
blurPass.render(gl, fbo1, fbo2);
|
|
231
|
+
gl.xr.enabled = currentXrEnabled;
|
|
232
|
+
gl.shadowMap.autoUpdate = currentShadowAutoUpdate;
|
|
233
|
+
parent.visible = true;
|
|
234
|
+
gl.setRenderTarget(null);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
NgtsMeshReflectorMaterial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsMeshReflectorMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
239
|
+
NgtsMeshReflectorMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: NgtsMeshReflectorMaterial, isStandalone: true, selector: "ngts-mesh-reflector-material", inputs: { materialRef: "materialRef", resolution: "resolution", mixBlur: "mixBlur", mixStrength: "mixStrength", blur: "blur", mirror: "mirror", minDepthThreshold: "minDepthThreshold", maxDepthThreshold: "maxDepthThreshold", depthScale: "depthScale", depthToBlurRatioBias: "depthToBlurRatioBias", distortionMap: "distortionMap", distortion: "distortion", mixContrast: "mixContrast", reflectorOffset: "reflectorOffset" }, usesInheritance: true, ngImport: i0, template: `
|
|
240
|
+
<ngt-mesh-reflector-material
|
|
241
|
+
ngtCompound
|
|
242
|
+
attach="material"
|
|
243
|
+
*ngIf="defines$ | ngtPush as defines"
|
|
244
|
+
[ref]="materialRef"
|
|
245
|
+
[defines]="defines"
|
|
246
|
+
[mirror]="reflectorProps.mirror"
|
|
247
|
+
[textureMatrix]="reflectorProps.textureMatrix"
|
|
248
|
+
[mixBlur]="reflectorProps.mixBlur"
|
|
249
|
+
[tDiffuse]="reflectorProps.tDiffuse"
|
|
250
|
+
[tDepth]="reflectorProps.tDepth"
|
|
251
|
+
[tDiffuseBlur]="reflectorProps.tDiffuseBlur"
|
|
252
|
+
[hasBlur]="reflectorProps.hasBlur"
|
|
253
|
+
[mixStrength]="reflectorProps.mixStrength"
|
|
254
|
+
[minDepthThreshold]="reflectorProps.minDepthThreshold"
|
|
255
|
+
[maxDepthThreshold]="reflectorProps.maxDepthThreshold"
|
|
256
|
+
[depthScale]="reflectorProps.depthScale"
|
|
257
|
+
[depthToBlurRatioBias]="reflectorProps.depthToBlurRatioBias"
|
|
258
|
+
[distortion]="reflectorProps.distortion"
|
|
259
|
+
[distortionMap]="reflectorProps.distortionMap"
|
|
260
|
+
[mixContrast]="reflectorProps.mixContrast"
|
|
261
|
+
>
|
|
262
|
+
<ng-content />
|
|
263
|
+
</ngt-mesh-reflector-material>
|
|
264
|
+
`, isInline: true, dependencies: [{ kind: "pipe", type: NgtPush, name: "ngtPush" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
265
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsMeshReflectorMaterial, decorators: [{
|
|
266
|
+
type: Component,
|
|
267
|
+
args: [{
|
|
268
|
+
selector: 'ngts-mesh-reflector-material',
|
|
269
|
+
standalone: true,
|
|
270
|
+
template: `
|
|
271
|
+
<ngt-mesh-reflector-material
|
|
272
|
+
ngtCompound
|
|
273
|
+
attach="material"
|
|
274
|
+
*ngIf="defines$ | ngtPush as defines"
|
|
275
|
+
[ref]="materialRef"
|
|
276
|
+
[defines]="defines"
|
|
277
|
+
[mirror]="reflectorProps.mirror"
|
|
278
|
+
[textureMatrix]="reflectorProps.textureMatrix"
|
|
279
|
+
[mixBlur]="reflectorProps.mixBlur"
|
|
280
|
+
[tDiffuse]="reflectorProps.tDiffuse"
|
|
281
|
+
[tDepth]="reflectorProps.tDepth"
|
|
282
|
+
[tDiffuseBlur]="reflectorProps.tDiffuseBlur"
|
|
283
|
+
[hasBlur]="reflectorProps.hasBlur"
|
|
284
|
+
[mixStrength]="reflectorProps.mixStrength"
|
|
285
|
+
[minDepthThreshold]="reflectorProps.minDepthThreshold"
|
|
286
|
+
[maxDepthThreshold]="reflectorProps.maxDepthThreshold"
|
|
287
|
+
[depthScale]="reflectorProps.depthScale"
|
|
288
|
+
[depthToBlurRatioBias]="reflectorProps.depthToBlurRatioBias"
|
|
289
|
+
[distortion]="reflectorProps.distortion"
|
|
290
|
+
[distortionMap]="reflectorProps.distortionMap"
|
|
291
|
+
[mixContrast]="reflectorProps.mixContrast"
|
|
292
|
+
>
|
|
293
|
+
<ng-content />
|
|
294
|
+
</ngt-mesh-reflector-material>
|
|
295
|
+
`,
|
|
296
|
+
imports: [NgtArgs, NgtPush, NgIf],
|
|
297
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
298
|
+
}]
|
|
299
|
+
}], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
|
|
300
|
+
type: Input
|
|
301
|
+
}], resolution: [{
|
|
302
|
+
type: Input
|
|
303
|
+
}], mixBlur: [{
|
|
304
|
+
type: Input
|
|
305
|
+
}], mixStrength: [{
|
|
306
|
+
type: Input
|
|
307
|
+
}], blur: [{
|
|
308
|
+
type: Input
|
|
309
|
+
}], mirror: [{
|
|
310
|
+
type: Input
|
|
311
|
+
}], minDepthThreshold: [{
|
|
312
|
+
type: Input
|
|
313
|
+
}], maxDepthThreshold: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}], depthScale: [{
|
|
316
|
+
type: Input
|
|
317
|
+
}], depthToBlurRatioBias: [{
|
|
318
|
+
type: Input
|
|
319
|
+
}], distortionMap: [{
|
|
320
|
+
type: Input
|
|
321
|
+
}], distortion: [{
|
|
322
|
+
type: Input
|
|
323
|
+
}], mixContrast: [{
|
|
324
|
+
type: Input
|
|
325
|
+
}], reflectorOffset: [{
|
|
326
|
+
type: Input
|
|
327
|
+
}] } });
|
|
328
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9tYXRlcmlhbHMvc3JjL2xpYi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFDSCxNQUFNLEVBQ04sYUFBYSxFQUNiLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osT0FBTyxFQUNQLE9BQU8sRUFFUCxVQUFVLEVBQ1YsUUFBUSxFQUNSLGtCQUFrQixHQUNyQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDOztBQUUvQixNQUFNLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7QUFrQ2xDLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxVQUFVO0lBR3JELElBQWEsVUFBVSxDQUFDLFVBQWtCO1FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFhLE9BQU8sQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFhLFdBQVcsQ0FBQyxXQUFtQjtRQUN4QyxJQUFJ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QnhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBeUJULHVEQUNrQixPQUFPLGdEQUFFLElBQUk7MkZBR3ZCLHlCQUF5QjtrQkFoQ3JDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXlCVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztvQkFDakMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzBFQUVZLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFJTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxvQkFBb0I7c0JBQWhDLEtBQUs7Z0JBSU8sYUFBYTtzQkFBekIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sZUFBZTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIGV4dGVuZCxcbiAgICBnZXRMb2NhbFN0YXRlLFxuICAgIGluamVjdEJlZm9yZVJlbmRlcixcbiAgICBpbmplY3ROZ3RSZWYsXG4gICAgTmd0QXJncyxcbiAgICBOZ3RQdXNoLFxuICAgIE5ndFJlbmRlclN0YXRlLFxuICAgIE5ndFJ4U3RvcmUsXG4gICAgTmd0U3RvcmUsXG4gICAgc3RhcnRXaXRoVW5kZWZpbmVkLFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IEJsdXJQYXNzLCBNZXNoUmVmbGVjdG9yTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5leHRlbmQoeyBNZXNoUmVmbGVjdG9yTWF0ZXJpYWwgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LW1lc2gtcmVmbGVjdG9yLW1hdGVyaWFsXG4gICAgICAgICAgICBuZ3RDb21wb3VuZFxuICAgICAgICAgICAgYXR0YWNoPVwibWF0ZXJpYWxcIlxuICAgICAgICAgICAgKm5nSWY9XCJkZWZpbmVzJCB8IG5ndFB1c2ggYXMgZGVmaW5lc1wiXG4gICAgICAgICAgICBbcmVmXT1cIm1hdGVyaWFsUmVmXCJcbiAgICAgICAgICAgIFtkZWZpbmVzXT1cImRlZmluZXNcIlxuICAgICAgICAgICAgW21pcnJvcl09XCJyZWZsZWN0b3JQcm9wcy5taXJyb3JcIlxuICAgICAgICAgICAgW3RleHR1cmVNYXRyaXhdPVwicmVmbGVjdG9yUHJvcHMudGV4dHVyZU1hdHJpeFwiXG4gICAgICAgICAgICBbbWl4Qmx1cl09XCJyZWZsZWN0b3JQcm9wcy5taXhCbHVyXCJcbiAgICAgICAgICAgIFt0RGlmZnVzZV09XCJyZWZsZWN0b3JQcm9wcy50RGlmZnVzZVwiXG4gICAgICAgICAgICBbdERlcHRoXT1cInJlZmxlY3RvclByb3BzLnREZXB0aFwiXG4gICAgICAgICAgICBbdERpZmZ1c2VCbHVyXT1cInJlZmxlY3RvclByb3BzLnREaWZmdXNlQmx1clwiXG4gICAgICAgICAgICBbaGFzQmx1cl09XCJyZWZsZWN0b3JQcm9wcy5oYXNCbHVyXCJcbiAgICAgICAgICAgIFttaXhTdHJlbmd0aF09XCJyZWZsZWN0b3JQcm9wcy5taXhTdHJlbmd0aFwiXG4gICAgICAgICAgICBbbWluRGVwdGhUaHJlc2hvbGRdPVwicmVmbGVjdG9yUHJvcHMubWluRGVwdGhUaHJlc2hvbGRcIlxuICAgICAgICAgICAgW21heERlcHRoVGhyZXNob2xkXT1cInJlZmxlY3RvclByb3BzLm1heERlcHRoVGhyZXNob2xkXCJcbiAgICAgICAgICAgIFtkZXB0aFNjYWxlXT1cInJlZmxlY3RvclByb3BzLmRlcHRoU2NhbGVcIlxuICAgICAgICAgICAgW2RlcHRoVG9CbHVyUmF0aW9CaWFzXT1cInJlZmxlY3RvclByb3BzLmRlcHRoVG9CbHVyUmF0aW9CaWFzXCJcbiAgICAgICAgICAgIFtkaXN0b3J0aW9uXT1cInJlZmxlY3RvclByb3BzLmRpc3RvcnRpb25cIlxuICAgICAgICAgICAgW2Rpc3RvcnRpb25NYXBdPVwicmVmbGVjdG9yUHJvcHMuZGlzdG9ydGlvbk1hcFwiXG4gICAgICAgICAgICBbbWl4Q29udHJhc3RdPVwicmVmbGVjdG9yUHJvcHMubWl4Q29udHJhc3RcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgICA8L25ndC1tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbD5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ3RBcmdzLCBOZ3RQdXNoLCBOZ0lmXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoUmVmbGVjdG9yTWF0ZXJpYWwgZXh0ZW5kcyBOZ3RSeFN0b3JlIHtcbiAgICBASW5wdXQoKSBtYXRlcmlhbFJlZiA9IGluamVjdE5ndFJlZjxNZXNoUmVmbGVjdG9yTWF0ZXJpYWw+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgcmVzb2x1dGlvbihyZXNvbHV0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyByZXNvbHV0aW9uIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtaXhCbHVyKG1peEJsdXI6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG1peEJsdXIgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1peFN0cmVuZ3RoKG1peFN0cmVuZ3RoOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtaXhTdHJlbmd0aCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYmx1cihibHVyOiBbbnVtYmVyLCBudW1iZXJdIHwgbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYmx1ciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWlycm9yKG1pcnJvcjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWlycm9yIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtaW5EZXB0aFRocmVzaG9sZChtaW5EZXB0aFRocmVzaG9sZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWluRGVwdGhUaHJlc2hvbGQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1heERlcHRoVGhyZXNob2xkKG1heERlcHRoVGhyZXNob2xkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtYXhEZXB0aFRocmVzaG9sZCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGVwdGhTY2FsZShkZXB0aFNjYWxlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkZXB0aFNjYWxlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkZXB0aFRvQmx1clJhdGlvQmlhcyhkZXB0aFRvQmx1clJhdGlvQmlhczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGVwdGhUb0JsdXJSYXRpb0JpYXMgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRpc3RvcnRpb25NYXAoZGlzdG9ydGlvbk1hcDogVEhSRUUuVGV4dHVyZSkge1xuICAgICAgICB0aGlzLnNldCh7IGRpc3RvcnRpb25NYXAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRpc3RvcnRpb24oZGlzdG9ydGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGlzdG9ydGlvbiB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWl4Q29udHJhc3QobWl4Q29udHJhc3Q6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG1peENvbnRyYXN0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCByZWZsZWN0b3JPZmZzZXQocmVmbGVjdG9yT2Zmc2V0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyByZWZsZWN0b3JPZmZzZXQgfSk7XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgZGVmaW5lcyQgPSB0aGlzLnNlbGVjdCgncmVmbGVjdG9yRW50aXRpZXMnLCAncmVmbGVjdG9yUHJvcHMnLCAnZGVmaW5lcycpLnBpcGUoZGVib3VuY2VUaW1lKDApKTtcblxuICAgIGdldCByZWZsZWN0b3JQcm9wcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdyZWZsZWN0b3JFbnRpdGllcycsICdyZWZsZWN0b3JQcm9wcycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWZsZWN0b3JQbGFuZSA9IG5ldyBUSFJFRS5QbGFuZSgpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbm9ybWFsID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlZmxlY3RvcldvcmxkUG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FtZXJhV29ybGRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3RhdGlvbk1hdHJpeCA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb29rQXRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAsIC0xKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaXBQbGFuZSA9IG5ldyBUSFJFRS5WZWN0b3I0KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBxID0gbmV3IFRIUkVFLlZlY3RvcjQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRleHR1cmVNYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlydHVhbENhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICBtaXhCbHVyOiAwLFxuICAgICAgICAgICAgbWl4U3RyZW5ndGg6IDEsXG4gICAgICAgICAgICByZXNvbHV0aW9uOiAyNTYsXG4gICAgICAgICAgICBibHVyOiBbMCwgMF0sXG4gICAgICAgICAgICBtaW5EZXB0aFRocmVzaG9sZDogMC45LFxuICAgICAgICAgICAgbWF4RGVwdGhUaHJlc2hvbGQ6IDEsXG4gICAgICAgICAgICBkZXB0aFNjYWxlOiAwLFxuICAgICAgICAgICAgZGVwdGhUb0JsdXJSYXRpb0JpYXM6IDAuMjUsXG4gICAgICAgICAgICBtaXJyb3I6IDAsXG4gICAgICAgICAgICBkaXN0b3J0aW9uOiAxLFxuICAgICAgICAgICAgbWl4Q29udHJhc3Q6IDEsXG4gICAgICAgICAgICByZWZsZWN0b3JPZmZzZXQ6IDAsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuY29ubmVjdChcbiAgICAgICAgICAgICdub3JtYWxpemVkQmx1cicsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdCgnYmx1cicpLnBpcGUobWFwKChibHVyKSA9PiAoQXJyYXkuaXNBcnJheShibHVyKSA/IGJsdXIgOiBbYmx1ciwgYmx1cl0pKSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb25uZWN0KCdoYXNCbHVyJywgdGhpcy5zZWxlY3QoJ25vcm1hbGl6ZWRCbHVyJykucGlwZShtYXAoKFt4LCB5XSkgPT4geCArIHkgPiAwKSkpO1xuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAncmVmbGVjdG9yRW50aXRpZXMnLFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ25vcm1hbGl6ZWRCbHVyJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ3Jlc29sdXRpb24nKSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgnbWlycm9yJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2hhc0JsdXInKSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgnbWl4Qmx1cicpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdtaXhTdHJlbmd0aCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdtaW5EZXB0aFRocmVzaG9sZCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdtYXhEZXB0aFRocmVzaG9sZCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdkZXB0aFNjYWxlJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2RlcHRoVG9CbHVyUmF0aW9CaWFzJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2Rpc3RvcnRpb24nKSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgnZGlzdG9ydGlvbk1hcCcpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdtaXhDb250cmFzdCcpLFxuICAgICAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgIChbXG4gICAgICAgICAgICAgICAgICAgICAgICBnbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsdXIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmx1cixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1peEJsdXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaXhTdHJlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbkRlcHRoVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4RGVwdGhUaHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhUb0JsdXJSYXRpb0JpYXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0b3J0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzdG9ydGlvbk1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1peENvbnRyYXN0LFxuICAgICAgICAgICAgICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkZpbHRlcjogVEhSRUUuTGluZWFyRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ0ZpbHRlcjogVEhSRUUuTGluZWFyRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBnbC5vdXRwdXRFbmNvZGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUSFJFRS5IYWxmRmxvYXRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZibzEgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgcGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYm8xLmRlcHRoQnVmZmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZibzEuZGVwdGhUZXh0dXJlID0gbmV3IFRIUkVFLkRlcHRoVGV4dHVyZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZibzEuZGVwdGhUZXh0dXJlLmZvcm1hdCA9IFRIUkVFLkRlcHRoRm9ybWF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgZmJvMS5kZXB0aFRleHR1cmUudHlwZSA9IFRIUkVFLlVuc2lnbmVkU2hvcnRUeXBlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmYm8yID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0KHJlc29sdXRpb24sIHJlc29sdXRpb24sIHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmx1clBhc3MgPSBuZXcgQmx1clBhc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGJsdXJbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBibHVyWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkRlcHRoVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heERlcHRoVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoU2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhUb0JsdXJSYXRpb0JpYXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZmxlY3RvclByb3BzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTWF0cml4OiB0aGlzLnRleHR1cmVNYXRyaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWl4Qmx1cixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0RGlmZnVzZTogZmJvMS50ZXh0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHREZXB0aDogZmJvMS5kZXB0aFRleHR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdERpZmZ1c2VCbHVyOiBmYm8yLnRleHR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmx1cixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXhTdHJlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5EZXB0aFRocmVzaG9sZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhEZXB0aFRocmVzaG9sZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoVG9CbHVyUmF0aW9CaWFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RvcnRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdG9ydGlvbk1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXhDb250cmFzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTRV9CTFVSOiBoYXNCbHVyID8gJycgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTRV9ERVBUSDogZGVwdGhTY2FsZSA+IDAgPyAnJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNFX0RJU1RPUlRJT046IGRpc3RvcnRpb25NYXAgPyAnJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZmJvMSwgZmJvMiwgYmx1clBhc3MsIHJlZmxlY3RvclByb3BzIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKHRoaXMub25CZWZvcmVSZW5kZXIuYmluZCh0aGlzKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMubWF0ZXJpYWxSZWYpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVmb3JlUmVuZGVyKHN0YXRlOiBOZ3RSZW5kZXJTdGF0ZSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXRMb2NhbFN0YXRlKHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCkucGFyZW50O1xuICAgICAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHsgY2FtZXJhIH0gPSBzdGF0ZTtcblxuICAgICAgICB0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHBhcmVudC5tYXRyaXhXb3JsZCk7XG4gICAgICAgIHRoaXMuY2FtZXJhV29ybGRQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcbiAgICAgICAgdGhpcy5yb3RhdGlvbk1hdHJpeC5leHRyYWN0Um90YXRpb24ocGFyZW50Lm1hdHJpeFdvcmxkKTtcbiAgICAgICAgdGhpcy5ub3JtYWwuc2V0KDAsIDAsIDEpO1xuICAgICAgICB0aGlzLm5vcm1hbC5hcHBseU1hdHJpeDQodGhpcy5yb3RhdGlvbk1hdHJpeCk7XG4gICAgICAgIHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbi5hZGRTY2FsZWRWZWN0b3IodGhpcy5ub3JtYWwsIHRoaXMuZ2V0KCdyZWZsZWN0b3JPZmZzZXQnKSk7XG4gICAgICAgIHRoaXMudmlldy5zdWJWZWN0b3JzKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbiwgdGhpcy5jYW1lcmFXb3JsZFBvc2l0aW9uKTtcbiAgICAgICAgLy8gQXZvaWQgcmVuZGVyaW5nIHdoZW4gcmVmbGVjdG9yIGlzIGZhY2luZyBhd2F5XG4gICAgICAgIGlmICh0aGlzLnZpZXcuZG90KHRoaXMubm9ybWFsKSA+IDApIHJldHVybjtcbiAgICAgICAgdGhpcy52aWV3LnJlZmxlY3QodGhpcy5ub3JtYWwpLm5lZ2F0ZSgpO1xuICAgICAgICB0aGlzLnZpZXcuYWRkKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMucm90YXRpb25NYXRyaXguZXh0cmFjdFJvdGF0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG4gICAgICAgIHRoaXMubG9va0F0UG9zaXRpb24uc2V0KDAsIDAsIC0xKTtcbiAgICAgICAgdGhpcy5sb29rQXRQb3NpdGlvbi5hcHBseU1hdHJpeDQodGhpcy5yb3RhdGlvbk1hdHJpeCk7XG4gICAgICAgIHRoaXMubG9va0F0UG9zaXRpb24uYWRkKHRoaXMuY2FtZXJhV29ybGRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMudGFyZ2V0LnN1YlZlY3RvcnModGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uLCB0aGlzLmxvb2tBdFBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy50YXJnZXQucmVmbGVjdCh0aGlzLm5vcm1hbCkubmVnYXRlKCk7XG4gICAgICAgIHRoaXMudGFyZ2V0LmFkZCh0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24pO1xuICAgICAgICB0aGlzLnZpcnR1YWxDYW1lcmEucG9zaXRpb24uY29weSh0aGlzLnZpZXcpO1xuICAgICAgICB0aGlzLnZpcnR1YWxDYW1lcmEudXAuc2V0KDAsIDEsIDApO1xuICAgICAgICB0aGlzLnZpcnR1YWxDYW1lcmEudXAuYXBwbHlNYXRyaXg0KHRoaXMucm90YXRpb25NYXRyaXgpO1xuICAgICAgICB0aGlzLnZpcnR1YWxDYW1lcmEudXAucmVmbGVjdCh0aGlzLm5vcm1hbCk7XG4gICAgICAgIHRoaXMudmlydHVhbENhbWVyYS5sb29rQXQodGhpcy50YXJnZXQpO1xuICAgICAgICB0aGlzLnZpcnR1YWxDYW1lcmEuZmFyID0gY2FtZXJhLmZhcjsgLy8gVXNlZCBpbiBXZWJHTEJhY2tncm91bmRcbiAgICAgICAgdGhpcy52aXJ0dWFsQ2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG4gICAgICAgIHRoaXMudmlydHVhbENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkoY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuICAgICAgICAvLyBVcGRhdGUgdGhlIHRleHR1cmUgbWF0cml4XG4gICAgICAgIHRoaXMudGV4dHVyZU1hdHJpeC5zZXQoMC41LCAwLjAsIDAuMCwgMC41LCAwLjAsIDAuNSwgMC4wLCAwLjUsIDAuMCwgMC4wLCAwLjUsIDAuNSwgMC4wLCAwLjAsIDAuMCwgMS4wKTtcbiAgICAgICAgdGhpcy50ZXh0dXJlTWF0cml4Lm11bHRpcGx5KHRoaXMudmlydHVhbENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcbiAgICAgICAgdGhpcy50ZXh0dXJlTWF0cml4Lm11bHRpcGx5KHRoaXMudmlydHVhbENhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xuICAgICAgICB0aGlzLnRleHR1cmVNYXRyaXgubXVsdGlwbHkocGFyZW50Lm1hdHJpeFdvcmxkKTtcbiAgICAgICAgLy8gTm93IHVwZGF0ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIG5ldyBjbGlwIHBsYW5lLCBpbXBsZW1lbnRpbmcgY29kZSBmcm9tOiBodHRwOi8vd3d3LnRlcmF0aG9uLmNvbS9jb2RlL29ibGlxdWUuaHRtbFxuICAgICAgICAvLyBQYXBlciBleHBsYWluaW5nIHRoaXMgdGVjaG5pcXVlOiBodHRwOi8vd3d3LnRlcmF0aG9uLmNvbS9sZW5neWVsL0xlbmd5ZWwtT2JsaXF1ZS5wZGZcbiAgICAgICAgdGhpcy5yZWZsZWN0b3JQbGFuZS5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0aGlzLm5vcm1hbCwgdGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5yZWZsZWN0b3JQbGFuZS5hcHBseU1hdHJpeDQodGhpcy52aXJ0dWFsQ2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG4gICAgICAgIHRoaXMuY2xpcFBsYW5lLnNldChcbiAgICAgICAgICAgIHRoaXMucmVmbGVjdG9yUGxhbmUubm9ybWFsLngsXG4gICAgICAgICAgICB0aGlzLnJlZmxlY3RvclBsYW5lLm5vcm1hbC55LFxuICAgICAgICAgICAgdGhpcy5yZWZsZWN0b3JQbGFuZS5ub3JtYWwueixcbiAgICAgICAgICAgIHRoaXMucmVmbGVjdG9yUGxhbmUuY29uc3RhbnRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbk1hdHJpeCA9IHRoaXMudmlydHVhbENhbWVyYS5wcm9qZWN0aW9uTWF0cml4O1xuICAgICAgICB0aGlzLnEueCA9IChNYXRoLnNpZ24odGhpcy5jbGlwUGxhbmUueCkgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzhdKSAvIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMF07XG4gICAgICAgIHRoaXMucS55ID0gKE1hdGguc2lnbih0aGlzLmNsaXBQbGFuZS55KSArIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbOV0pIC8gcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s1XTtcbiAgICAgICAgdGhpcy5xLnogPSAtMS4wO1xuICAgICAgICB0aGlzLnEudyA9ICgxLjAgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzEwXSkgLyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzE0XTtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzY2FsZWQgcGxhbmUgdmVjdG9yXG4gICAgICAgIHRoaXMuY2xpcFBsYW5lLm11bHRpcGx5U2NhbGFyKDIuMCAvIHRoaXMuY2xpcFBsYW5lLmRvdCh0aGlzLnEpKTtcbiAgICAgICAgLy8gUmVwbGFjaW5nIHRoZSB0aGlyZCByb3cgb2YgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMl0gPSB0aGlzLmNsaXBQbGFuZS54O1xuICAgICAgICBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzZdID0gdGhpcy5jbGlwUGxhbmUueTtcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxMF0gPSB0aGlzLmNsaXBQbGFuZS56ICsgMS4wO1xuICAgICAgICBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzE0XSA9IHRoaXMuY2xpcFBsYW5lLnc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkJlZm9yZVJlbmRlcihzdGF0ZTogTmd0UmVuZGVyU3RhdGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZ2V0TG9jYWxTdGF0ZSh0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQpLnBhcmVudDtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IGdsLCBzY2VuZSB9ID0gc3RhdGU7XG4gICAgICAgIGNvbnN0IHsgaGFzQmx1ciB9ID0gdGhpcy5nZXQoKTtcbiAgICAgICAgY29uc3QgeyBmYm8xLCBmYm8yLCBibHVyUGFzcyB9ID0gdGhpcy5nZXQoJ3JlZmxlY3RvckVudGl0aWVzJyk7XG5cbiAgICAgICAgaWYgKGZibzEgJiYgZmJvMiAmJiBibHVyUGFzcykge1xuICAgICAgICAgICAgcGFyZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRYckVuYWJsZWQgPSBnbC54ci5lbmFibGVkO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFNoYWRvd0F1dG9VcGRhdGUgPSBnbC5zaGFkb3dNYXAuYXV0b1VwZGF0ZTtcbiAgICAgICAgICAgIHRoaXMuYmVmb3JlUmVuZGVyKHN0YXRlKTtcbiAgICAgICAgICAgIGdsLnhyLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBnbC5zZXRSZW5kZXJUYXJnZXQoZmJvMSk7XG4gICAgICAgICAgICBnbC5zdGF0ZS5idWZmZXJzLmRlcHRoLnNldE1hc2sodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWdsLmF1dG9DbGVhcikgZ2wuY2xlYXIoKTtcbiAgICAgICAgICAgIGdsLnJlbmRlcihzY2VuZSwgdGhpcy52aXJ0dWFsQ2FtZXJhKTtcbiAgICAgICAgICAgIGlmIChoYXNCbHVyKSBibHVyUGFzcy5yZW5kZXIoZ2wsIGZibzEsIGZibzIpO1xuICAgICAgICAgICAgZ2wueHIuZW5hYmxlZCA9IGN1cnJlbnRYckVuYWJsZWQ7XG4gICAgICAgICAgICBnbC5zaGFkb3dNYXAuYXV0b1VwZGF0ZSA9IGN1cnJlbnRTaGFkb3dBdXRvVXBkYXRlO1xuICAgICAgICAgICAgcGFyZW50LnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgZ2wuc2V0UmVuZGVyVGFyZ2V0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
|
|
2
|
+
import { extend, injectBeforeRender, injectNgtRef, NgtArgs, NgtRxStore } from 'angular-three';
|
|
3
|
+
import { MeshWobbleMaterial } from 'angular-three-soba/shaders';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
extend({ MeshWobbleMaterial });
|
|
6
|
+
export class NgtsMeshWobbleMaterial extends NgtRxStore {
|
|
7
|
+
set time(time) {
|
|
8
|
+
this.set({ time });
|
|
9
|
+
}
|
|
10
|
+
set factor(factor) {
|
|
11
|
+
this.set({ factor });
|
|
12
|
+
}
|
|
13
|
+
set speed(speed) {
|
|
14
|
+
this.set({ speed });
|
|
15
|
+
}
|
|
16
|
+
initialize() {
|
|
17
|
+
super.initialize();
|
|
18
|
+
this.set({ speed: 1, time: 0, factor: 1 });
|
|
19
|
+
}
|
|
20
|
+
constructor() {
|
|
21
|
+
super();
|
|
22
|
+
this.material = new MeshWobbleMaterial();
|
|
23
|
+
this.materialRef = injectNgtRef();
|
|
24
|
+
injectBeforeRender(({ clock }) => {
|
|
25
|
+
this.material.time = clock.getElapsedTime() * this.get('speed');
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
NgtsMeshWobbleMaterial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsMeshWobbleMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
+
NgtsMeshWobbleMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: NgtsMeshWobbleMaterial, isStandalone: true, selector: "ngts-mesh-wobble-material", inputs: { materialRef: "materialRef", time: "time", factor: "factor", speed: "speed" }, usesInheritance: true, ngImport: i0, template: `
|
|
31
|
+
<ngt-primitive
|
|
32
|
+
*args="[material]"
|
|
33
|
+
[ref]="materialRef"
|
|
34
|
+
[time]="get('time')"
|
|
35
|
+
[factor]="get('factor')"
|
|
36
|
+
attach="material"
|
|
37
|
+
ngtCompound
|
|
38
|
+
/>
|
|
39
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsMeshWobbleMaterial, decorators: [{
|
|
41
|
+
type: Component,
|
|
42
|
+
args: [{
|
|
43
|
+
selector: 'ngts-mesh-wobble-material',
|
|
44
|
+
standalone: true,
|
|
45
|
+
template: `
|
|
46
|
+
<ngt-primitive
|
|
47
|
+
*args="[material]"
|
|
48
|
+
[ref]="materialRef"
|
|
49
|
+
[time]="get('time')"
|
|
50
|
+
[factor]="get('factor')"
|
|
51
|
+
attach="material"
|
|
52
|
+
ngtCompound
|
|
53
|
+
/>
|
|
54
|
+
`,
|
|
55
|
+
imports: [NgtArgs],
|
|
56
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
57
|
+
}]
|
|
58
|
+
}], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
|
|
59
|
+
type: Input
|
|
60
|
+
}], time: [{
|
|
61
|
+
type: Input
|
|
62
|
+
}], factor: [{
|
|
63
|
+
type: Input
|
|
64
|
+
}], speed: [{
|
|
65
|
+
type: Input
|
|
66
|
+
}] } });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC13b2JibGUtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9tYXRlcmlhbHMvc3JjL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbC9tZXNoLXdvYmJsZS1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUVoRSxNQUFNLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFrQi9CLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxVQUFVO0lBS2xELElBQWEsSUFBSSxDQUFDLElBQVk7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQWEsTUFBTSxDQUFDLE1BQWM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVRLFVBQVU7UUFDZixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQXRCSCxhQUFRLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBRXBDLGdCQUFXLEdBQUcsWUFBWSxFQUFzQixDQUFDO1FBcUJ0RCxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O21IQTNCUSxzQkFBc0I7dUdBQXRCLHNCQUFzQixvTUFickI7Ozs7Ozs7OztLQVNULDREQUNTLE9BQU87MkZBR1Isc0JBQXNCO2tCQWhCbEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7S0FTVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzswRUFJWSxXQUFXO3NCQUFuQixLQUFLO2dCQUVPLElBQUk7c0JBQWhCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdE5ndFJlZiwgTmd0QXJncywgTmd0UnhTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTWVzaFdvYmJsZU1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMnO1xuXG5leHRlbmQoeyBNZXNoV29iYmxlTWF0ZXJpYWwgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1tZXNoLXdvYmJsZS1tYXRlcmlhbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXByaW1pdGl2ZVxuICAgICAgICAgICAgKmFyZ3M9XCJbbWF0ZXJpYWxdXCJcbiAgICAgICAgICAgIFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuICAgICAgICAgICAgW3RpbWVdPVwiZ2V0KCd0aW1lJylcIlxuICAgICAgICAgICAgW2ZhY3Rvcl09XCJnZXQoJ2ZhY3RvcicpXCJcbiAgICAgICAgICAgIGF0dGFjaD1cIm1hdGVyaWFsXCJcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgIC8+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTWVzaFdvYmJsZU1hdGVyaWFsIGV4dGVuZHMgTmd0UnhTdG9yZSB7XG4gICAgcmVhZG9ubHkgbWF0ZXJpYWwgPSBuZXcgTWVzaFdvYmJsZU1hdGVyaWFsKCk7XG5cbiAgICBASW5wdXQoKSBtYXRlcmlhbFJlZiA9IGluamVjdE5ndFJlZjxNZXNoV29iYmxlTWF0ZXJpYWw+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgdGltZSh0aW1lOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0aW1lIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmYWN0b3IoZmFjdG9yOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmYWN0b3IgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNwZWVkKHNwZWVkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzcGVlZCB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHsgc3BlZWQ6IDEsIHRpbWU6IDAsIGZhY3RvcjogMSB9KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGNsb2NrIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudGltZSA9IGNsb2NrLmdldEVsYXBzZWRUaW1lKCkgKiB0aGlzLmdldCgnc3BlZWQnKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,2 +1,7 @@
|
|
|
1
|
+
export * from './lib/blur-pass/blur-pass';
|
|
2
|
+
export * from './lib/convolution-material/convolution-material';
|
|
3
|
+
export * from './lib/mesh-distort-material/mesh-distort-material';
|
|
4
|
+
export * from './lib/mesh-reflector-material/mesh-reflector-material';
|
|
5
|
+
export * from './lib/mesh-wobble-material/mesh-wobble-material';
|
|
1
6
|
export * from './lib/shader-material/shader-material';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyx1Q0FBdUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2JsdXItcGFzcy9ibHVyLXBhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udm9sdXRpb24tbWF0ZXJpYWwvY29udm9sdXRpb24tbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1kaXN0b3J0LW1hdGVyaWFsL21lc2gtZGlzdG9ydC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbC9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFkZXItbWF0ZXJpYWwvc2hhZGVyLW1hdGVyaWFsJztcbiJdfQ==
|