angular-three-soba 1.8.1 → 1.9.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.
Files changed (43) hide show
  1. package/assets/default-spot-light-shadow.glsl +10 -0
  2. package/esm2020/misc/index.mjs +2 -1
  3. package/esm2020/misc/lib/depth-buffer/depth-buffer.mjs +39 -0
  4. package/esm2020/shaders/index.mjs +2 -1
  5. package/esm2020/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +3 -3
  6. package/esm2020/shaders/lib/spot-light-material/spot-light-material.mjs +86 -0
  7. package/esm2020/staging/index.mjs +3 -1
  8. package/esm2020/staging/lib/spot-light/common.mjs +40 -0
  9. package/esm2020/staging/lib/spot-light/shadow-mesh-input.mjs +46 -0
  10. package/esm2020/staging/lib/spot-light/spot-light-input.mjs +61 -0
  11. package/esm2020/staging/lib/spot-light/spot-light-shadow-no-shader.mjs +73 -0
  12. package/esm2020/staging/lib/spot-light/spot-light-shadow-shader.mjs +124 -0
  13. package/esm2020/staging/lib/spot-light/spot-light-shadow.mjs +63 -0
  14. package/esm2020/staging/lib/spot-light/spot-light.mjs +116 -0
  15. package/esm2020/staging/lib/spot-light/volumetric-mesh.mjs +85 -0
  16. package/fesm2015/angular-three-soba-misc.mjs +38 -4
  17. package/fesm2015/angular-three-soba-misc.mjs.map +1 -1
  18. package/fesm2015/angular-three-soba-shaders.mjs +89 -4
  19. package/fesm2015/angular-three-soba-shaders.mjs.map +1 -1
  20. package/fesm2015/angular-three-soba-staging.mjs +564 -5
  21. package/fesm2015/angular-three-soba-staging.mjs.map +1 -1
  22. package/fesm2020/angular-three-soba-misc.mjs +37 -3
  23. package/fesm2020/angular-three-soba-misc.mjs.map +1 -1
  24. package/fesm2020/angular-three-soba-shaders.mjs +89 -4
  25. package/fesm2020/angular-three-soba-shaders.mjs.map +1 -1
  26. package/fesm2020/angular-three-soba-staging.mjs +564 -5
  27. package/fesm2020/angular-three-soba-staging.mjs.map +1 -1
  28. package/misc/index.d.ts +1 -0
  29. package/misc/lib/depth-buffer/depth-buffer.d.ts +7 -0
  30. package/package.json +1 -1
  31. package/plugin/package.json +1 -1
  32. package/shaders/index.d.ts +1 -0
  33. package/shaders/lib/mesh-distort-material/mesh-distort-material.d.ts +7 -1
  34. package/shaders/lib/spot-light-material/spot-light-material.d.ts +4 -0
  35. package/staging/index.d.ts +2 -0
  36. package/staging/lib/spot-light/common.d.ts +3 -0
  37. package/staging/lib/spot-light/shadow-mesh-input.d.ts +13 -0
  38. package/staging/lib/spot-light/spot-light-input.d.ts +16 -0
  39. package/staging/lib/spot-light/spot-light-shadow-no-shader.d.ts +14 -0
  40. package/staging/lib/spot-light/spot-light-shadow-shader.d.ts +25 -0
  41. package/staging/lib/spot-light/spot-light-shadow.d.ts +6 -0
  42. package/staging/lib/spot-light/spot-light.d.ts +17 -0
  43. package/staging/lib/spot-light/volumetric-mesh.d.ts +15 -0
@@ -0,0 +1,10 @@
1
+ varying vec2 vUv;
2
+
3
+ uniform sampler2D uShadowMap;
4
+ uniform float uTime;
5
+
6
+ void main() {
7
+ vec3 color = texture2D(uShadowMap, vUv).xyz;
8
+ gl_FragColor = vec4(color, 1.);
9
+ }
10
+
@@ -1,3 +1,4 @@
1
1
  export * from './lib/bake-shadows/bake-shadows';
