angular-three-soba 1.10.0 → 1.11.0
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/abstractions/index.d.ts +1 -0
- package/abstractions/lib/edges/edges.d.ts +18 -0
- package/cameras/index.d.ts +1 -0
- package/cameras/lib/camera/camera-content.d.ts +1 -1
- package/cameras/lib/cube-camera/cube-camera.d.ts +27 -0
- package/esm2020/abstractions/index.mjs +2 -1
- package/esm2020/abstractions/lib/edges/edges.mjs +95 -0
- package/esm2020/cameras/index.mjs +2 -1
- package/esm2020/cameras/lib/camera/camera-content.mjs +1 -1
- package/esm2020/cameras/lib/cube-camera/cube-camera.mjs +130 -0
- package/esm2020/materials/index.mjs +3 -1
- package/esm2020/materials/lib/mesh-refraction-material/mesh-refraction-material.mjs +157 -0
- package/esm2020/materials/lib/mesh-transmission-material/mesh-transmission-material.mjs +240 -0
- package/esm2020/misc/lib/fbo/fbo.mjs +5 -4
- package/esm2020/shaders/index.mjs +5 -1
- package/esm2020/shaders/lib/caustics-material/caustics-material.mjs +128 -0
- package/esm2020/shaders/lib/caustics-projection-material/caustics-projection-material.mjs +33 -0
- package/esm2020/shaders/lib/discard-material/discard-material.mjs +3 -0
- package/esm2020/shaders/lib/mesh-transmission-material/mesh-transmission-material.mjs +268 -0
- package/esm2020/staging/index.mjs +2 -1
- package/esm2020/staging/lib/accumulative-shadows/progressive-light-map.mjs +2 -3
- package/esm2020/staging/lib/caustics/caustics.mjs +364 -0
- package/fesm2015/angular-three-soba-abstractions.mjs +91 -2
- package/fesm2015/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2015/angular-three-soba-cameras.mjs +127 -4
- package/fesm2015/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2015/angular-three-soba-materials.mjs +389 -2
- package/fesm2015/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2015/angular-three-soba-misc.mjs +4 -3
- package/fesm2015/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2015/angular-three-soba-shaders.mjs +454 -31
- package/fesm2015/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2015/angular-three-soba-staging.mjs +363 -9
- package/fesm2015/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2020/angular-three-soba-abstractions.mjs +91 -2
- package/fesm2020/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2020/angular-three-soba-cameras.mjs +127 -4
- package/fesm2020/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2020/angular-three-soba-materials.mjs +387 -2
- package/fesm2020/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2020/angular-three-soba-misc.mjs +4 -3
- package/fesm2020/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2020/angular-three-soba-shaders.mjs +460 -34
- package/fesm2020/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2020/angular-three-soba-staging.mjs +362 -9
- package/fesm2020/angular-three-soba-staging.mjs.map +1 -1
- package/materials/index.d.ts +2 -0
- package/materials/lib/mesh-refraction-material/mesh-refraction-material.d.ts +28 -0
- package/materials/lib/mesh-transmission-material/mesh-transmission-material.d.ts +47 -0
- package/misc/lib/fbo/fbo.d.ts +8 -6
- package/package.json +2 -2
- package/plugin/package.json +1 -1
- package/shaders/index.d.ts +4 -0
- package/shaders/lib/caustics-material/caustics-material.d.ts +4 -0
- package/shaders/lib/caustics-projection-material/caustics-projection-material.d.ts +4 -0
- package/shaders/lib/discard-material/discard-material.d.ts +3 -0
- package/shaders/lib/mesh-transmission-material/mesh-transmission-material.d.ts +25 -0
- package/staging/index.d.ts +1 -0
- package/staging/lib/caustics/caustics.d.ts +48 -0
- package/staging/lib/environment/environment-cube.d.ts +1 -1
- package/staging/lib/environment/environment-ground.d.ts +1 -1
- package/staging/lib/environment/utils.d.ts +1 -1
package/abstractions/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './lib/billboard/billboard';
|
|
2
2
|
export * from './lib/catmull-rom-line/catmull-rom-line';
|
|
3
3
|
export * from './lib/cubic-bezier-line/cubic-bezier-line';
|
|
4
|
+
export * from './lib/edges/edges';
|
|
4
5
|
export * from './lib/gizmo-helper/gizmo-helper';
|
|
5
6
|
export * from './lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube';
|
|
6
7
|
export * from './lib/gizmo-helper/gizmo-viewport/gizmo-viewport';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { NgtAnyRecord, NgtRxStore } from 'angular-three';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class NgtsEdges extends NgtRxStore implements OnInit {
|
|
6
|
+
edgesRef: import("angular-three").NgtInjectedRef<THREE.LineSegments<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>;
|
|
7
|
+
set threshold(threshold: number);
|
|
8
|
+
set color(color: THREE.ColorRepresentation);
|
|
9
|
+
set geometry(geometry: THREE.BufferGeometry);
|
|
10
|
+
set userData(userData: NgtAnyRecord);
|
|
11
|
+
withChildren: boolean;
|
|
12
|
+
readonly noop: () => null;
|
|
13
|
+
initialize(): void;
|
|
14
|
+
ngOnInit(): void;
|
|
15
|
+
private setupGeometry;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsEdges, never>;
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsEdges, "ngts-edges", never, { "edgesRef": "edgesRef"; "threshold": "threshold"; "color": "color"; "geometry": "geometry"; "userData": "userData"; "withChildren": "withChildren"; }, {}, never, ["*"], true, never>;
|
|
18
|
+
}
|
package/cameras/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare class NgtsCameraContent {
|
|
|
5
5
|
readonly template: TemplateRef<any>;
|
|
6
6
|
ngtsCameraContent: boolean | '';
|
|
7
7
|
static ngTemplateContextGuard(_: NgtsCameraContent, ctx: unknown): ctx is {
|
|
8
|
-
|
|
8
|
+
fbo: THREE.WebGLRenderTarget;
|
|
9
9
|
group?: THREE.Group;
|
|
10
10
|
};
|
|
11
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCameraContent, never>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
import { NgtRxStore } from 'angular-three';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { NgtsCameraContent } from '../camera/camera-content';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class NgtsCubeCamera extends NgtRxStore {
|
|
7
|
+
groupRef: ElementRef<THREE.Group>;
|
|
8
|
+
cameraContent?: NgtsCameraContent;
|
|
9
|
+
readonly cameraRef: import("angular-three").NgtInjectedRef<THREE.CubeCamera>;
|
|
10
|
+
/** Number of frames to render, Infinity */
|
|
11
|
+
set frames(frames: number);
|
|
12
|
+
/** Resolution of the FBO, 256 */
|
|
13
|
+
set resolution(resolution: number);
|
|
14
|
+
/** Camera near, 0.1 */
|
|
15
|
+
set near(near: number);
|
|
16
|
+
/** Camera far, 1000 */
|
|
17
|
+
set far(far: number);
|
|
18
|
+
/** Custom environment map that is temporarily set as the scenes background */
|
|
19
|
+
set envMap(envMap: THREE.Texture);
|
|
20
|
+
/** Custom fog that is temporarily set as the scenes fog */
|
|
21
|
+
set fog(fog: THREE.Fog | THREE.FogExp2);
|
|
22
|
+
private readonly store;
|
|
23
|
+
initialize(): void;
|
|
24
|
+
constructor();
|
|
25
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCubeCamera, never>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsCubeCamera, "ngts-cube-camera", never, { "frames": "frames"; "resolution": "resolution"; "near": "near"; "far": "far"; "envMap": "envMap"; "fog": "fog"; }, {}, ["cameraContent"], never, true, never>;
|
|
27
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './lib/billboard/billboard';
|
|
2
2
|
export * from './lib/catmull-rom-line/catmull-rom-line';
|
|
3
3
|
export * from './lib/cubic-bezier-line/cubic-bezier-line';
|
|
4
|
+
export * from './lib/edges/edges';
|
|
4
5
|
export * from './lib/gizmo-helper/gizmo-helper';
|
|
5
6
|
export * from './lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube';
|
|
6
7
|
export * from './lib/gizmo-helper/gizmo-viewport/gizmo-viewport';
|
|
@@ -8,4 +9,4 @@ export * from './lib/line/line';
|
|
|
8
9
|
export * from './lib/quadratic-bezier-line/quadratic-bezier-line';
|
|
9
10
|
export * from './lib/text-3d/text-3d';
|
|
10
11
|
export * from './lib/text/text';
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9hYnN0cmFjdGlvbnMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2JpbGxib2FyZC9iaWxsYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2F0bXVsbC1yb20tbGluZS9jYXRtdWxsLXJvbS1saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2N1YmljLWJlemllci1saW5lL2N1YmljLWJlemllci1saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VkZ2VzL2VkZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dpem1vLWhlbHBlci9naXptby1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ2l6bW8taGVscGVyL2dpem1vLXZpZXdjdWJlL2dpem1vLXZpZXdjdWJlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dpem1vLWhlbHBlci9naXptby12aWV3cG9ydC9naXptby12aWV3cG9ydCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9saW5lL2xpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcXVhZHJhdGljLWJlemllci1saW5lL3F1YWRyYXRpYy1iZXppZXItbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZXh0LTNkL3RleHQtM2QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGV4dC90ZXh0JztcbiJdfQ==
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { NgIf } from '@angular/common';
|
|
2
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
|
|
3
|
+
import { extend, injectNgtRef, NgtRxStore } from 'angular-three';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import { LineBasicMaterial, LineSegments } from 'three';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
extend({ LineSegments, LineBasicMaterial });
|
|
8
|
+
export class NgtsEdges extends NgtRxStore {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.edgesRef = injectNgtRef();
|
|
12
|
+
this.withChildren = false;
|
|
13
|
+
this.noop = () => null;
|
|
14
|
+
}
|
|
15
|
+
set threshold(threshold) {
|
|
16
|
+
this.set({ threshold });
|
|
17
|
+
}
|
|
18
|
+
set color(color) {
|
|
19
|
+
this.set({ color });
|
|
20
|
+
}
|
|
21
|
+
set geometry(geometry) {
|
|
22
|
+
this.set({ geometry });
|
|
23
|
+
}
|
|
24
|
+
set userData(userData) {
|
|
25
|
+
this.set({ userData });
|
|
26
|
+
}
|
|
27
|
+
initialize() {
|
|
28
|
+
super.initialize();
|
|
29
|
+
this.set({
|
|
30
|
+
threshold: 15,
|
|
31
|
+
color: 'black',
|
|
32
|
+
userData: {},
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
ngOnInit() {
|
|
36
|
+
this.setupGeometry();
|
|
37
|
+
}
|
|
38
|
+
setupGeometry() {
|
|
39
|
+
this.hold(this.edgesRef.$, (segments) => {
|
|
40
|
+
const parent = segments.parent;
|
|
41
|
+
if (parent) {
|
|
42
|
+
const geom = this.get('geometry') || parent.geometry;
|
|
43
|
+
const threshold = this.get('threshold');
|
|
44
|
+
if (geom !== segments.userData['currentGeom'] || threshold !== segments.userData['currentThreshold']) {
|
|
45
|
+
segments.userData['currentGeom'] = geom;
|
|
46
|
+
segments.userData['currentThreshold'] = threshold;
|
|
47
|
+
segments.geometry = new THREE.EdgesGeometry(geom, threshold);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
NgtsEdges.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsEdges, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
54
|
+
NgtsEdges.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgtsEdges, isStandalone: true, selector: "ngts-edges", inputs: { edgesRef: "edgesRef", threshold: "threshold", color: "color", geometry: "geometry", userData: "userData", withChildren: "withChildren" }, usesInheritance: true, ngImport: i0, template: `
|
|
55
|
+
<ngt-line-segments [ref]="edgesRef" [raycast]="noop" ngtCompound>
|
|
56
|
+
<ng-container *ngIf="withChildren; else noChildren">
|
|
57
|
+
<ng-content />
|
|
58
|
+
</ng-container>
|
|
59
|
+
<ng-template #noChildren>
|
|
60
|
+
<ngt-line-basic-material [color]="color" />
|
|
61
|
+
</ng-template>
|
|
62
|
+
</ngt-line-segments>
|
|
63
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsEdges, decorators: [{
|
|
65
|
+
type: Component,
|
|
66
|
+
args: [{
|
|
67
|
+
selector: 'ngts-edges',
|
|
68
|
+
standalone: true,
|
|
69
|
+
template: `
|
|
70
|
+
<ngt-line-segments [ref]="edgesRef" [raycast]="noop" ngtCompound>
|
|
71
|
+
<ng-container *ngIf="withChildren; else noChildren">
|
|
72
|
+
<ng-content />
|
|
73
|
+
</ng-container>
|
|
74
|
+
<ng-template #noChildren>
|
|
75
|
+
<ngt-line-basic-material [color]="color" />
|
|
76
|
+
</ng-template>
|
|
77
|
+
</ngt-line-segments>
|
|
78
|
+
`,
|
|
79
|
+
imports: [NgIf],
|
|
80
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
81
|
+
}]
|
|
82
|
+
}], propDecorators: { edgesRef: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], threshold: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], color: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], geometry: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], userData: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], withChildren: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}] } });
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9lZGdlcy9lZGdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWdCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sT0FBTyxDQUFDOztBQUV4RCxNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0FBa0I1QyxNQUFNLE9BQU8sU0FBVSxTQUFRLFVBQVU7SUFoQnpDOztRQWlCYSxhQUFRLEdBQUcsWUFBWSxFQUFzQixDQUFDO1FBa0I5QyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUVyQixTQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0tBNkI5QjtJQS9DRyxJQUFhLFNBQVMsQ0FBQyxTQUFpQjtRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBYSxLQUFLLENBQUMsS0FBZ0M7UUFDL0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQWEsUUFBUSxDQUFDLFFBQThCO1FBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFhLFFBQVEsQ0FBQyxRQUFzQjtRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBTVEsVUFBVTtRQUNmLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ0wsU0FBUyxFQUFFLEVBQUU7WUFDYixLQUFLLEVBQUUsT0FBTztZQUNkLFFBQVEsRUFBRSxFQUFFO1NBQ2YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGFBQWE7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFvQixDQUFDO1lBQzdDLElBQUksTUFBTSxFQUFFO2dCQUNSLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDckQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxTQUFTLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO29CQUNsRyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDeEMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDbEQsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2lCQUNoRTthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztzR0FqRFEsU0FBUzswRkFBVCxTQUFTLGlQQWJSOzs7Ozs7Ozs7S0FTVCw0REFDUyxJQUFJOzJGQUdMLFNBQVM7a0JBaEJyQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7S0FTVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBQ2YsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzhCQUVZLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRU8sU0FBUztzQkFBckIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLO2dCQUlPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sUUFBUTtzQkFBcEIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0Tmd0UmVmLCBOZ3RBbnlSZWNvcmQsIE5ndFJ4U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IExpbmVCYXNpY01hdGVyaWFsLCBMaW5lU2VnbWVudHMgfSBmcm9tICd0aHJlZSc7XG5cbmV4dGVuZCh7IExpbmVTZWdtZW50cywgTGluZUJhc2ljTWF0ZXJpYWwgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1lZGdlcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LWxpbmUtc2VnbWVudHMgW3JlZl09XCJlZGdlc1JlZlwiIFtyYXljYXN0XT1cIm5vb3BcIiBuZ3RDb21wb3VuZD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ3aXRoQ2hpbGRyZW47IGVsc2Ugbm9DaGlsZHJlblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9DaGlsZHJlbj5cbiAgICAgICAgICAgICAgICA8bmd0LWxpbmUtYmFzaWMtbWF0ZXJpYWwgW2NvbG9yXT1cImNvbG9yXCIgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmd0LWxpbmUtc2VnbWVudHM+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmdJZl0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzRWRnZXMgZXh0ZW5kcyBOZ3RSeFN0b3JlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBlZGdlc1JlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5MaW5lU2VnbWVudHM+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgdGhyZXNob2xkIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBjb2xvcihjb2xvcjogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbikge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBnZW9tZXRyeShnZW9tZXRyeTogVEhSRUUuQnVmZmVyR2VvbWV0cnkpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBnZW9tZXRyeSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgdXNlckRhdGEodXNlckRhdGE6IE5ndEFueVJlY29yZCkge1xuICAgICAgICB0aGlzLnNldCh7IHVzZXJEYXRhIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHdpdGhDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgcmVhZG9ubHkgbm9vcCA9ICgpID0+IG51bGw7XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHtcbiAgICAgICAgICAgIHRocmVzaG9sZDogMTUsXG4gICAgICAgICAgICBjb2xvcjogJ2JsYWNrJyxcbiAgICAgICAgICAgIHVzZXJEYXRhOiB7fSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0dXBHZW9tZXRyeSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBHZW9tZXRyeSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob2xkKHRoaXMuZWRnZXNSZWYuJCwgKHNlZ21lbnRzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBzZWdtZW50cy5wYXJlbnQgYXMgVEhSRUUuTWVzaDtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBnZW9tID0gdGhpcy5nZXQoJ2dlb21ldHJ5JykgfHwgcGFyZW50Lmdlb21ldHJ5O1xuICAgICAgICAgICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuZ2V0KCd0aHJlc2hvbGQnKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2VvbSAhPT0gc2VnbWVudHMudXNlckRhdGFbJ2N1cnJlbnRHZW9tJ10gfHwgdGhyZXNob2xkICE9PSBzZWdtZW50cy51c2VyRGF0YVsnY3VycmVudFRocmVzaG9sZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzLnVzZXJEYXRhWydjdXJyZW50R2VvbSddID0gZ2VvbTtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHMudXNlckRhdGFbJ2N1cnJlbnRUaHJlc2hvbGQnXSA9IHRocmVzaG9sZDtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHMuZ2VvbWV0cnkgPSBuZXcgVEhSRUUuRWRnZXNHZW9tZXRyeShnZW9tLCB0aHJlc2hvbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './lib/camera/camera-content';
|
|
2
|
+
export * from './lib/cube-camera/cube-camera';
|
|
2
3
|
export * from './lib/orthographic-camera/orthographic-camera';
|
|
3
4
|
export * from './lib/perspective-camera/perspective-camera';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9jYW1lcmFzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDZDQUE2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY2FtZXJhL2NhbWVyYS1jb250ZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2N1YmUtY2FtZXJhL2N1YmUtY2FtZXJhJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL29ydGhvZ3JhcGhpYy1jYW1lcmEvb3J0aG9ncmFwaGljLWNhbWVyYSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wZXJzcGVjdGl2ZS1jYW1lcmEvcGVyc3BlY3RpdmUtY2FtZXJhJztcbiJdfQ==
|
|
@@ -17,4 +17,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImpor
|
|
|
17
17
|
}], propDecorators: { ngtsCameraContent: [{
|
|
18
18
|
type: Input
|
|
19
19
|
}] } });
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLWNvbnRlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9jYW1lcmFzL3NyYy9saWIvY2FtZXJhL2NhbWVyYS1jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSXRFLE1BQU0sT0FBTyxpQkFBaUI7SUFEOUI7UUFFYSxhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLHNCQUFpQixHQUFpQixFQUFFLENBQUM7S0FRakQ7SUFORyxNQUFNLENBQUMsc0JBQXNCLENBQ3pCLENBQW9CLEVBQ3BCLEdBQVk7UUFFWixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzs4R0FUUSxpQkFBaUI7a0dBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUQ3QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLGdDQUFnQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7OEJBRzlELGlCQUFpQjtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmd0c0NhbWVyYUNvbnRlbnRdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndHNDYW1lcmFDb250ZW50IHtcbiAgICByZWFkb25seSB0ZW1wbGF0ZSA9IGluamVjdChUZW1wbGF0ZVJlZik7XG4gICAgQElucHV0KCkgbmd0c0NhbWVyYUNvbnRlbnQ6IGJvb2xlYW4gfCAnJyA9ICcnO1xuXG4gICAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoXG4gICAgICAgIF86IE5ndHNDYW1lcmFDb250ZW50LFxuICAgICAgICBjdHg6IHVua25vd25cbiAgICApOiBjdHggaXMgeyBmYm86IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OyBncm91cD86IFRIUkVFLkdyb3VwIH0ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { NgIf, NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import { Component, ContentChild, CUSTOM_ELEMENTS_SCHEMA, ElementRef, inject, Input, ViewChild } from '@angular/core';
|
|
3
|
+
import { extend, injectBeforeRender, injectNgtRef, NgtArgs, NgtRxStore, NgtStore } from 'angular-three';
|
|
4
|
+
import { combineLatest, map } from 'rxjs';
|
|
5
|
+
import * as THREE from 'three';
|
|
6
|
+
import { CubeCamera, Group } from 'three';
|
|
7
|
+
import { NgtsCameraContent } from '../camera/camera-content';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
extend({ Group, CubeCamera });
|
|
10
|
+
export class NgtsCubeCamera extends NgtRxStore {
|
|
11
|
+
/** Number of frames to render, Infinity */
|
|
12
|
+
set frames(frames) {
|
|
13
|
+
this.set({ frames });
|
|
14
|
+
}
|
|
15
|
+
/** Resolution of the FBO, 256 */
|
|
16
|
+
set resolution(resolution) {
|
|
17
|
+
this.set({ resolution });
|
|
18
|
+
}
|
|
19
|
+
/** Camera near, 0.1 */
|
|
20
|
+
set near(near) {
|
|
21
|
+
this.set({ near });
|
|
22
|
+
}
|
|
23
|
+
/** Camera far, 1000 */
|
|
24
|
+
set far(far) {
|
|
25
|
+
this.set({ far });
|
|
26
|
+
}
|
|
27
|
+
/** Custom environment map that is temporarily set as the scenes background */
|
|
28
|
+
set envMap(envMap) {
|
|
29
|
+
this.set({ envMap });
|
|
30
|
+
}
|
|
31
|
+
/** Custom fog that is temporarily set as the scenes fog */
|
|
32
|
+
set fog(fog) {
|
|
33
|
+
this.set({ fog });
|
|
34
|
+
}
|
|
35
|
+
initialize() {
|
|
36
|
+
super.initialize();
|
|
37
|
+
this.set({
|
|
38
|
+
frames: Infinity,
|
|
39
|
+
resolution: 256,
|
|
40
|
+
near: 0.1,
|
|
41
|
+
far: 1000,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
constructor() {
|
|
45
|
+
super();
|
|
46
|
+
this.cameraRef = injectNgtRef();
|
|
47
|
+
this.store = inject(NgtStore);
|
|
48
|
+
this.connect('fbo', this.select('resolution').pipe(map((resolution) => {
|
|
49
|
+
const fbo = new THREE.WebGLCubeRenderTarget(resolution);
|
|
50
|
+
fbo.texture.encoding = this.store.get('gl').outputEncoding;
|
|
51
|
+
fbo.texture.type = THREE.HalfFloatType;
|
|
52
|
+
return fbo;
|
|
53
|
+
})));
|
|
54
|
+
this.connect('cameraArgs', combineLatest([this.select('near'), this.select('far'), this.select('fbo')]));
|
|
55
|
+
let count = 0;
|
|
56
|
+
let originalFog;
|
|
57
|
+
let originalBackground;
|
|
58
|
+
injectBeforeRender(({ scene, gl }) => {
|
|
59
|
+
const { frames, envMap, fog } = this.get();
|
|
60
|
+
if (envMap &&
|
|
61
|
+
this.cameraRef.nativeElement &&
|
|
62
|
+
this.groupRef.nativeElement &&
|
|
63
|
+
(frames === Infinity || count < frames)) {
|
|
64
|
+
this.groupRef.nativeElement.visible = false;
|
|
65
|
+
originalFog = scene.fog;
|
|
66
|
+
originalBackground = scene.background;
|
|
67
|
+
scene.background = envMap || originalBackground;
|
|
68
|
+
scene.fog = fog || originalFog;
|
|
69
|
+
this.cameraRef.nativeElement.update(gl, scene);
|
|
70
|
+
scene.fog = originalFog;
|
|
71
|
+
scene.background = originalBackground;
|
|
72
|
+
this.groupRef.nativeElement.visible = true;
|
|
73
|
+
count++;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
NgtsCubeCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsCubeCamera, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
79
|
+
NgtsCubeCamera.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgtsCubeCamera, isStandalone: true, selector: "ngts-cube-camera", inputs: { frames: "frames", resolution: "resolution", near: "near", far: "far", envMap: "envMap", fog: "fog" }, queries: [{ propertyName: "cameraContent", first: true, predicate: NgtsCameraContent, descendants: true }], viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
80
|
+
<ngt-group ngtCompound>
|
|
81
|
+
<ngt-cube-camera [ref]="cameraRef" *args="get('cameraArgs')" />
|
|
82
|
+
<ngt-group #group>
|
|
83
|
+
<ng-container
|
|
84
|
+
*ngIf="cameraContent && cameraContent.ngtsCameraContent && get('fbo')"
|
|
85
|
+
[ngTemplateOutlet]="cameraContent.template"
|
|
86
|
+
[ngTemplateOutletContext]="{ fbo: get('fbo').texture, group }"
|
|
87
|
+
/>
|
|
88
|
+
</ngt-group>
|
|
89
|
+
</ngt-group>
|
|
90
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsCubeCamera, decorators: [{
|
|
92
|
+
type: Component,
|
|
93
|
+
args: [{
|
|
94
|
+
selector: 'ngts-cube-camera',
|
|
95
|
+
standalone: true,
|
|
96
|
+
template: `
|
|
97
|
+
<ngt-group ngtCompound>
|
|
98
|
+
<ngt-cube-camera [ref]="cameraRef" *args="get('cameraArgs')" />
|
|
99
|
+
<ngt-group #group>
|
|
100
|
+
<ng-container
|
|
101
|
+
*ngIf="cameraContent && cameraContent.ngtsCameraContent && get('fbo')"
|
|
102
|
+
[ngTemplateOutlet]="cameraContent.template"
|
|
103
|
+
[ngTemplateOutletContext]="{ fbo: get('fbo').texture, group }"
|
|
104
|
+
/>
|
|
105
|
+
</ngt-group>
|
|
106
|
+
</ngt-group>
|
|
107
|
+
`,
|
|
108
|
+
imports: [NgIf, NgTemplateOutlet, NgtArgs],
|
|
109
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
110
|
+
}]
|
|
111
|
+
}], ctorParameters: function () { return []; }, propDecorators: { groupRef: [{
|
|
112
|
+
type: ViewChild,
|
|
113
|
+
args: ['group', { static: true }]
|
|
114
|
+
}], cameraContent: [{
|
|
115
|
+
type: ContentChild,
|
|
116
|
+
args: [NgtsCameraContent]
|
|
117
|
+
}], frames: [{
|
|
118
|
+
type: Input
|
|
119
|
+
}], resolution: [{
|
|
120
|
+
type: Input
|
|
121
|
+
}], near: [{
|
|
122
|
+
type: Input
|
|
123
|
+
}], far: [{
|
|
124
|
+
type: Input
|
|
125
|
+
}], envMap: [{
|
|
126
|
+
type: Input
|
|
127
|
+
}], fog: [{
|
|
128
|
+
type: Input
|
|
129
|
+
}] } });
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ViZS1jYW1lcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9jYW1lcmFzL3NyYy9saWIvY3ViZS1jYW1lcmEvY3ViZS1jYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFFN0QsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFvQjlCLE1BQU0sT0FBTyxjQUFlLFNBQVEsVUFBVTtJQU0xQywyQ0FBMkM7SUFDM0MsSUFBYSxNQUFNLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBQ0QsaUNBQWlDO0lBQ2pDLElBQWEsVUFBVSxDQUFDLFVBQWtCO1FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCx1QkFBdUI7SUFDdkIsSUFBYSxJQUFJLENBQUMsSUFBWTtRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QsdUJBQXVCO0lBQ3ZCLElBQWEsR0FBRyxDQUFDLEdBQVc7UUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUNELDhFQUE4RTtJQUM5RSxJQUFhLE1BQU0sQ0FBQyxNQUFxQjtRQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBQ0QsMkRBQTJEO0lBQzNELElBQWEsR0FBRyxDQUFDLEdBQThCO1FBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFJUSxVQUFVO1FBQ2YsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDTCxNQUFNLEVBQUUsUUFBUTtZQUNoQixVQUFVLEVBQUUsR0FBRztZQUNmLElBQUksRUFBRSxHQUFHO1lBQ1QsR0FBRyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQXhDSCxjQUFTLEdBQUcsWUFBWSxFQUFvQixDQUFDO1FBMkJyQyxVQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBY3RDLElBQUksQ0FBQyxPQUFPLENBQ1IsS0FBSyxFQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUMxQixHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNmLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUMzRCxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQ3ZDLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQ0wsQ0FDSixDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekcsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxXQUErQixDQUFDO1FBQ3BDLElBQUksa0JBQTZDLENBQUM7UUFDbEQsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMzQyxJQUNJLE1BQU07Z0JBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO2dCQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWE7Z0JBQzNCLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQ3pDO2dCQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQzVDLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN4QixrQkFBa0IsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUN0QyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQztnQkFDaEQsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksV0FBVyxDQUFDO2dCQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQyxLQUFLLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDM0MsS0FBSyxFQUFFLENBQUM7YUFDWDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7MkdBakZRLGNBQWM7K0ZBQWQsY0FBYyx1T0FFVCxpQkFBaUIsd0xBakJyQjs7Ozs7Ozs7Ozs7S0FXVCw0REFDUyxJQUFJLDZGQUFFLGdCQUFnQixvSkFBRSxPQUFPOzJGQUdoQyxjQUFjO2tCQWxCMUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7OztLQVdUO29CQUNELE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLENBQUM7b0JBQzFDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzswRUFFeUMsUUFBUTtzQkFBN0MsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNILGFBQWE7c0JBQTdDLFlBQVk7dUJBQUMsaUJBQWlCO2dCQUtsQixNQUFNO3NCQUFsQixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8sSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxHQUFHO3NCQUFmLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxHQUFHO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBFbGVtZW50UmVmLCBpbmplY3QsIElucHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3RSZWYsIE5ndEFyZ3MsIE5ndFJ4U3RvcmUsIE5ndFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IEN1YmVDYW1lcmEsIEdyb3VwIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0c0NhbWVyYUNvbnRlbnQgfSBmcm9tICcuLi9jYW1lcmEvY2FtZXJhLWNvbnRlbnQnO1xuXG5leHRlbmQoeyBHcm91cCwgQ3ViZUNhbWVyYSB9KTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLWN1YmUtY2FtZXJhJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtZ3JvdXAgbmd0Q29tcG91bmQ+XG4gICAgICAgICAgICA8bmd0LWN1YmUtY2FtZXJhIFtyZWZdPVwiY2FtZXJhUmVmXCIgKmFyZ3M9XCJnZXQoJ2NhbWVyYUFyZ3MnKVwiIC8+XG4gICAgICAgICAgICA8bmd0LWdyb3VwICNncm91cD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FtZXJhQ29udGVudCAmJiBjYW1lcmFDb250ZW50Lm5ndHNDYW1lcmFDb250ZW50ICYmIGdldCgnZmJvJylcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjYW1lcmFDb250ZW50LnRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmJvOiBnZXQoJ2ZibycpLnRleHR1cmUsIGdyb3VwIH1cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25ndC1ncm91cD5cbiAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ3ViZUNhbWVyYSBleHRlbmRzIE5ndFJ4U3RvcmUge1xuICAgIEBWaWV3Q2hpbGQoJ2dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgZ3JvdXBSZWYhOiBFbGVtZW50UmVmPFRIUkVFLkdyb3VwPjtcbiAgICBAQ29udGVudENoaWxkKE5ndHNDYW1lcmFDb250ZW50KSBjYW1lcmFDb250ZW50PzogTmd0c0NhbWVyYUNvbnRlbnQ7XG5cbiAgICByZWFkb25seSBjYW1lcmFSZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuQ3ViZUNhbWVyYT4oKTtcblxuICAgIC8qKiBOdW1iZXIgb2YgZnJhbWVzIHRvIHJlbmRlciwgSW5maW5pdHkgKi9cbiAgICBASW5wdXQoKSBzZXQgZnJhbWVzKGZyYW1lczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZnJhbWVzIH0pO1xuICAgIH1cbiAgICAvKiogUmVzb2x1dGlvbiBvZiB0aGUgRkJPLCAyNTYgKi9cbiAgICBASW5wdXQoKSBzZXQgcmVzb2x1dGlvbihyZXNvbHV0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyByZXNvbHV0aW9uIH0pO1xuICAgIH1cbiAgICAvKiogQ2FtZXJhIG5lYXIsIDAuMSAqL1xuICAgIEBJbnB1dCgpIHNldCBuZWFyKG5lYXI6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG5lYXIgfSk7XG4gICAgfVxuICAgIC8qKiBDYW1lcmEgZmFyLCAxMDAwICovXG4gICAgQElucHV0KCkgc2V0IGZhcihmYXI6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGZhciB9KTtcbiAgICB9XG4gICAgLyoqIEN1c3RvbSBlbnZpcm9ubWVudCBtYXAgdGhhdCBpcyB0ZW1wb3JhcmlseSBzZXQgYXMgdGhlIHNjZW5lcyBiYWNrZ3JvdW5kICovXG4gICAgQElucHV0KCkgc2V0IGVudk1hcChlbnZNYXA6IFRIUkVFLlRleHR1cmUpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbnZNYXAgfSk7XG4gICAgfVxuICAgIC8qKiBDdXN0b20gZm9nIHRoYXQgaXMgdGVtcG9yYXJpbHkgc2V0IGFzIHRoZSBzY2VuZXMgZm9nICovXG4gICAgQElucHV0KCkgc2V0IGZvZyhmb2c6IFRIUkVFLkZvZyB8IFRIUkVFLkZvZ0V4cDIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmb2cgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHtcbiAgICAgICAgICAgIGZyYW1lczogSW5maW5pdHksXG4gICAgICAgICAgICByZXNvbHV0aW9uOiAyNTYsXG4gICAgICAgICAgICBuZWFyOiAwLjEsXG4gICAgICAgICAgICBmYXI6IDEwMDAsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnZmJvJyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdyZXNvbHV0aW9uJykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc29sdXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmJvID0gbmV3IFRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldChyZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgZmJvLnRleHR1cmUuZW5jb2RpbmcgPSB0aGlzLnN0b3JlLmdldCgnZ2wnKS5vdXRwdXRFbmNvZGluZztcbiAgICAgICAgICAgICAgICAgICAgZmJvLnRleHR1cmUudHlwZSA9IFRIUkVFLkhhbGZGbG9hdFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYm87XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb25uZWN0KCdjYW1lcmFBcmdzJywgY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3QoJ25lYXInKSwgdGhpcy5zZWxlY3QoJ2ZhcicpLCB0aGlzLnNlbGVjdCgnZmJvJyldKSk7XG5cbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgbGV0IG9yaWdpbmFsRm9nOiBUSFJFRS5TY2VuZVsnZm9nJ107XG4gICAgICAgIGxldCBvcmlnaW5hbEJhY2tncm91bmQ6IFRIUkVFLlNjZW5lWydiYWNrZ3JvdW5kJ107XG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcigoeyBzY2VuZSwgZ2wgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBmcmFtZXMsIGVudk1hcCwgZm9nIH0gPSB0aGlzLmdldCgpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGVudk1hcCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhUmVmLm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwUmVmLm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAoZnJhbWVzID09PSBJbmZpbml0eSB8fCBjb3VudCA8IGZyYW1lcylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBSZWYubmF0aXZlRWxlbWVudC52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxGb2cgPSBzY2VuZS5mb2c7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxCYWNrZ3JvdW5kID0gc2NlbmUuYmFja2dyb3VuZDtcbiAgICAgICAgICAgICAgICBzY2VuZS5iYWNrZ3JvdW5kID0gZW52TWFwIHx8IG9yaWdpbmFsQmFja2dyb3VuZDtcbiAgICAgICAgICAgICAgICBzY2VuZS5mb2cgPSBmb2cgfHwgb3JpZ2luYWxGb2c7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW1lcmFSZWYubmF0aXZlRWxlbWVudC51cGRhdGUoZ2wsIHNjZW5lKTtcbiAgICAgICAgICAgICAgICBzY2VuZS5mb2cgPSBvcmlnaW5hbEZvZztcbiAgICAgICAgICAgICAgICBzY2VuZS5iYWNrZ3JvdW5kID0gb3JpZ2luYWxCYWNrZ3JvdW5kO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBSZWYubmF0aXZlRWxlbWVudC52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './lib/mesh-distort-material/mesh-distort-material';
|
|
2
2
|
export * from './lib/mesh-reflector-material/mesh-reflector-material';
|
|
3
|
+
export * from './lib/mesh-refraction-material/mesh-refraction-material';
|
|
4
|
+
export * from './lib/mesh-transmission-material/mesh-transmission-material';
|
|
3
5
|
export * from './lib/mesh-wobble-material/mesh-wobble-material';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9tYXRlcmlhbHMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLGNBQWMsNkRBQTZELENBQUM7QUFDNUUsY0FBYyxpREFBaUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL21lc2gtZGlzdG9ydC1tYXRlcmlhbC9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXRyYW5zbWlzc2lvbi1tYXRlcmlhbC9tZXNoLXRyYW5zbWlzc2lvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbC9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG4iXX0=
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { NgIf } from '@angular/common';
|
|
2
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input } from '@angular/core';
|
|
3
|
+
import { extend, getLocalState, injectBeforeRender, injectNgtRef, NgtPush, NgtRxStore, NgtStore } from 'angular-three';
|
|
4
|
+
import { MeshRefractionMaterial } from 'angular-three-soba/shaders';
|
|
5
|
+
import { combineLatest, map } from 'rxjs';
|
|
6
|
+
import { MeshBVH, SAH } from 'three-mesh-bvh';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
extend({ MeshRefractionMaterial });
|
|
9
|
+
const isCubeTexture = (def) => def && def.isCubeTexture;
|
|
10
|
+
export class NgtsMeshRefractionMaterial extends NgtRxStore {
|
|
11
|
+
/** Environment map */
|
|
12
|
+
set envMap(envMap) {
|
|
13
|
+
this.set({ envMap });
|
|
14
|
+
}
|
|
15
|
+
/** Number of ray-cast bounces, it can be expensive to have too many, 2 */
|
|
16
|
+
set bounces(bounces) {
|
|
17
|
+
this.set({ bounces });
|
|
18
|
+
}
|
|
19
|
+
/** Refraction index, 2.4 */
|
|
20
|
+
set ior(ior) {
|
|
21
|
+
this.set({ ior });
|
|
22
|
+
}
|
|
23
|
+
/** Fresnel (strip light), 0 */
|
|
24
|
+
set fresnel(fresnel) {
|
|
25
|
+
this.set({ fresnel });
|
|
26
|
+
}
|
|
27
|
+
/** RGB shift intensity, can be expensive, 0 */
|
|
28
|
+
set aberrationStrength(aberrationStrength) {
|
|
29
|
+
this.set({ aberrationStrength });
|
|
30
|
+
}
|
|
31
|
+
/** Color, white */
|
|
32
|
+
set color(color) {
|
|
33
|
+
this.set({ color });
|
|
34
|
+
}
|
|
35
|
+
/** If this is on it uses fewer ray casts for the RGB shift sacrificing physical accuracy, true */
|
|
36
|
+
set fastChroma(fastChroma) {
|
|
37
|
+
this.set({ fastChroma });
|
|
38
|
+
}
|
|
39
|
+
initialize() {
|
|
40
|
+
super.initialize();
|
|
41
|
+
this.set({
|
|
42
|
+
aberrationStrength: 0,
|
|
43
|
+
fastChroma: true,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
constructor() {
|
|
47
|
+
super();
|
|
48
|
+
this.materialRef = injectNgtRef();
|
|
49
|
+
this.defines$ = this.select('defines');
|
|
50
|
+
this.store = inject(NgtStore);
|
|
51
|
+
this.connect('defines', combineLatest([this.select('aberrationStrength'), this.select('fastChroma'), this.select('envMap')]).pipe(map(([aberrationStrength, fastChroma, envMap]) => {
|
|
52
|
+
const temp = {};
|
|
53
|
+
// Sampler2D and SamplerCube need different defines
|
|
54
|
+
const isCubeMap = isCubeTexture(envMap);
|
|
55
|
+
const w = (isCubeMap ? envMap.image[0]?.width : envMap.image.width) ?? 1024;
|
|
56
|
+
const cubeSize = w / 4;
|
|
57
|
+
const _lodMax = Math.floor(Math.log2(cubeSize));
|
|
58
|
+
const _cubeSize = Math.pow(2, _lodMax);
|
|
59
|
+
const width = 3 * Math.max(_cubeSize, 16 * 7);
|
|
60
|
+
const height = 4 * _cubeSize;
|
|
61
|
+
if (isCubeMap)
|
|
62
|
+
temp['ENVMAP_TYPE_CUBEM'] = '';
|
|
63
|
+
temp['CUBEUV_TEXEL_WIDTH'] = `${1.0 / width}`;
|
|
64
|
+
temp['CUBEUV_TEXEL_HEIGHT'] = `${1.0 / height}`;
|
|
65
|
+
temp['CUBEUV_MAX_MIP'] = `${_lodMax}.0`;
|
|
66
|
+
// Add defines from chromatic aberration
|
|
67
|
+
if (aberrationStrength > 0)
|
|
68
|
+
temp['CHROMATIC_ABERRATIONS'] = '';
|
|
69
|
+
if (fastChroma)
|
|
70
|
+
temp['FAST_CHROMA'] = '';
|
|
71
|
+
return temp;
|
|
72
|
+
})));
|
|
73
|
+
this.connect('resolution', this.store.select('size').pipe(map((size) => [size.width, size.height])));
|
|
74
|
+
injectBeforeRender(({ camera }) => {
|
|
75
|
+
if (this.materialRef.nativeElement) {
|
|
76
|
+
this.materialRef.nativeElement.viewMatrixInverse = camera.matrixWorld;
|
|
77
|
+
this.materialRef.nativeElement.projectionMatrixInverse = camera.projectionMatrixInverse;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
ngOnInit() {
|
|
82
|
+
this.setupGeometry();
|
|
83
|
+
}
|
|
84
|
+
setupGeometry() {
|
|
85
|
+
this.hold(this.materialRef.$, (material) => {
|
|
86
|
+
const geometry = getLocalState(material).parent?.geometry;
|
|
87
|
+
if (geometry) {
|
|
88
|
+
material.bvh.updateFrom(new MeshBVH(geometry.toNonIndexed(), { lazyGeneration: false, strategy: SAH }));
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
NgtsMeshRefractionMaterial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsMeshRefractionMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
94
|
+
NgtsMeshRefractionMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgtsMeshRefractionMaterial, isStandalone: true, selector: "ngts-mesh-refraction-material", inputs: { materialRef: "materialRef", envMap: "envMap", bounces: "bounces", ior: "ior", fresnel: "fresnel", aberrationStrength: "aberrationStrength", color: "color", fastChroma: "fastChroma" }, usesInheritance: true, ngImport: i0, template: `
|
|
95
|
+
<ngt-mesh-refraction-material
|
|
96
|
+
*ngIf="defines$ | ngtPush as defines"
|
|
97
|
+
[ref]="materialRef"
|
|
98
|
+
[defines]="defines"
|
|
99
|
+
[resolution]="get('resolution')"
|
|
100
|
+
[aberrationStrength]="get('aberrationStrength')"
|
|
101
|
+
[envMap]="get('envMap')"
|
|
102
|
+
[bounces]="get('bounces')"
|
|
103
|
+
[ior]="get('ior')"
|
|
104
|
+
[fresnel]="get('fresnel')"
|
|
105
|
+
[color]="get('color')"
|
|
106
|
+
[fastChroma]="get('fastChroma')"
|
|
107
|
+
ngtCompound
|
|
108
|
+
attach="material"
|
|
109
|
+
>
|
|
110
|
+
<ng-content />
|
|
111
|
+
</ngt-mesh-refraction-material>
|
|
112
|
+
`, isInline: true, dependencies: [{ kind: "pipe", type: NgtPush, name: "ngtPush" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsMeshRefractionMaterial, decorators: [{
|
|
114
|
+
type: Component,
|
|
115
|
+
args: [{
|
|
116
|
+
selector: 'ngts-mesh-refraction-material',
|
|
117
|
+
standalone: true,
|
|
118
|
+
template: `
|
|
119
|
+
<ngt-mesh-refraction-material
|
|
120
|
+
*ngIf="defines$ | ngtPush as defines"
|
|
121
|
+
[ref]="materialRef"
|
|
122
|
+
[defines]="defines"
|
|
123
|
+
[resolution]="get('resolution')"
|
|
124
|
+
[aberrationStrength]="get('aberrationStrength')"
|
|
125
|
+
[envMap]="get('envMap')"
|
|
126
|
+
[bounces]="get('bounces')"
|
|
127
|
+
[ior]="get('ior')"
|
|
128
|
+
[fresnel]="get('fresnel')"
|
|
129
|
+
[color]="get('color')"
|
|
130
|
+
[fastChroma]="get('fastChroma')"
|
|
131
|
+
ngtCompound
|
|
132
|
+
attach="material"
|
|
133
|
+
>
|
|
134
|
+
<ng-content />
|
|
135
|
+
</ngt-mesh-refraction-material>
|
|
136
|
+
`,
|
|
137
|
+
imports: [NgtPush, NgIf],
|
|
138
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
139
|
+
}]
|
|
140
|
+
}], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], envMap: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], bounces: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], ior: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}], fresnel: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}], aberrationStrength: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], color: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], fastChroma: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}] } });
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvbWF0ZXJpYWxzL3NyYy9saWIvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUU5QyxNQUFNLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLENBQUM7QUFFbkMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFzQyxFQUE0QixFQUFFLENBQ3ZGLEdBQUcsSUFBSyxHQUF5QixDQUFDLGFBQWEsQ0FBQztBQTJCcEQsTUFBTSxPQUFPLDBCQUEyQixTQUFRLFVBQVU7SUFFdEQsc0JBQXNCO0lBQ3RCLElBQWEsTUFBTSxDQUFDLE1BQXlDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCwwRUFBMEU7SUFDMUUsSUFBYSxPQUFPLENBQUMsT0FBZTtRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsNEJBQTRCO0lBQzVCLElBQWEsR0FBRyxDQUFDLEdBQVc7UUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUNELCtCQUErQjtJQUMvQixJQUFhLE9BQU8sQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCwrQ0FBK0M7SUFDL0MsSUFBYSxrQkFBa0IsQ0FBQyxrQkFBMEI7UUFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsbUJBQW1CO0lBQ25CLElBQWEsS0FBSyxDQUFDLEtBQWdDO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxrR0FBa0c7SUFDbEcsSUFBYSxVQUFVLENBQUMsVUFBbUI7UUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQU1RLFVBQVU7UUFDZixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNMLGtCQUFrQixFQUFFLENBQUM7WUFDckIsVUFBVSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUEzQ0gsZ0JBQVcsR0FBRyxZQUFZLEVBQTJDLENBQUM7UUE4QnRFLGFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTFCLFVBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFZdEMsSUFBSSxDQUFDLE9BQU8sQ0FDUixTQUFTLEVBQ1QsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNyRyxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQzdDLE1BQU0sSUFBSSxHQUFHLEVBQStCLENBQUM7WUFDN0MsbURBQW1EO1lBQ25ELE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO1lBQzVFLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQzdCLElBQUksU0FBUztnQkFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxPQUFPLElBQUksQ0FBQztZQUN4Qyx3Q0FBd0M7WUFDeEMsSUFBSSxrQkFBa0IsR0FBRyxDQUFDO2dCQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMvRCxJQUFJLFVBQVU7Z0JBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FDTCxDQUNKLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJHLGtCQUFrQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1lBQzlCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBc0IsQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO2dCQUMvRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQXNCLENBQUMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDO2FBQ3JHO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sYUFBYTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDdkMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7WUFDMUQsSUFBSSxRQUFRLEVBQUU7Z0JBQ1QsUUFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUM1QixJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQVMsQ0FBQyxDQUN4RixDQUFDO2FBQ0w7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O3VIQTVGUSwwQkFBMEI7MkdBQTFCLDBCQUEwQixrVEF0QnpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FrQlQsdURBQ1MsT0FBTyxnREFBRSxJQUFJOzJGQUdkLDBCQUEwQjtrQkF6QnRDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLCtCQUErQjtvQkFDekMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBa0JUO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7b0JBQ3hCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzswRUFFWSxXQUFXO3NCQUFuQixLQUFLO2dCQUVPLE1BQU07c0JBQWxCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxHQUFHO3NCQUFmLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxrQkFBa0I7c0JBQTlCLEtBQUs7Z0JBSU8sS0FBSztzQkFBakIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIGluamVjdCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBnZXRMb2NhbFN0YXRlLCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdE5ndFJlZiwgTmd0UHVzaCwgTmd0UnhTdG9yZSwgTmd0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lc2hCVkgsIFNBSCB9IGZyb20gJ3RocmVlLW1lc2gtYnZoJztcblxuZXh0ZW5kKHsgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbCB9KTtcblxuY29uc3QgaXNDdWJlVGV4dHVyZSA9IChkZWY6IFRIUkVFLkN1YmVUZXh0dXJlIHwgVEhSRUUuVGV4dHVyZSk6IGRlZiBpcyBUSFJFRS5DdWJlVGV4dHVyZSA9PlxuICAgIGRlZiAmJiAoZGVmIGFzIFRIUkVFLkN1YmVUZXh0dXJlKS5pc0N1YmVUZXh0dXJlO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsXG4gICAgICAgICAgICAqbmdJZj1cImRlZmluZXMkIHwgbmd0UHVzaCBhcyBkZWZpbmVzXCJcbiAgICAgICAgICAgIFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuICAgICAgICAgICAgW2RlZmluZXNdPVwiZGVmaW5lc1wiXG4gICAgICAgICAgICBbcmVzb2x1dGlvbl09XCJnZXQoJ3Jlc29sdXRpb24nKVwiXG4gICAgICAgICAgICBbYWJlcnJhdGlvblN0cmVuZ3RoXT1cImdldCgnYWJlcnJhdGlvblN0cmVuZ3RoJylcIlxuICAgICAgICAgICAgW2Vudk1hcF09XCJnZXQoJ2Vudk1hcCcpXCJcbiAgICAgICAgICAgIFtib3VuY2VzXT1cImdldCgnYm91bmNlcycpXCJcbiAgICAgICAgICAgIFtpb3JdPVwiZ2V0KCdpb3InKVwiXG4gICAgICAgICAgICBbZnJlc25lbF09XCJnZXQoJ2ZyZXNuZWwnKVwiXG4gICAgICAgICAgICBbY29sb3JdPVwiZ2V0KCdjb2xvcicpXCJcbiAgICAgICAgICAgIFtmYXN0Q2hyb21hXT1cImdldCgnZmFzdENocm9tYScpXCJcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgICAgICBhdHRhY2g9XCJtYXRlcmlhbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LW1lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbD5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ3RQdXNoLCBOZ0lmXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIGV4dGVuZHMgTmd0UnhTdG9yZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgbWF0ZXJpYWxSZWYgPSBpbmplY3ROZ3RSZWY8dHlwZW9mIE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwucHJvdG90eXBlPigpO1xuICAgIC8qKiBFbnZpcm9ubWVudCBtYXAgKi9cbiAgICBASW5wdXQoKSBzZXQgZW52TWFwKGVudk1hcDogVEhSRUUuQ3ViZVRleHR1cmUgfCBUSFJFRS5UZXh0dXJlKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZW52TWFwIH0pO1xuICAgIH1cbiAgICAvKiogTnVtYmVyIG9mIHJheS1jYXN0IGJvdW5jZXMsIGl0IGNhbiBiZSBleHBlbnNpdmUgdG8gaGF2ZSB0b28gbWFueSwgMiAqL1xuICAgIEBJbnB1dCgpIHNldCBib3VuY2VzKGJvdW5jZXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGJvdW5jZXMgfSk7XG4gICAgfVxuICAgIC8qKiBSZWZyYWN0aW9uIGluZGV4LCAyLjQgKi9cbiAgICBASW5wdXQoKSBzZXQgaW9yKGlvcjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgaW9yIH0pO1xuICAgIH1cbiAgICAvKiogRnJlc25lbCAoc3RyaXAgbGlnaHQpLCAwICovXG4gICAgQElucHV0KCkgc2V0IGZyZXNuZWwoZnJlc25lbDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZnJlc25lbCB9KTtcbiAgICB9XG4gICAgLyoqIFJHQiBzaGlmdCBpbnRlbnNpdHksIGNhbiBiZSBleHBlbnNpdmUsIDAgKi9cbiAgICBASW5wdXQoKSBzZXQgYWJlcnJhdGlvblN0cmVuZ3RoKGFiZXJyYXRpb25TdHJlbmd0aDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYWJlcnJhdGlvblN0cmVuZ3RoIH0pO1xuICAgIH1cbiAgICAvKiogQ29sb3IsIHdoaXRlICovXG4gICAgQElucHV0KCkgc2V0IGNvbG9yKGNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgY29sb3IgfSk7XG4gICAgfVxuICAgIC8qKiBJZiB0aGlzIGlzIG9uIGl0IHVzZXMgZmV3ZXIgcmF5IGNhc3RzIGZvciB0aGUgUkdCIHNoaWZ0IHNhY3JpZmljaW5nIHBoeXNpY2FsIGFjY3VyYWN5LCB0cnVlICovXG4gICAgQElucHV0KCkgc2V0IGZhc3RDaHJvbWEoZmFzdENocm9tYTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGZhc3RDaHJvbWEgfSk7XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgZGVmaW5lcyQgPSB0aGlzLnNlbGVjdCgnZGVmaW5lcycpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHtcbiAgICAgICAgICAgIGFiZXJyYXRpb25TdHJlbmd0aDogMCxcbiAgICAgICAgICAgIGZhc3RDaHJvbWE6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnZGVmaW5lcycsXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnNlbGVjdCgnYWJlcnJhdGlvblN0cmVuZ3RoJyksIHRoaXMuc2VsZWN0KCdmYXN0Q2hyb21hJyksIHRoaXMuc2VsZWN0KCdlbnZNYXAnKV0pLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChbYWJlcnJhdGlvblN0cmVuZ3RoLCBmYXN0Q2hyb21hLCBlbnZNYXBdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAgICAgICAgICAgICAvLyBTYW1wbGVyMkQgYW5kIFNhbXBsZXJDdWJlIG5lZWQgZGlmZmVyZW50IGRlZmluZXNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNDdWJlTWFwID0gaXNDdWJlVGV4dHVyZShlbnZNYXApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3ID0gKGlzQ3ViZU1hcCA/IGVudk1hcC5pbWFnZVswXT8ud2lkdGggOiBlbnZNYXAuaW1hZ2Uud2lkdGgpID8/IDEwMjQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1YmVTaXplID0gdyAvIDQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9sb2RNYXggPSBNYXRoLmZsb29yKE1hdGgubG9nMihjdWJlU2l6ZSkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfY3ViZVNpemUgPSBNYXRoLnBvdygyLCBfbG9kTWF4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSAzICogTWF0aC5tYXgoX2N1YmVTaXplLCAxNiAqIDcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSA0ICogX2N1YmVTaXplO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDdWJlTWFwKSB0ZW1wWydFTlZNQVBfVFlQRV9DVUJFTSddID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBbJ0NVQkVVVl9URVhFTF9XSURUSCddID0gYCR7MS4wIC8gd2lkdGh9YDtcbiAgICAgICAgICAgICAgICAgICAgdGVtcFsnQ1VCRVVWX1RFWEVMX0hFSUdIVCddID0gYCR7MS4wIC8gaGVpZ2h0fWA7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBbJ0NVQkVVVl9NQVhfTUlQJ10gPSBgJHtfbG9kTWF4fS4wYDtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGRlZmluZXMgZnJvbSBjaHJvbWF0aWMgYWJlcnJhdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAoYWJlcnJhdGlvblN0cmVuZ3RoID4gMCkgdGVtcFsnQ0hST01BVElDX0FCRVJSQVRJT05TJ10gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZhc3RDaHJvbWEpIHRlbXBbJ0ZBU1RfQ0hST01BJ10gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb25uZWN0KCdyZXNvbHV0aW9uJywgdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKS5waXBlKG1hcCgoc2l6ZSkgPT4gW3NpemUud2lkdGgsIHNpemUuaGVpZ2h0XSkpKTtcblxuICAgICAgICBpbmplY3RCZWZvcmVSZW5kZXIoKHsgY2FtZXJhIH0pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50IGFzIGFueSkhLnZpZXdNYXRyaXhJbnZlcnNlID0gY2FtZXJhLm1hdHJpeFdvcmxkO1xuICAgICAgICAgICAgICAgICh0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQgYXMgYW55KSEucHJvamVjdGlvbk1hdHJpeEludmVyc2UgPSBjYW1lcmEucHJvamVjdGlvbk1hdHJpeEludmVyc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNldHVwR2VvbWV0cnkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwR2VvbWV0cnkoKSB7XG4gICAgICAgIHRoaXMuaG9sZCh0aGlzLm1hdGVyaWFsUmVmLiQsIChtYXRlcmlhbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBnZXRMb2NhbFN0YXRlKG1hdGVyaWFsKS5wYXJlbnQ/Lmdlb21ldHJ5O1xuICAgICAgICAgICAgaWYgKGdlb21ldHJ5KSB7XG4gICAgICAgICAgICAgICAgKG1hdGVyaWFsIGFzIGFueSkuYnZoLnVwZGF0ZUZyb20oXG4gICAgICAgICAgICAgICAgICAgIG5ldyBNZXNoQlZIKGdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpLCB7IGxhenlHZW5lcmF0aW9uOiBmYWxzZSwgc3RyYXRlZ3k6IFNBSCB9IGFzIGFueSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|