2
+ export * from './lib/depth-buffer/depth-buffer';
2
3
  export * from './lib/fbo/fbo';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9taXNjL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYmFrZS1zaGFkb3dzL2Jha2Utc2hhZG93cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9mYm8vZmJvJztcbiJdfQ==
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9taXNjL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9iYWtlLXNoYWRvd3MvYmFrZS1zaGFkb3dzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RlcHRoLWJ1ZmZlci9kZXB0aC1idWZmZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmJvL2Zibyc7XG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { inject } from '@angular/core';
2
+ import { injectBeforeRender, injectNgtDestroy, injectNgtRef, NgtStore } from 'angular-three';
3
+ import { combineLatest, isObservable, map, of, takeUntil } from 'rxjs';
4
+ import * as THREE from 'three';
5
+ import { injectNgtsFBO } from '../fbo/fbo';
6
+ export function injectNgtsDepthBuffer(paramsFactory = (params) => params) {
7
+ const depthBufferRef = injectNgtRef();
8
+ const store = inject(NgtStore);
9
+ const { destroy$ } = injectNgtDestroy();
10
+ const params = paramsFactory({ size: 256, frames: Infinity });
11
+ const params$ = isObservable(params) ? params : of(params);
12
+ let rawParams = { size: 256, frames: Infinity };
13
+ const fbo = injectNgtsFBO(() => {
14
+ return combineLatest([params$, store.select('size'), store.select('viewport', 'dpr')]).pipe(map(([params, size, dpr]) => {
15
+ rawParams = params;
16
+ const w = params.size || size.width * dpr;
17
+ const h = params.size || size.height * dpr;
18
+ const depthTexture = new THREE.DepthTexture(w, h);
19
+ depthTexture.format = THREE.DepthFormat;
20
+ depthTexture.type = THREE.UnsignedShortType;
21
+ const depthConfig = { depthTexture };
22
+ return { width: w, height: h, settings: depthConfig };
23
+ }));
24
+ });
25
+ let count = 0;
26
+ injectBeforeRender(({ gl, scene, camera }) => {
27
+ if ((rawParams.frames === Infinity || count < rawParams.frames) && fbo.nativeElement) {
28
+ gl.setRenderTarget(fbo.nativeElement);
29
+ gl.render(scene, camera);
30
+ gl.setRenderTarget(null);
31
+ count++;
32
+ }
33
+ });
34
+ fbo.$.pipe(takeUntil(destroy$)).subscribe((fbo) => {
35
+ depthBufferRef.nativeElement = fbo.depthTexture;
36
+ });
37
+ return depthBufferRef;
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGgtYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvbWlzYy9zcmMvbGliL2RlcHRoLWJ1ZmZlci9kZXB0aC1idWZmZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBTzNDLE1BQU0sVUFBVSxxQkFBcUIsQ0FDakMsZ0JBRWlFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUErQjtJQUU1RyxNQUFNLGNBQWMsR0FBRyxZQUFZLEVBQXNCLENBQUM7SUFFMUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBRXhDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDOUQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUzRCxJQUFJLFNBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBRWhELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVBQUU7UUFDM0IsT0FBTyxhQUFhLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN2RixHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUN4QixTQUFTLEdBQUcsTUFBTSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDMUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUMzQyxNQUFNLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xELFlBQVksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUN4QyxZQUFZLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztZQUM1QyxNQUFNLFdBQVcsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBRXJDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLGtCQUFrQixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7UUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRTtZQUNsRixFQUFFLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0QyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN6QixFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLEtBQUssRUFBRSxDQUFDO1NBQ1g7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQzlDLGNBQWMsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQztJQUNwRCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sY0FBYyxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0Tmd0RGVzdHJveSwgaW5qZWN0Tmd0UmVmLCBOZ3RTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgaXNPYnNlcnZhYmxlLCBtYXAsIE9ic2VydmFibGUsIG9mLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGluamVjdE5ndHNGQk8gfSBmcm9tICcuLi9mYm8vZmJvJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzRGVwdGhCdWZmZXJQYXJhbXMge1xuICAgIHNpemU6IG51bWJlcjtcbiAgICBmcmFtZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5ndHNEZXB0aEJ1ZmZlcihcbiAgICBwYXJhbXNGYWN0b3J5OiAoXG4gICAgICAgIGRlZmF1bHRQYXJhbXM6IFBhcnRpYWw8Tmd0c0RlcHRoQnVmZmVyUGFyYW1zPlxuICAgICkgPT4gTmd0c0RlcHRoQnVmZmVyUGFyYW1zIHwgT2JzZXJ2YWJsZTxOZ3RzRGVwdGhCdWZmZXJQYXJhbXM+ID0gKHBhcmFtcykgPT4gcGFyYW1zIGFzIE5ndHNEZXB0aEJ1ZmZlclBhcmFtc1xuKSB7XG4gICAgY29uc3QgZGVwdGhCdWZmZXJSZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuRGVwdGhUZXh0dXJlPigpO1xuXG4gICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuICAgIGNvbnN0IHsgZGVzdHJveSQgfSA9IGluamVjdE5ndERlc3Ryb3koKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHBhcmFtc0ZhY3RvcnkoeyBzaXplOiAyNTYsIGZyYW1lczogSW5maW5pdHkgfSk7XG4gICAgY29uc3QgcGFyYW1zJCA9IGlzT2JzZXJ2YWJsZShwYXJhbXMpID8gcGFyYW1zIDogb2YocGFyYW1zKTtcblxuICAgIGxldCByYXdQYXJhbXMgPSB7IHNpemU6IDI1NiwgZnJhbWVzOiBJbmZpbml0eSB9O1xuXG4gICAgY29uc3QgZmJvID0gaW5qZWN0Tmd0c0ZCTygoKSA9PiB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtwYXJhbXMkLCBzdG9yZS5zZWxlY3QoJ3NpemUnKSwgc3RvcmUuc2VsZWN0KCd2aWV3cG9ydCcsICdkcHInKV0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFtwYXJhbXMsIHNpemUsIGRwcl0pID0+IHtcbiAgICAgICAgICAgICAgICByYXdQYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgICAgICAgICAgY29uc3QgdyA9IHBhcmFtcy5zaXplIHx8IHNpemUud2lkdGggKiBkcHI7XG4gICAgICAgICAgICAgICAgY29uc3QgaCA9IHBhcmFtcy5zaXplIHx8IHNpemUuaGVpZ2h0ICogZHByO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcHRoVGV4dHVyZSA9IG5ldyBUSFJFRS5EZXB0aFRleHR1cmUodywgaCk7XG4gICAgICAgICAgICAgICAgZGVwdGhUZXh0dXJlLmZvcm1hdCA9IFRIUkVFLkRlcHRoRm9ybWF0O1xuICAgICAgICAgICAgICAgIGRlcHRoVGV4dHVyZS50eXBlID0gVEhSRUUuVW5zaWduZWRTaG9ydFR5cGU7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwdGhDb25maWcgPSB7IGRlcHRoVGV4dHVyZSB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgd2lkdGg6IHcsIGhlaWdodDogaCwgc2V0dGluZ3M6IGRlcHRoQ29uZmlnIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBpbmplY3RCZWZvcmVSZW5kZXIoKHsgZ2wsIHNjZW5lLCBjYW1lcmEgfSkgPT4ge1xuICAgICAgICBpZiAoKHJhd1BhcmFtcy5mcmFtZXMgPT09IEluZmluaXR5IHx8IGNvdW50IDwgcmF3UGFyYW1zLmZyYW1lcykgJiYgZmJvLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGdsLnNldFJlbmRlclRhcmdldChmYm8ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBnbC5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgICAgICBnbC5zZXRSZW5kZXJUYXJnZXQobnVsbCk7XG4gICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmYm8uJC5waXBlKHRha2VVbnRpbChkZXN0cm95JCkpLnN1YnNjcmliZSgoZmJvKSA9PiB7XG4gICAgICAgIGRlcHRoQnVmZmVyUmVmLm5hdGl2ZUVsZW1lbnQgPSBmYm8uZGVwdGhUZXh0dXJlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlcHRoQnVmZmVyUmVmO1xufVxuIl19
@@ -4,4 +4,5 @@ export * from './lib/mesh-distort-material/mesh-distort-material';
4
4
  export * from './lib/mesh-reflector-material/mesh-reflector-material';
5
5
  export * from './lib/mesh-wobble-material/mesh-wobble-material';
6
6
  export * from './lib/shader-material/shader-material';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyx1Q0FBdUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2JsdXItcGFzcy9ibHVyLXBhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udm9sdXRpb24tbWF0ZXJpYWwvY29udm9sdXRpb24tbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1kaXN0b3J0LW1hdGVyaWFsL21lc2gtZGlzdG9ydC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbC9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFkZXItbWF0ZXJpYWwvc2hhZGVyLW1hdGVyaWFsJztcbiJdfQ==
7
+ export * from './lib/spot-light-material/spot-light-material';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLCtDQUErQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYmx1ci1wYXNzL2JsdXItcGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb252b2x1dGlvbi1tYXRlcmlhbC9jb252b2x1dGlvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwvbWVzaC1kaXN0b3J0LW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc2gtcmVmbGVjdG9yLW1hdGVyaWFsL21lc2gtcmVmbGVjdG9yLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc2gtd29iYmxlLW1hdGVyaWFsL21lc2gtd29iYmxlLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3BvdC1saWdodC1tYXRlcmlhbC9zcG90LWxpZ2h0LW1hdGVyaWFsJztcbiJdfQ==
@@ -1,11 +1,11 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import * as THREE from 'three';
3
3
  export const NGTS_DISTORT_MATERIAL_SHADER = new InjectionToken('DistortMaterialShader');
4
- export function provideDistortMaterialShader(distortShader) {
4
+ export function provideNgtsMeshDistortMaterialShader(distortShader) {
5
5
  return {
6
6
  provide: NGTS_DISTORT_MATERIAL_SHADER,
7
7
  useFactory: () => {
8
- return class MeshDistortMaterial extends THREE.MeshPhysicalMaterial {
8
+ return class extends THREE.MeshPhysicalMaterial {
9
9
  constructor(parameters = {}) {
10
10
  super(parameters);
11
11
  this.setValues(parameters);
@@ -52,4 +52,4 @@ export function provideDistortMaterialShader(distortShader) {
52
52
  },
53
53
  };
54
54
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1kaXN0b3J0LW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycy9zcmMvbGliL21lc2gtZGlzdG9ydC1tYXRlcmlhbC9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQVEvQixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsdUJBQXVCLENBQUMsQ0FBQztBQUU3RyxNQUFNLFVBQVUsNEJBQTRCLENBQUMsYUFBcUI7SUFDOUQsT0FBTztRQUNILE9BQU8sRUFBRSw0QkFBNEI7UUFDckMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNiLE9BQU8sTUFBTSxtQkFBb0IsU0FBUSxLQUFLLENBQUMsb0JBQW9CO2dCQUsvRCxZQUFZLGFBQW1ELEVBQUU7b0JBQzdELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQztnQkFFUSxlQUFlLENBQUMsTUFBb0I7b0JBQ3pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDckMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUN6QyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBRTNDLE1BQU0sQ0FBQyxZQUFZLEdBQUc7Ozs7ZUFJM0IsYUFBYTtlQUNiLE1BQU0sQ0FBQyxZQUFZO1lBQ3RCLENBQUM7b0JBQ08sTUFBTSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDN0MseUJBQXlCLEVBQ3pCOzs7O2dCQUlSLENBQ0ssQ0FBQztnQkFDTixDQUFDO2dCQUVELElBQUksSUFBSTtvQkFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUM1QixDQUFDO2dCQUVELElBQUksSUFBSSxDQUFDLENBQUM7b0JBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QixDQUFDO2dCQUVELElBQUksT0FBTztvQkFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUMvQixDQUFDO2dCQUVELElBQUksT0FBTyxDQUFDLENBQUM7b0JBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixDQUFDO2dCQUVELElBQUksTUFBTTtvQkFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUM5QixDQUFDO2dCQUVELElBQUksTUFBTSxDQUFDLENBQUM7b0JBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO2FBQ0osQ0FBQztRQUNOLENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmludGVyZmFjZSBVbmlmb3JtPFQ+IHtcbiAgICB2YWx1ZTogVDtcbn1cblxuZXhwb3J0IHR5cGUgTWVzaERpc3RvcnRNYXRlcmlhbCA9IFR5cGU8eyB0aW1lOiBudW1iZXI7IGRpc3RvcnQ6IG51bWJlcjsgcmFkaXVzOiBudW1iZXIgfSAmIFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsPjtcblxuZXhwb3J0IGNvbnN0IE5HVFNfRElTVE9SVF9NQVRFUklBTF9TSEFERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWVzaERpc3RvcnRNYXRlcmlhbD4oJ0Rpc3RvcnRNYXRlcmlhbFNoYWRlcicpO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZURpc3RvcnRNYXRlcmlhbFNoYWRlcihkaXN0b3J0U2hhZGVyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcm92aWRlOiBOR1RTX0RJU1RPUlRfTUFURVJJQUxfU0hBREVSLFxuICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2xhc3MgTWVzaERpc3RvcnRNYXRlcmlhbCBleHRlbmRzIFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsIHtcbiAgICAgICAgICAgICAgICBfdGltZTogVW5pZm9ybTxudW1iZXI+O1xuICAgICAgICAgICAgICAgIF9kaXN0b3J0OiBVbmlmb3JtPG51bWJlcj47XG4gICAgICAgICAgICAgICAgX3JhZGl1czogVW5pZm9ybTxudW1iZXI+O1xuXG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IocGFyYW1ldGVyczogVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWxQYXJhbWV0ZXJzID0ge30pIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lID0geyB2YWx1ZTogMCB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXN0b3J0ID0geyB2YWx1ZTogMC40IH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhZGl1cyA9IHsgdmFsdWU6IDEgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvdmVycmlkZSBvbkJlZm9yZUNvbXBpbGUoc2hhZGVyOiBUSFJFRS5TaGFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zWyd0aW1lJ10gPSB0aGlzLl90aW1lO1xuICAgICAgICAgICAgICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ3JhZGl1cyddID0gdGhpcy5fcmFkaXVzO1xuICAgICAgICAgICAgICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ2Rpc3RvcnQnXSA9IHRoaXMuX2Rpc3RvcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLnZlcnRleFNoYWRlciA9IGBcblx0XHRcdFx0XHRcdFx0XHRcdCAgICB1bmlmb3JtIGZsb2F0IHRpbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgdW5pZm9ybSBmbG9hdCByYWRpdXM7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgdW5pZm9ybSBmbG9hdCBkaXN0b3J0O1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICR7ZGlzdG9ydFNoYWRlcn1cblx0XHRcdFx0XHRcdFx0XHRcdCAgICAke3NoYWRlci52ZXJ0ZXhTaGFkZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHQgIGA7XG4gICAgICAgICAgICAgICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIgPSBzaGFkZXIudmVydGV4U2hhZGVyLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFxuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgZmxvYXQgdXBkYXRlVGltZSA9IHRpbWUgLyA1MC4wO1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgZmxvYXQgbm9pc2UgPSBzbm9pc2UodmVjMyhwb3NpdGlvbiAvIDIuMCArIHVwZGF0ZVRpbWUgKiA1LjApKTtcblx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIHZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKHBvc2l0aW9uICogKG5vaXNlICogcG93KGRpc3RvcnQsIDIuMCkgKyByYWRpdXMpKTtcblx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIGBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgdGltZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWUudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2V0IHRpbWUodikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lLnZhbHVlID0gdjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgZGlzdG9ydCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3RvcnQudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2V0IGRpc3RvcnQodikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXN0b3J0LnZhbHVlID0gdjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgcmFkaXVzKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmFkaXVzLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNldCByYWRpdXModikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYWRpdXMudmFsdWUgPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbiJdfQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1kaXN0b3J0LW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycy9zcmMvbGliL21lc2gtZGlzdG9ydC1tYXRlcmlhbC9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQWUvQixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsdUJBQXVCLENBQUMsQ0FBQztBQUU3RyxNQUFNLFVBQVUsb0NBQW9DLENBQUMsYUFBcUI7SUFDdEUsT0FBTztRQUNILE9BQU8sRUFBRSw0QkFBNEI7UUFDckMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNiLE9BQU8sS0FBTSxTQUFRLEtBQUssQ0FBQyxvQkFBb0I7Z0JBSzNDLFlBQVksYUFBbUQsRUFBRTtvQkFDN0QsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO29CQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxDQUFDO2dCQUVRLGVBQWUsQ0FBQyxNQUFvQjtvQkFDekMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7b0JBQ3pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFFM0MsTUFBTSxDQUFDLFlBQVksR0FBRzs7OztlQUkzQixhQUFhO2VBQ2IsTUFBTSxDQUFDLFlBQVk7WUFDdEIsQ0FBQztvQkFDTyxNQUFNLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUM3Qyx5QkFBeUIsRUFDekI7Ozs7Z0JBSVIsQ0FDSyxDQUFDO2dCQUNOLENBQUM7Z0JBRUQsSUFBSSxJQUFJO29CQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLENBQUM7Z0JBRUQsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDTixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7Z0JBRUQsSUFBSSxPQUFPO29CQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQy9CLENBQUM7Z0JBRUQsSUFBSSxPQUFPLENBQUMsQ0FBQztvQkFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7Z0JBRUQsSUFBSSxNQUFNO29CQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzlCLENBQUM7Z0JBRUQsSUFBSSxNQUFNLENBQUMsQ0FBQztvQkFDUixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzNCLENBQUM7YUFDSixDQUFDO1FBQ04sQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuaW50ZXJmYWNlIFVuaWZvcm08VD4ge1xuICAgIHZhbHVlOiBUO1xufVxuXG4vKipcbiAqIG5wbSBpIC1EIHJhdy1sb2FkZXIgZ2xzbGlmeS1sb2FkZXJcbiAqIFVzYWdlOiBpbXBvcnQgZGlzdG9ydCBmcm9tICdyYXctbG9hZGVyIWdsc2xpZnktbG9hZGVyIWFuZ3VsYXItdGhyZWUtc29iYS9hc3NldHMvZGlzdG9ydC52ZXJ0Lmdsc2wnXG4gKlxuICogcHJvdmlkZU5ndHNNZXNoRGlzdG9ydE1hdGVyaWFsU2hhZGVyKGRpc3RvcnQpXG4gKi9cblxuZXhwb3J0IHR5cGUgTWVzaERpc3RvcnRNYXRlcmlhbCA9IFR5cGU8eyB0aW1lOiBudW1iZXI7IGRpc3RvcnQ6IG51bWJlcjsgcmFkaXVzOiBudW1iZXIgfSAmIFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsPjtcblxuZXhwb3J0IGNvbnN0IE5HVFNfRElTVE9SVF9NQVRFUklBTF9TSEFERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWVzaERpc3RvcnRNYXRlcmlhbD4oJ0Rpc3RvcnRNYXRlcmlhbFNoYWRlcicpO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU5ndHNNZXNoRGlzdG9ydE1hdGVyaWFsU2hhZGVyKGRpc3RvcnRTaGFkZXI6IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHByb3ZpZGU6IE5HVFNfRElTVE9SVF9NQVRFUklBTF9TSEFERVIsXG4gICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsIHtcbiAgICAgICAgICAgICAgICBfdGltZTogVW5pZm9ybTxudW1iZXI+O1xuICAgICAgICAgICAgICAgIF9kaXN0b3J0OiBVbmlmb3JtPG51bWJlcj47XG4gICAgICAgICAgICAgICAgX3JhZGl1czogVW5pZm9ybTxudW1iZXI+O1xuXG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IocGFyYW1ldGVyczogVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWxQYXJhbWV0ZXJzID0ge30pIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lID0geyB2YWx1ZTogMCB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXN0b3J0ID0geyB2YWx1ZTogMC40IH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhZGl1cyA9IHsgdmFsdWU6IDEgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvdmVycmlkZSBvbkJlZm9yZUNvbXBpbGUoc2hhZGVyOiBUSFJFRS5TaGFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zWyd0aW1lJ10gPSB0aGlzLl90aW1lO1xuICAgICAgICAgICAgICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ3JhZGl1cyddID0gdGhpcy5fcmFkaXVzO1xuICAgICAgICAgICAgICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ2Rpc3RvcnQnXSA9IHRoaXMuX2Rpc3RvcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLnZlcnRleFNoYWRlciA9IGBcblx0XHRcdFx0XHRcdFx0XHRcdCAgICB1bmlmb3JtIGZsb2F0IHRpbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgdW5pZm9ybSBmbG9hdCByYWRpdXM7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgdW5pZm9ybSBmbG9hdCBkaXN0b3J0O1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICR7ZGlzdG9ydFNoYWRlcn1cblx0XHRcdFx0XHRcdFx0XHRcdCAgICAke3NoYWRlci52ZXJ0ZXhTaGFkZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHQgIGA7XG4gICAgICAgICAgICAgICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIgPSBzaGFkZXIudmVydGV4U2hhZGVyLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFxuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgZmxvYXQgdXBkYXRlVGltZSA9IHRpbWUgLyA1MC4wO1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgZmxvYXQgbm9pc2UgPSBzbm9pc2UodmVjMyhwb3NpdGlvbiAvIDIuMCArIHVwZGF0ZVRpbWUgKiA1LjApKTtcblx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIHZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKHBvc2l0aW9uICogKG5vaXNlICogcG93KGRpc3RvcnQsIDIuMCkgKyByYWRpdXMpKTtcblx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIGBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgdGltZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWUudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2V0IHRpbWUodikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lLnZhbHVlID0gdjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgZGlzdG9ydCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3RvcnQudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2V0IGRpc3RvcnQodikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXN0b3J0LnZhbHVlID0gdjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgcmFkaXVzKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmFkaXVzLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNldCByYWRpdXModikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYWRpdXMudmFsdWUgPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,86 @@
1
+ import { Color, ShaderMaterial, Vector2, Vector3 } from 'three';
2
+ export class SpotLightMaterial extends ShaderMaterial {
3
+ constructor() {
4
+ super({
5
+ uniforms: {
6
+ depth: { value: null },
7
+ opacity: { value: 1 },
8
+ attenuation: { value: 2.5 },
9
+ anglePower: { value: 12 },
10
+ spotPosition: { value: new Vector3(0, 0, 0) },
11
+ lightColor: { value: new Color('white') },
12
+ cameraNear: { value: 0 },
13
+ cameraFar: { value: 1 },
14
+ resolution: { value: new Vector2(0, 0) },
15
+ },
16
+ transparent: true,
17
+ depthWrite: false,
18
+ vertexShader: /* glsl */ `
19
+ varying vec3 vNormal;
20
+ varying vec3 vWorldPosition;
21
+ varying float vViewZ;
22
+ varying float vIntensity;
23
+ uniform vec3 spotPosition;
24
+ uniform float attenuation;
25
+
26
+ void main() {
27
+ // compute intensity
28
+ vNormal = normalize( normalMatrix * normal );
29
+ vec4 worldPosition = modelMatrix * vec4( position, 1.0 );
30
+ vWorldPosition = worldPosition.xyz;
31
+ vec4 viewPosition = viewMatrix * worldPosition;
32
+ vViewZ = viewPosition.z;
33
+ float intensity = distance(worldPosition.xyz, spotPosition) / attenuation;
34
+ intensity = 1.0 - clamp(intensity, 0.0, 1.0);
35
+ vIntensity = intensity;
36
+ // set gl_Position
37
+ gl_Position = projectionMatrix * viewPosition;
38
+
39
+ }`,
40
+ fragmentShader: /* glsl */ `
41
+ #include <packing>
42
+
43
+ varying vec3 vNormal;
44
+ varying vec3 vWorldPosition;
45
+ uniform vec3 lightColor;
46
+ uniform vec3 spotPosition;
47
+ uniform float attenuation;
48
+ uniform float anglePower;
49
+ uniform sampler2D depth;
50
+ uniform vec2 resolution;
51
+ uniform float cameraNear;
52
+ uniform float cameraFar;
53
+ varying float vViewZ;
54
+ varying float vIntensity;
55
+ uniform float opacity;
56
+
57
+ float readDepth( sampler2D depthSampler, vec2 coord ) {
58
+ float fragCoordZ = texture2D( depthSampler, coord ).x;
59
+ float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);
60
+ return viewZ;
61
+ }
62
+
63
+ void main() {
64
+ float d = 1.0;
65
+ bool isSoft = resolution[0] > 0.0 && resolution[1] > 0.0;
66
+ if (isSoft) {
67
+ vec2 sUv = gl_FragCoord.xy / resolution;
68
+ d = readDepth(depth, sUv);
69
+ }
70
+ float intensity = vIntensity;
71
+ vec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));
72
+ float angleIntensity = pow( dot(normal, vec3(0.0, 0.0, 1.0)), anglePower );
73
+ intensity *= angleIntensity;
74
+ // fades when z is close to sampled depth, meaning the cone is intersecting existing geometry
75
+ if (isSoft) {
76
+ intensity *= smoothstep(0., 1., vViewZ - d);
77
+ }
78
+ gl_FragColor = vec4(lightColor, intensity * opacity);
79
+
80
+ #include <tonemapping_fragment>
81
+ #include <encodings_fragment>
82
+ }`,
83
+ });
84
+ }
85
+ }
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMvc3JjL2xpYi9zcG90LWxpZ2h0LW1hdGVyaWFsL3Nwb3QtbGlnaHQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVoRSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBYztJQUNqRDtRQUNJLEtBQUssQ0FBQztZQUNGLFFBQVEsRUFBRTtnQkFDTixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUN0QixPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUNyQixXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUMzQixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUN6QixZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDN0MsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN6QyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN4QixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN2QixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO2FBQzNDO1lBQ0QsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBcUI3QjtZQUNJLGNBQWMsRUFBRSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQTBDL0I7U0FDQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciwgU2hhZGVyTWF0ZXJpYWwsIFZlY3RvcjIsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBjbGFzcyBTcG90TGlnaHRNYXRlcmlhbCBleHRlbmRzIFNoYWRlck1hdGVyaWFsIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgdW5pZm9ybXM6IHtcbiAgICAgICAgICAgICAgICBkZXB0aDogeyB2YWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IHsgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbjogeyB2YWx1ZTogMi41IH0sXG4gICAgICAgICAgICAgICAgYW5nbGVQb3dlcjogeyB2YWx1ZTogMTIgfSxcbiAgICAgICAgICAgICAgICBzcG90UG9zaXRpb246IHsgdmFsdWU6IG5ldyBWZWN0b3IzKDAsIDAsIDApIH0sXG4gICAgICAgICAgICAgICAgbGlnaHRDb2xvcjogeyB2YWx1ZTogbmV3IENvbG9yKCd3aGl0ZScpIH0sXG4gICAgICAgICAgICAgICAgY2FtZXJhTmVhcjogeyB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgICAgIGNhbWVyYUZhcjogeyB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgICAgIHJlc29sdXRpb246IHsgdmFsdWU6IG5ldyBWZWN0b3IyKDAsIDApIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBkZXB0aFdyaXRlOiBmYWxzZSxcbiAgICAgICAgICAgIHZlcnRleFNoYWRlcjogLyogZ2xzbCAqLyBgXG4gICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgICAgIHZhcnlpbmcgZmxvYXQgdlZpZXdaO1xuICAgICAgdmFyeWluZyBmbG9hdCB2SW50ZW5zaXR5O1xuICAgICAgdW5pZm9ybSB2ZWMzIHNwb3RQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb247XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgLy8gY29tcHV0ZSBpbnRlbnNpdHlcbiAgICAgICAgdk5vcm1hbCA9IG5vcm1hbGl6ZSggbm9ybWFsTWF0cml4ICogbm9ybWFsICk7XG4gICAgICAgIHZlYzQgd29ybGRQb3NpdGlvblx0PSBtb2RlbE1hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbiAgICAgICAgdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbiAgICAgICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3TWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiAgICAgICAgdlZpZXdaID0gdmlld1Bvc2l0aW9uLno7XG4gICAgICAgIGZsb2F0IGludGVuc2l0eVx0PSBkaXN0YW5jZSh3b3JsZFBvc2l0aW9uLnh5eiwgc3BvdFBvc2l0aW9uKSAvIGF0dGVudWF0aW9uO1xuICAgICAgICBpbnRlbnNpdHlcdD0gMS4wIC0gY2xhbXAoaW50ZW5zaXR5LCAwLjAsIDEuMCk7XG4gICAgICAgIHZJbnRlbnNpdHkgPSBpbnRlbnNpdHk7XG4gICAgICAgIC8vIHNldCBnbF9Qb3NpdGlvblxuICAgICAgICBnbF9Qb3NpdGlvblx0PSBwcm9qZWN0aW9uTWF0cml4ICogdmlld1Bvc2l0aW9uO1xuXG4gICAgICB9YCxcbiAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiAvKiBnbHNsICovIGBcbiAgICAgICNpbmNsdWRlIDxwYWNraW5nPlxuXG4gICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xuICAgICAgdW5pZm9ybSB2ZWMzIHNwb3RQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb247XG4gICAgICB1bmlmb3JtIGZsb2F0IGFuZ2xlUG93ZXI7XG4gICAgICB1bmlmb3JtIHNhbXBsZXIyRCBkZXB0aDtcbiAgICAgIHVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xuICAgICAgdW5pZm9ybSBmbG9hdCBjYW1lcmFOZWFyO1xuICAgICAgdW5pZm9ybSBmbG9hdCBjYW1lcmFGYXI7XG4gICAgICB2YXJ5aW5nIGZsb2F0IHZWaWV3WjtcbiAgICAgIHZhcnlpbmcgZmxvYXQgdkludGVuc2l0eTtcbiAgICAgIHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxuICAgICAgZmxvYXQgcmVhZERlcHRoKCBzYW1wbGVyMkQgZGVwdGhTYW1wbGVyLCB2ZWMyIGNvb3JkICkge1xuICAgICAgICBmbG9hdCBmcmFnQ29vcmRaID0gdGV4dHVyZTJEKCBkZXB0aFNhbXBsZXIsIGNvb3JkICkueDtcbiAgICAgICAgZmxvYXQgdmlld1ogPSBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WihmcmFnQ29vcmRaLCBjYW1lcmFOZWFyLCBjYW1lcmFGYXIpO1xuICAgICAgICByZXR1cm4gdmlld1o7XG4gICAgICB9XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgZmxvYXQgZCA9IDEuMDtcbiAgICAgICAgYm9vbCBpc1NvZnQgPSByZXNvbHV0aW9uWzBdID4gMC4wICYmIHJlc29sdXRpb25bMV0gPiAwLjA7XG4gICAgICAgIGlmIChpc1NvZnQpIHtcbiAgICAgICAgICB2ZWMyIHNVdiA9IGdsX0ZyYWdDb29yZC54eSAvIHJlc29sdXRpb247XG4gICAgICAgICAgZCA9IHJlYWREZXB0aChkZXB0aCwgc1V2KTtcbiAgICAgICAgfVxuICAgICAgICBmbG9hdCBpbnRlbnNpdHkgPSB2SW50ZW5zaXR5O1xuICAgICAgICB2ZWMzIG5vcm1hbFx0PSB2ZWMzKHZOb3JtYWwueCwgdk5vcm1hbC55LCBhYnModk5vcm1hbC56KSk7XG4gICAgICAgIGZsb2F0IGFuZ2xlSW50ZW5zaXR5XHQ9IHBvdyggZG90KG5vcm1hbCwgdmVjMygwLjAsIDAuMCwgMS4wKSksIGFuZ2xlUG93ZXIgKTtcbiAgICAgICAgaW50ZW5zaXR5XHQqPSBhbmdsZUludGVuc2l0eTtcbiAgICAgICAgLy8gZmFkZXMgd2hlbiB6IGlzIGNsb3NlIHRvIHNhbXBsZWQgZGVwdGgsIG1lYW5pbmcgdGhlIGNvbmUgaXMgaW50ZXJzZWN0aW5nIGV4aXN0aW5nIGdlb21ldHJ5XG4gICAgICAgIGlmIChpc1NvZnQpIHtcbiAgICAgICAgICBpbnRlbnNpdHlcdCo9IHNtb290aHN0ZXAoMC4sIDEuLCB2Vmlld1ogLSBkKTtcbiAgICAgICAgfVxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpZ2h0Q29sb3IsIGludGVuc2l0eSAqIG9wYWNpdHkpO1xuXG4gICAgICAgICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0ICAgICAgI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbiAgICAgIH1gLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -10,6 +10,8 @@ export * from './lib/environment/environment';
10
10
  export * from './lib/float/float';
11
11
  export * from './lib/sky/sky';
12
12
  export * from './lib/sparkles/sparkles';
13
+ export * from './lib/spot-light/spot-light';
14
+ export * from './lib/spot-light/spot-light-shadow';
13
15
  export * from './lib/stage/stage';
14
16
  export * from './lib/stars/stars';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zdGFnaW5nL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMxRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBOZ3RzQWNjdW11bGF0aXZlU2hhZG93cyB9IGZyb20gJy4vbGliL2FjY3VtdWxhdGl2ZS1zaGFkb3dzL2FjY3VtdWxhdGl2ZS1zaGFkb3dzJztcbmV4cG9ydCB7IE5ndHNSYW5kb21pemVkTGlnaHRzIH0gZnJvbSAnLi9saWIvYWNjdW11bGF0aXZlLXNoYWRvd3MvcmFuZG9taXplZC1saWdodHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYm91bmRzL2JvdW5kcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jYW1lcmEtc2hha2UvY2FtZXJhLXNoYWtlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NlbnRlci9jZW50ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2xvdWQvY2xvdWQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udGFjdC1zaGFkb3dzL2NvbnRhY3Qtc2hhZG93cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbnZpcm9ubWVudC9hc3NldHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZW52aXJvbm1lbnQvZW52aXJvbm1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmxvYXQvZmxvYXQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2t5L3NreSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zcGFya2xlcy9zcGFya2xlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdGFnZS9zdGFnZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdGFycy9zdGFycyc7XG4iXX0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zdGFnaW5nL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMxRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MgfSBmcm9tICcuL2xpYi9hY2N1bXVsYXRpdmUtc2hhZG93cy9hY2N1bXVsYXRpdmUtc2hhZG93cyc7XG5leHBvcnQgeyBOZ3RzUmFuZG9taXplZExpZ2h0cyB9IGZyb20gJy4vbGliL2FjY3VtdWxhdGl2ZS1zaGFkb3dzL3JhbmRvbWl6ZWQtbGlnaHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JvdW5kcy9ib3VuZHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2FtZXJhLXNoYWtlL2NhbWVyYS1zaGFrZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jZW50ZXIvY2VudGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Nsb3VkL2Nsb3VkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRhY3Qtc2hhZG93cy9jb250YWN0LXNoYWRvd3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZW52aXJvbm1lbnQvYXNzZXRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Vudmlyb25tZW50L2Vudmlyb25tZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zsb2F0L2Zsb2F0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NreS9za3knO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3BhcmtsZXMvc3BhcmtsZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3BvdC1saWdodC9zcG90LWxpZ2h0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Nwb3QtbGlnaHQvc3BvdC1saWdodC1zaGFkb3cnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RhZ2Uvc3RhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RhcnMvc3RhcnMnO1xuIl19
@@ -0,0 +1,40 @@
1
+ import { injectBeforeRender } from 'angular-three';
2
+ import { combineLatest, startWith } from 'rxjs';
3
+ import * as THREE from 'three';
4
+ const isSpotLight = (child) => {
5
+ return child?.isSpotLight;
6
+ };
7
+ export function injectShadowMeshCommon(spotLight, mesh, width, height, distance) {
8
+ const pos = new THREE.Vector3();
9
+ const dir = new THREE.Vector3();
10
+ const commonEffect = (instance) => {
11
+ instance.hold(combineLatest([
12
+ spotLight.$,
13
+ instance.select('width').pipe(startWith(width)),
14
+ instance.select('height').pipe(startWith(height)),
15
+ ]), ([light, width, height]) => {
16
+ if (isSpotLight(light)) {
17
+ console.log('[NGTS] SpotLight instance -->', light);
18
+ light.shadow.mapSize.set(width, height);
19
+ light.shadow.needsUpdate = true;
20
+ }
21
+ else {
22
+ throw new Error('<ngts-spot-light-shadow> must be a child of a <ngts-spot-light>');
23
+ }
24
+ });
25
+ };
26
+ injectBeforeRender(() => {
27
+ if (!spotLight.nativeElement)
28
+ return;
29
+ const A = spotLight.nativeElement.position;
30
+ const B = spotLight.nativeElement.target.position;
31
+ dir.copy(B).sub(A);
32
+ const len = dir.length();
33
+ dir.normalize().multiplyScalar(len * distance);
34
+ pos.copy(A).add(dir);
35
+ mesh.nativeElement.position.copy(pos);
36
+ mesh.nativeElement.lookAt(spotLight.nativeElement.target.position);
37
+ });
38
+ return commonEffect;
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvc3RhZ2luZy9zcmMvbGliL3Nwb3QtbGlnaHQvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBOEIsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUE0QixFQUE0QixFQUFFO0lBQzNFLE9BQVEsS0FBeUIsRUFBRSxXQUFXLENBQUM7QUFDbkQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLHNCQUFzQixDQUNsQyxTQUEwQyxFQUMxQyxJQUFnQyxFQUNoQyxLQUFhLEVBQ2IsTUFBYyxFQUNkLFFBQWdCO0lBRWhCLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRWhDLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBb0IsRUFBRSxFQUFFO1FBQzFDLFFBQVEsQ0FBQyxJQUFJLENBQ1QsYUFBYSxDQUFDO1lBQ1YsU0FBUyxDQUFDLENBQUM7WUFDWCxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BELENBQUMsRUFDRixDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ3ZCLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNwRCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDbkM7aUJBQU07Z0JBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO2FBQ3RGO1FBQ0wsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDLENBQUM7SUFFRixrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUVyQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUMzQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFFbEQsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RCZWZvcmVSZW5kZXIsIE5ndEluamVjdGVkUmVmLCBOZ3RSeFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuY29uc3QgaXNTcG90TGlnaHQgPSAoY2hpbGQ6IFRIUkVFLk9iamVjdDNEIHwgbnVsbCk6IGNoaWxkIGlzIFRIUkVFLlNwb3RMaWdodCA9PiB7XG4gICAgcmV0dXJuIChjaGlsZCBhcyBUSFJFRS5TcG90TGlnaHQpPy5pc1Nwb3RMaWdodDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RTaGFkb3dNZXNoQ29tbW9uKFxuICAgIHNwb3RMaWdodDogTmd0SW5qZWN0ZWRSZWY8VEhSRUUuU3BvdExpZ2h0PixcbiAgICBtZXNoOiBOZ3RJbmplY3RlZFJlZjxUSFJFRS5NZXNoPixcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIGRpc3RhbmNlOiBudW1iZXJcbikge1xuICAgIGNvbnN0IHBvcyA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgY29uc3QgZGlyID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblxuICAgIGNvbnN0IGNvbW1vbkVmZmVjdCA9IChpbnN0YW5jZTogTmd0UnhTdG9yZSkgPT4ge1xuICAgICAgICBpbnN0YW5jZS5ob2xkKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgc3BvdExpZ2h0LiQsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2VsZWN0KCd3aWR0aCcpLnBpcGUoc3RhcnRXaXRoKHdpZHRoKSksXG4gICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2VsZWN0KCdoZWlnaHQnKS5waXBlKHN0YXJ0V2l0aChoZWlnaHQpKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKFtsaWdodCwgd2lkdGgsIGhlaWdodF0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNTcG90TGlnaHQobGlnaHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbTkdUU10gU3BvdExpZ2h0IGluc3RhbmNlIC0tPicsIGxpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQuc2hhZG93Lm1hcFNpemUuc2V0KHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICBsaWdodC5zaGFkb3cubmVlZHNVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignPG5ndHMtc3BvdC1saWdodC1zaGFkb3c+IG11c3QgYmUgYSBjaGlsZCBvZiBhIDxuZ3RzLXNwb3QtbGlnaHQ+Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuICAgICAgICBpZiAoIXNwb3RMaWdodC5uYXRpdmVFbGVtZW50KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgQSA9IHNwb3RMaWdodC5uYXRpdmVFbGVtZW50LnBvc2l0aW9uO1xuICAgICAgICBjb25zdCBCID0gc3BvdExpZ2h0Lm5hdGl2ZUVsZW1lbnQudGFyZ2V0LnBvc2l0aW9uO1xuXG4gICAgICAgIGRpci5jb3B5KEIpLnN1YihBKTtcbiAgICAgICAgY29uc3QgbGVuID0gZGlyLmxlbmd0aCgpO1xuICAgICAgICBkaXIubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIobGVuICogZGlzdGFuY2UpO1xuICAgICAgICBwb3MuY29weShBKS5hZGQoZGlyKTtcblxuICAgICAgICBtZXNoLm5hdGl2ZUVsZW1lbnQucG9zaXRpb24uY29weShwb3MpO1xuICAgICAgICBtZXNoLm5hdGl2ZUVsZW1lbnQubG9va0F0KHNwb3RMaWdodC5uYXRpdmVFbGVtZW50LnRhcmdldC5wb3NpdGlvbik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29tbW9uRWZmZWN0O1xufVxuIl19
@@ -0,0 +1,46 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { NgtRxStore } from 'angular-three';
3
+ import * as i0 from "@angular/core";
4
+ export class NgtsSpotLightShadowMeshInput extends NgtRxStore {
5
+ set distance(distance) {
6
+ this.set({ distance });
7
+ }
8
+ set alphaTest(alphaTest) {
9
+ this.set({ alphaTest });
10
+ }
11
+ set scale(scale) {
12
+ this.set({ scale });
13
+ }
14
+ set map(map) {
15
+ this.set({ map });
16
+ }
17
+ set shader(shader) {
18
+ this.set({ shader });
19
+ }
20
+ set width(width) {
21
+ this.set({ width });
22
+ }
23
+ set height(height) {
24
+ this.set({ height });
25
+ }
26
+ }
27
+ NgtsSpotLightShadowMeshInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsSpotLightShadowMeshInput, deps: null, target: i0.ɵɵFactoryTarget.Directive });
28
+ NgtsSpotLightShadowMeshInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: NgtsSpotLightShadowMeshInput, inputs: { distance: "distance", alphaTest: "alphaTest", scale: "scale", map: "map", shader: "shader", width: "width", height: "height" }, usesInheritance: true, ngImport: i0 });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsSpotLightShadowMeshInput, decorators: [{
30
+ type: Directive
31
+ }], propDecorators: { distance: [{
32
+ type: Input
33
+ }], alphaTest: [{
34
+ type: Input
35
+ }], scale: [{
36
+ type: Input
37
+ }], map: [{
38
+ type: Input
39
+ }], shader: [{
40
+ type: Input
41
+ }], width: [{
42
+ type: Input
43
+ }], height: [{
44
+ type: Input
45
+ }] } });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZG93LW1lc2gtaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zdGFnaW5nL3NyYy9saWIvc3BvdC1saWdodC9zaGFkb3ctbWVzaC1pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQWdCLDRCQUE2QixTQUFRLFVBQVU7SUFDakUsSUFBYSxRQUFRLENBQUMsUUFBZ0I7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQWEsU0FBUyxDQUFDLFNBQWlCO1FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFhLEtBQUssQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFhLEdBQUcsQ0FBQyxHQUFrQjtRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxLQUFLLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDOzt5SEEzQmlCLDRCQUE0Qjs2R0FBNUIsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7a0JBRGpELFNBQVM7OEJBRU8sUUFBUTtzQkFBcEIsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSU8sR0FBRztzQkFBZixLQUFLO2dCQUlPLE1BQU07c0JBQWxCLEtBQUs7Z0JBSU8sS0FBSztzQkFBakIsS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0UnhTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaElucHV0IGV4dGVuZHMgTmd0UnhTdG9yZSB7XG4gICAgQElucHV0KCkgc2V0IGRpc3RhbmNlKGRpc3RhbmNlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkaXN0YW5jZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYWxwaGFUZXN0KGFscGhhVGVzdDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYWxwaGFUZXN0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzY2FsZShzY2FsZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2NhbGUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1hcChtYXA6IFRIUkVFLlRleHR1cmUpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtYXAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNoYWRlcihzaGFkZXI6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IHNoYWRlciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgd2lkdGgod2lkdGg6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHdpZHRoIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBoZWlnaHQoaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBoZWlnaHQgfSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,61 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { NgtRxStore } from 'angular-three';
3
+ import * as i0 from "@angular/core";
4
+ export class NgtsSpotLightInput extends NgtRxStore {
5
+ set depthBuffer(depthBuffer) {
6
+ this.set({ depthBuffer });
7
+ }
8
+ set angle(angle) {
9
+ this.set({ angle });
10
+ }
11
+ set distance(distance) {
12
+ this.set({ distance });
13
+ }
14
+ set attenuation(attenuation) {
15
+ this.set({ attenuation });
16
+ }
17
+ set anglePower(anglePower) {
18
+ this.set({ anglePower });
19
+ }
20
+ set radiusTop(radiusTop) {
21
+ this.set({ radiusTop });
22
+ }
23
+ set radiusBottom(radiusBottom) {
24
+ this.set({ radiusBottom });
25
+ }
26
+ set opacity(opacity) {
27
+ this.set({ opacity });
28
+ }
29
+ set color(color) {
30
+ this.set({ color });
31
+ }
32
+ set debug(debug) {
33
+ this.set({ debug });
34
+ }
35
+ }
36
+ NgtsSpotLightInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsSpotLightInput, deps: null, target: i0.ɵɵFactoryTarget.Directive });
37
+ NgtsSpotLightInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: NgtsSpotLightInput, inputs: { depthBuffer: "depthBuffer", angle: "angle", distance: "distance", attenuation: "attenuation", anglePower: "anglePower", radiusTop: "radiusTop", radiusBottom: "radiusBottom", opacity: "opacity", color: "color", debug: "debug" }, usesInheritance: true, ngImport: i0 });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsSpotLightInput, decorators: [{
39
+ type: Directive
40
+ }], propDecorators: { depthBuffer: [{
41
+ type: Input
42
+ }], angle: [{
43
+ type: Input
44
+ }], distance: [{
45
+ type: Input
46
+ }], attenuation: [{
47
+ type: Input
48
+ }], anglePower: [{
49
+ type: Input
50
+ }], radiusTop: [{
51
+ type: Input
52
+ }], radiusBottom: [{
53
+ type: Input
54
+ }], opacity: [{
55
+ type: Input
56
+ }], color: [{
57
+ type: Input
58
+ }], debug: [{
59
+ type: Input
60
+ }] } });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL3N0YWdpbmcvc3JjL2xpYi9zcG90LWxpZ2h0L3Nwb3QtbGlnaHQtaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0MsTUFBTSxPQUFnQixrQkFBbUIsU0FBUSxVQUFVO0lBQ3ZELElBQWEsV0FBVyxDQUFDLFdBQStCO1FBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFhLEtBQUssQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFhLFFBQVEsQ0FBQyxRQUFnQjtRQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBYSxXQUFXLENBQUMsV0FBbUI7UUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQWEsVUFBVSxDQUFDLFVBQWtCO1FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFhLFNBQVMsQ0FBQyxTQUFpQjtRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBYSxZQUFZLENBQUMsWUFBb0I7UUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQWEsT0FBTyxDQUFDLE9BQWU7UUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLEtBQXNCO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFhLEtBQUssQ0FBQyxLQUFjO1FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7OytHQXZDaUIsa0JBQWtCO21HQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEdkMsU0FBUzs4QkFFTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSU8sUUFBUTtzQkFBcEIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8sU0FBUztzQkFBckIsS0FBSztnQkFJTyxZQUFZO3NCQUF4QixLQUFLO2dCQUlPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sS0FBSztzQkFBakIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0UnhTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3RzU3BvdExpZ2h0SW5wdXQgZXh0ZW5kcyBOZ3RSeFN0b3JlIHtcbiAgICBASW5wdXQoKSBzZXQgZGVwdGhCdWZmZXIoZGVwdGhCdWZmZXI6IFRIUkVFLkRlcHRoVGV4dHVyZSkge1xuICAgICAgICB0aGlzLnNldCh7IGRlcHRoQnVmZmVyIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBhbmdsZShhbmdsZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYW5nbGUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRpc3RhbmNlKGRpc3RhbmNlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkaXN0YW5jZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYXR0ZW51YXRpb24oYXR0ZW51YXRpb246IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGF0dGVudWF0aW9uIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBhbmdsZVBvd2VyKGFuZ2xlUG93ZXI6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGFuZ2xlUG93ZXIgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHJhZGl1c1RvcChyYWRpdXNUb3A6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJhZGl1c1RvcCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcmFkaXVzQm90dG9tKHJhZGl1c0JvdHRvbTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcmFkaXVzQm90dG9tIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBvcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG9wYWNpdHkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGNvbG9yKGNvbG9yOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjb2xvciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGVidWcoZGVidWc6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkZWJ1ZyB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,73 @@
1
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, inject } from '@angular/core';
2
+ import { checkUpdate, createRunInContext, extend, injectNgtRef, NgtPush } from 'angular-three';
3
+ import * as THREE from 'three';
4
+ import { Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';
5
+ import { injectShadowMeshCommon } from './common';
6
+ import { NgtsSpotLightShadowMeshInput } from './shadow-mesh-input';
7
+ import { NGTS_SPOT_LIGHT_API } from './spot-light';
8
+ import * as i0 from "@angular/core";
9
+ extend({ Mesh, PlaneGeometry, MeshBasicMaterial });
10
+ export class NgtsSpotLightShadowNoShader extends NgtsSpotLightShadowMeshInput {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.mesh = injectNgtRef();
14
+ this.spotLightApi = inject(NGTS_SPOT_LIGHT_API);
15
+ this.DoubleSide = THREE.DoubleSide;
16
+ this.runInContext = createRunInContext();
17
+ }
18
+ initialize() {
19
+ super.initialize();
20
+ this.set({ distance: 0.4, alphaTest: 0.5, width: 512, height: 512 });
21
+ this.hold(this.select('map'), (map) => {
22
+ if (map) {
23
+ map.wrapS = map.wrapT = THREE.RepeatWrapping;
24
+ checkUpdate(map);
25
+ }
26
+ });
27
+ }
28
+ ngOnInit() {
29
+ const commonEffect = this.runInContext(() => {
30
+ return injectShadowMeshCommon(this.spotLightApi.spotLight, this.mesh, this.get('width'), this.get('height'), this.get('distance'));
31
+ });
32
+ commonEffect(this);
33
+ }
34
+ }
35
+ NgtsSpotLightShadowNoShader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsSpotLightShadowNoShader, deps: null, target: i0.ɵɵFactoryTarget.Component });
36
+ NgtsSpotLightShadowNoShader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: NgtsSpotLightShadowNoShader, isStandalone: true, selector: "ngts-spot-light-shadow-no-shader", usesInheritance: true, ngImport: i0, template: `
37
+ <ngt-mesh [ref]="mesh" [scale]="get('scale')" [castShadow]="true">
38
+ <ngt-plane-geometry />
39
+ <ngt-mesh-basic-material
40
+ [transparent]="true"
41
+ [side]="DoubleSide"
42
+ [alphaTest]="get('alphaTest')"
43
+ [alphaMap]="key$('map') | ngtPush"
44
+ [opacity]="spotLightApi.debug ? 1 : 0"
45
+ >
46
+ <ng-content />
47
+ </ngt-mesh-basic-material>
48
+ </ngt-mesh>
49
+ `, isInline: true, dependencies: [{ kind: "pipe", type: NgtPush, name: "ngtPush" }] });
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtsSpotLightShadowNoShader, decorators: [{
51
+ type: Component,
52
+ args: [{
53
+ selector: 'ngts-spot-light-shadow-no-shader',
54
+ standalone: true,
55
+ template: `
56
+ <ngt-mesh [ref]="mesh" [scale]="get('scale')" [castShadow]="true">
57
+ <ngt-plane-geometry />
58
+ <ngt-mesh-basic-material
59
+ [transparent]="true"
60
+ [side]="DoubleSide"
61
+ [alphaTest]="get('alphaTest')"
62
+ [alphaMap]="key$('map') | ngtPush"
63
+ [opacity]="spotLightApi.debug ? 1 : 0"
64
+ >
65
+ <ng-content />
66
+ </ngt-mesh-basic-material>
67
+ </ngt-mesh>
68
+ `,
69
+ imports: [NgtPush],
70
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
71
+ }]
72
+ }] });
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC1zaGFkb3ctbm8tc2hhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvc3RhZ2luZy9zcmMvbGliL3Nwb3QtbGlnaHQvc3BvdC1saWdodC1zaGFkb3ctbm8tc2hhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDL0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFbkQsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7QUFzQm5ELE1BQU0sT0FBTywyQkFBNEIsU0FBUSw0QkFBNEI7SUFwQjdFOztRQXFCYSxTQUFJLEdBQUcsWUFBWSxFQUFjLENBQUM7UUFDbEMsaUJBQVksR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUzQyxlQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUU5QixpQkFBWSxHQUFHLGtCQUFrQixFQUFFLENBQUM7S0F5QmhEO0lBdkJZLFVBQVU7UUFDZixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2xDLElBQUksR0FBRyxFQUFFO2dCQUNMLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO2dCQUM3QyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDcEI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7WUFDeEMsT0FBTyxzQkFBc0IsQ0FDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQzNCLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFDbEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDdkIsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7O3dIQTlCUSwyQkFBMkI7NEdBQTNCLDJCQUEyQixtSEFqQjFCOzs7Ozs7Ozs7Ozs7O0tBYVQsdURBQ1MsT0FBTzsyRkFHUiwyQkFBMkI7a0JBcEJ2QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQ0FBa0M7b0JBQzVDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7S0FhVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgaW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNoZWNrVXBkYXRlLCBjcmVhdGVSdW5JbkNvbnRleHQsIGV4dGVuZCwgaW5qZWN0Tmd0UmVmLCBOZ3RQdXNoIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBNZXNoLCBNZXNoQmFzaWNNYXRlcmlhbCwgUGxhbmVHZW9tZXRyeSB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGluamVjdFNoYWRvd01lc2hDb21tb24gfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaElucHV0IH0gZnJvbSAnLi9zaGFkb3ctbWVzaC1pbnB1dCc7XG5pbXBvcnQgeyBOR1RTX1NQT1RfTElHSFRfQVBJIH0gZnJvbSAnLi9zcG90LWxpZ2h0JztcblxuZXh0ZW5kKHsgTWVzaCwgUGxhbmVHZW9tZXRyeSwgTWVzaEJhc2ljTWF0ZXJpYWwgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1uby1zaGFkZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1tZXNoIFtyZWZdPVwibWVzaFwiIFtzY2FsZV09XCJnZXQoJ3NjYWxlJylcIiBbY2FzdFNoYWRvd109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8bmd0LXBsYW5lLWdlb21ldHJ5IC8+XG4gICAgICAgICAgICA8bmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWxcbiAgICAgICAgICAgICAgICBbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3NpZGVdPVwiRG91YmxlU2lkZVwiXG4gICAgICAgICAgICAgICAgW2FscGhhVGVzdF09XCJnZXQoJ2FscGhhVGVzdCcpXCJcbiAgICAgICAgICAgICAgICBbYWxwaGFNYXBdPVwia2V5JCgnbWFwJykgfCBuZ3RQdXNoXCJcbiAgICAgICAgICAgICAgICBbb3BhY2l0eV09XCJzcG90TGlnaHRBcGkuZGVidWcgPyAxIDogMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgICAgIDwvbmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWw+XG4gICAgICAgIDwvbmd0LW1lc2g+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0UHVzaF0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3BvdExpZ2h0U2hhZG93Tm9TaGFkZXIgZXh0ZW5kcyBOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaElucHV0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICByZWFkb25seSBtZXNoID0gaW5qZWN0Tmd0UmVmPFRIUkVFLk1lc2g+KCk7XG4gICAgcmVhZG9ubHkgc3BvdExpZ2h0QXBpID0gaW5qZWN0KE5HVFNfU1BPVF9MSUdIVF9BUEkpO1xuXG4gICAgcmVhZG9ubHkgRG91YmxlU2lkZSA9IFRIUkVFLkRvdWJsZVNpZGU7XG5cbiAgICByZWFkb25seSBydW5JbkNvbnRleHQgPSBjcmVhdGVSdW5JbkNvbnRleHQoKTtcblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoeyBkaXN0YW5jZTogMC40LCBhbHBoYVRlc3Q6IDAuNSwgd2lkdGg6IDUxMiwgaGVpZ2h0OiA1MTIgfSk7XG4gICAgICAgIHRoaXMuaG9sZCh0aGlzLnNlbGVjdCgnbWFwJyksIChtYXApID0+IHtcbiAgICAgICAgICAgIGlmIChtYXApIHtcbiAgICAgICAgICAgICAgICBtYXAud3JhcFMgPSBtYXAud3JhcFQgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcbiAgICAgICAgICAgICAgICBjaGVja1VwZGF0ZShtYXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc3QgY29tbW9uRWZmZWN0ID0gdGhpcy5ydW5JbkNvbnRleHQoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGluamVjdFNoYWRvd01lc2hDb21tb24oXG4gICAgICAgICAgICAgICAgdGhpcy5zcG90TGlnaHRBcGkuc3BvdExpZ2h0LFxuICAgICAgICAgICAgICAgIHRoaXMubWVzaCxcbiAgICAgICAgICAgICAgICB0aGlzLmdldCgnd2lkdGgnKSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldCgnaGVpZ2h0JyksXG4gICAgICAgICAgICAgICAgdGhpcy5nZXQoJ2Rpc3RhbmNlJylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb21tb25FZmZlY3QodGhpcyk7XG4gICAgfVxufVxuIl19