angular-three-soba 2.0.0-beta.7 → 2.0.0-beta.8
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/billboard/billboard.d.ts +11 -7
- package/abstractions/detailed/detailed.d.ts +26 -0
- package/abstractions/edges/edges.d.ts +23 -11
- package/abstractions/grid/grid.d.ts +41 -50
- package/abstractions/index.d.ts +1 -7
- package/abstractions/text/text.d.ts +10 -4
- package/abstractions/text-3d/text-3d.d.ts +47 -40
- package/cameras/camera/camera-content.d.ts +1 -1
- package/cameras/camera/camera.d.ts +16 -13
- package/cameras/cube-camera/cube-camera.d.ts +50 -23
- package/cameras/index.d.ts +0 -1
- package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
- package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
- package/controls/orbit-controls/orbit-controls.d.ts +30 -13
- package/esm2022/abstractions/billboard/billboard.mjs +36 -33
- package/esm2022/abstractions/detailed/detailed.mjs +64 -0
- package/esm2022/abstractions/edges/edges.mjs +58 -63
- package/esm2022/abstractions/grid/grid.mjs +140 -110
- package/esm2022/abstractions/index.mjs +2 -8
- package/esm2022/abstractions/text/text.mjs +123 -122
- package/esm2022/abstractions/text-3d/text-3d.mjs +119 -121
- package/esm2022/cameras/camera/camera-content.mjs +5 -6
- package/esm2022/cameras/camera/camera.mjs +48 -42
- package/esm2022/cameras/cube-camera/cube-camera.mjs +129 -99
- package/esm2022/cameras/index.mjs +1 -2
- package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
- package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
- package/esm2022/controls/orbit-controls/orbit-controls.mjs +94 -90
- package/esm2022/loaders/gltf-loader/gltf-loader.mjs +3 -6
- package/esm2022/loaders/loader/loader.mjs +92 -87
- package/esm2022/loaders/progress/progress.mjs +1 -1
- package/esm2022/loaders/texture-loader/texture-loader.mjs +4 -4
- package/esm2022/materials/index.mjs +2 -1
- package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
- package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
- package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +99 -97
- package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +167 -146
- package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
- package/esm2022/materials/point-material/point-material.mjs +46 -0
- package/esm2022/misc/animations/animations.mjs +20 -16
- package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
- package/esm2022/misc/caustics/caustics.mjs +387 -0
- package/esm2022/misc/decal/decal.mjs +187 -0
- package/esm2022/misc/depth-buffer/depth-buffer.mjs +33 -35
- package/esm2022/misc/example/example.mjs +160 -0
- package/esm2022/misc/fbo/fbo.mjs +35 -35
- package/esm2022/misc/html/html-wrapper.mjs +478 -0
- package/esm2022/misc/html/html.mjs +304 -0
- package/esm2022/misc/index.mjs +10 -1
- package/esm2022/misc/sampler/sampler.mjs +142 -0
- package/esm2022/misc/shadow/shadow.mjs +111 -0
- package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
- package/esm2022/misc/trail/trail.mjs +209 -0
- package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
- package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
- package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
- package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
- package/esm2022/modifiers/index.mjs +2 -0
- package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
- package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
- package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
- package/esm2022/performances/index.mjs +6 -0
- package/esm2022/performances/points/points-input.mjs +64 -0
- package/esm2022/performances/points/points.mjs +329 -0
- package/esm2022/performances/points/position-point.mjs +54 -0
- package/esm2022/performances/segments/segment-object.mjs +9 -0
- package/esm2022/performances/segments/segments.mjs +182 -0
- package/esm2022/shaders/blur-pass/blur-pass.mjs +1 -1
- package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
- package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
- package/esm2022/shaders/convolution-material/convolution-material.mjs +1 -1
- package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
- package/esm2022/shaders/grid-material/grid-material.mjs +29 -14
- package/esm2022/shaders/index.mjs +5 -3
- package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
- package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +1 -1
- package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +2 -2
- package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +4 -4
- package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
- package/esm2022/shaders/shader-material/shader-material.mjs +1 -1
- package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +17 -25
- package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
- package/esm2022/shaders/spot-light-material/spot-light-material.mjs +7 -7
- package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
- package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
- package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +160 -176
- package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +1 -1
- package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +126 -128
- package/esm2022/staging/backdrop/backdrop.mjs +77 -0
- package/esm2022/staging/bb-anchor/bb-anchor.mjs +70 -0
- package/esm2022/staging/bounds/bounds.mjs +144 -143
- package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
- package/esm2022/staging/center/center.mjs +106 -91
- package/esm2022/staging/cloud/cloud.mjs +118 -124
- package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -134
- package/esm2022/staging/environment/assets.mjs +12 -12
- package/esm2022/staging/environment/environment-cube.mjs +28 -30
- package/esm2022/staging/environment/environment-ground.mjs +18 -20
- package/esm2022/staging/environment/environment-input.mjs +97 -84
- package/esm2022/staging/environment/environment-map.mjs +33 -33
- package/esm2022/staging/environment/environment-portal.mjs +75 -97
- package/esm2022/staging/environment/environment.mjs +34 -51
- package/esm2022/staging/environment/utils.mjs +35 -14
- package/esm2022/staging/float/float.mjs +70 -58
- package/esm2022/staging/index.mjs +7 -3
- package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
- package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
- package/esm2022/staging/sky/sky.mjs +85 -80
- package/esm2022/staging/sparkles/sparkles.mjs +108 -105
- package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
- package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
- package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
- package/esm2022/staging/spot-light/spot-light.mjs +51 -64
- package/esm2022/staging/spot-light/volumetric-mesh.mjs +61 -78
- package/esm2022/staging/stage/stage.mjs +304 -290
- package/esm2022/staging/stars/stars.mjs +101 -102
- package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
- package/esm2022/staging/wireframe/wireframe.mjs +224 -0
- package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
- package/esm2022/utils/content/content.mjs +15 -0
- package/esm2022/utils/index.mjs +2 -0
- package/fesm2022/angular-three-soba-abstractions.mjs +505 -2087
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +302 -259
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +93 -88
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +94 -90
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +655 -590
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +2198 -89
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
- package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
- package/fesm2022/angular-three-soba-performances.mjs +697 -0
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
- package/fesm2022/angular-three-soba-shaders.mjs +501 -264
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +2870 -2555
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-utils.mjs +22 -0
- package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
- package/loaders/gltf-loader/gltf-loader.d.ts +4 -3
- package/loaders/loader/loader.d.ts +19 -17
- package/loaders/progress/progress.d.ts +1 -1
- package/loaders/texture-loader/texture-loader.d.ts +2 -2
- package/materials/index.d.ts +1 -0
- package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
- package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
- package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
- package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
- package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
- package/materials/point-material/point-material.d.ts +24 -0
- package/metadata.json +1 -0
- package/misc/animations/animations.d.ts +6 -4
- package/misc/caustics/caustics.d.ts +87 -0
- package/misc/decal/decal.d.ts +49 -0
- package/misc/depth-buffer/depth-buffer.d.ts +2 -2
- package/misc/example/example.d.ts +81 -0
- package/misc/fbo/fbo.d.ts +2 -2
- package/misc/html/html-wrapper.d.ts +559 -0
- package/misc/html/html.d.ts +214 -0
- package/misc/index.d.ts +9 -0
- package/misc/sampler/sampler.d.ts +67 -0
- package/misc/shadow/shadow.d.ts +37 -0
- package/misc/stats-gl/stats-gl.d.ts +24 -0
- package/misc/trail/trail.d.ts +57 -0
- package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
- package/misc/trail-texture/trail-texture.d.ts +50 -0
- package/modifiers/README.md +3 -0
- package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
- package/modifiers/index.d.ts +1 -0
- package/package.json +30 -22
- package/performances/README.md +3 -0
- package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
- package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
- package/performances/index.d.ts +5 -0
- package/performances/points/points-input.d.ts +32 -0
- package/performances/points/points.d.ts +92 -0
- package/{performance/instances/position-mesh.d.ts → performances/points/position-point.d.ts} +4 -3
- package/performances/segments/segment-object.d.ts +7 -0
- package/performances/segments/segments.d.ts +124 -0
- package/shaders/grid-material/grid-material.d.ts +33 -0
- package/shaders/index.d.ts +4 -2
- package/shaders/mesh-distort-material/mesh-distort-material.d.ts +146 -1
- package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
- package/shaders/shader-material/shader-material.d.ts +2 -2
- package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
- package/shaders/sparkles-material/sparkles-material.d.ts +15 -1
- package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
- package/shaders/star-field-material/star-field-material.d.ts +11 -1
- package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
- package/staging/accumulative-shadows/accumulative-shadows.d.ts +89 -39
- package/staging/accumulative-shadows/randomized-lights.d.ts +40 -27
- package/staging/backdrop/backdrop.d.ts +30 -0
- package/staging/bb-anchor/bb-anchor.d.ts +27 -0
- package/staging/bounds/bounds.d.ts +100 -24
- package/staging/camera-shake/camera-shake.d.ts +30 -19
- package/staging/center/center.d.ts +43 -35
- package/staging/cloud/cloud.d.ts +26 -23
- package/staging/contact-shadows/contact-shadows.d.ts +41 -28
- package/staging/environment/assets.d.ts +9 -9
- package/staging/environment/environment-cube.d.ts +9 -5
- package/staging/environment/environment-ground.d.ts +7 -7
- package/staging/environment/environment-input.d.ts +36 -36
- package/staging/environment/environment-map.d.ts +10 -5
- package/staging/environment/environment-portal.d.ts +10 -5
- package/staging/environment/environment.d.ts +0 -4
- package/staging/environment/utils.d.ts +2 -2
- package/staging/float/float.d.ts +14 -10
- package/staging/index.d.ts +6 -2
- package/staging/matcap-texture/matcap-texture.d.ts +13 -0
- package/staging/normal-texture/normal-texture.d.ts +16 -0
- package/staging/sky/sky.d.ts +28 -21
- package/staging/sparkles/sparkles.d.ts +35 -21
- package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
- package/staging/spot-light/shadow-mesh.d.ts +37 -0
- package/staging/spot-light/spot-light-input.d.ts +25 -25
- package/staging/spot-light/spot-light.d.ts +31 -15
- package/staging/spot-light/volumetric-mesh.d.ts +15 -9
- package/staging/stage/stage.d.ts +88 -63
- package/staging/stars/stars.d.ts +27 -16
- package/staging/wireframe/wireframe-input.d.ts +65 -0
- package/staging/wireframe/wireframe.d.ts +28 -0
- package/utils/README.md +3 -0
- package/utils/content/content.d.ts +8 -0
- package/utils/index.d.ts +1 -0
- package/web-types.json +1 -0
- package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
- package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
- package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
- package/abstractions/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
- package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
- package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
- package/abstractions/line/line-input.d.ts +0 -42
- package/abstractions/line/line.d.ts +0 -35
- package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
- package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
- package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
- package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
- package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
- package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
- package/esm2022/abstractions/line/line-input.mjs +0 -113
- package/esm2022/abstractions/line/line.mjs +0 -165
- package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
- package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
- package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
- package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
- package/esm2022/performance/detailed/detailed.mjs +0 -61
- package/esm2022/performance/index.mjs +0 -7
- package/esm2022/performance/instances/instance.mjs +0 -48
- package/esm2022/performance/instances/instances.mjs +0 -189
- package/esm2022/performance/instances/position-mesh.mjs +0 -52
- package/esm2022/performance/stats/stats.mjs +0 -79
- package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
- package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
- package/esm2022/staging/caustics/caustisc.mjs +0 -384
- package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
- package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -258
- package/fesm2022/angular-three-soba-performance.mjs +0 -487
- package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
- package/performance/README.md +0 -3
- package/performance/adaptive/adaptive-dpr.d.ts +0 -8
- package/performance/detailed/detailed.d.ts +0 -20
- package/performance/index.d.ts +0 -6
- package/performance/instances/instance.d.ts +0 -9
- package/performance/instances/instances.d.ts +0 -35
- package/performance/stats/stats.d.ts +0 -18
- package/plugin/generators.json +0 -19
- package/plugin/libs/plugin/README.md +0 -11
- package/plugin/package.json +0 -9
- package/plugin/src/generators/init/compat.d.ts +0 -2
- package/plugin/src/generators/init/compat.js +0 -6
- package/plugin/src/generators/init/compat.js.map +0 -1
- package/plugin/src/generators/init/init.d.ts +0 -7
- package/plugin/src/generators/init/init.js +0 -28
- package/plugin/src/generators/init/init.js.map +0 -1
- package/plugin/src/generators/init/schema.json +0 -6
- package/plugin/src/index.d.ts +0 -1
- package/plugin/src/index.js +0 -6
- package/plugin/src/index.js.map +0 -1
- package/staging/caustics/caustisc.d.ts +0 -70
- package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
- package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
- /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
- /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { NgIf } from '@angular/common';
|
|
2
|
+
import { CUSTOM_ELEMENTS_SCHEMA, Component, computed, effect, inject, runInInjectionContext, } from '@angular/core';
|
|
3
|
+
import { assertInjectionContext, checkUpdate, extend, injectBeforeRender, injectNgtRef, } from 'angular-three';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import { Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';
|
|
6
|
+
import { FullScreenQuad } from 'three-stdlib';
|
|
7
|
+
import { NgtsSpotLightShadowMeshInput } from './shadow-mesh-input';
|
|
8
|
+
import { injectNgtsSpotLightApi } from './spot-light';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
const isSpotLight = (child) => {
|
|
11
|
+
return child?.isSpotLight;
|
|
12
|
+
};
|
|
13
|
+
function injectShadowMeshCommon(spotLightRef, meshRef, width, height, distance, injector) {
|
|
14
|
+
injector = assertInjectionContext(injectShadowMeshCommon, injector);
|
|
15
|
+
runInInjectionContext(injector, () => {
|
|
16
|
+
const pos = new THREE.Vector3();
|
|
17
|
+
const dir = new THREE.Vector3();
|
|
18
|
+
effect(() => {
|
|
19
|
+
const spotLight = spotLightRef.nativeElement;
|
|
20
|
+
if (!spotLight)
|
|
21
|
+
return;
|
|
22
|
+
if (isSpotLight(spotLight)) {
|
|
23
|
+
spotLight.shadow.mapSize.set(width(), height());
|
|
24
|
+
if (spotLight.shadow.map) {
|
|
25
|
+
spotLight.shadow.map.setSize(width(), height());
|
|
26
|
+
}
|
|
27
|
+
spotLight.shadow.needsUpdate = true;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
throw new Error('<ngts-spot-light-shadow> must be a child of a <ngts-spot-light>');
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
injectBeforeRender(() => {
|
|
34
|
+
const spotLight = spotLightRef.nativeElement;
|
|
35
|
+
const mesh = meshRef.nativeElement;
|
|
36
|
+
if (!spotLight)
|
|
37
|
+
return;
|
|
38
|
+
const A = spotLight.position;
|
|
39
|
+
const B = spotLight.target.position;
|
|
40
|
+
dir.copy(B).sub(A);
|
|
41
|
+
const len = dir.length();
|
|
42
|
+
dir.normalize().multiplyScalar(len * distance());
|
|
43
|
+
pos.copy(A).add(dir);
|
|
44
|
+
if (mesh) {
|
|
45
|
+
mesh.position.copy(pos);
|
|
46
|
+
mesh.lookAt(spotLight.target.position);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
extend({ Mesh, PlaneGeometry, MeshBasicMaterial });
|
|
52
|
+
export class NgtsSpotLightShadowMeshNoShader {
|
|
53
|
+
constructor() {
|
|
54
|
+
this.shadowMeshInput = inject(NgtsSpotLightShadowMeshInput);
|
|
55
|
+
this.meshRef = injectNgtRef();
|
|
56
|
+
this.DoubleSide = THREE.DoubleSide;
|
|
57
|
+
this.spotLightApi = injectNgtsSpotLightApi();
|
|
58
|
+
this.debug = this.spotLightApi.debug;
|
|
59
|
+
effect(() => {
|
|
60
|
+
this.shadowMeshInput.inputs.patch({ distance: 0.4, alphaTest: 0.5, width: 512, height: 512, scale: 1 });
|
|
61
|
+
});
|
|
62
|
+
effect(() => {
|
|
63
|
+
const map = this.shadowMeshInput.map();
|
|
64
|
+
if (map) {
|
|
65
|
+
map.wrapS = map.wrapT = THREE.RepeatWrapping;
|
|
66
|
+
checkUpdate(map);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
injectShadowMeshCommon(this.spotLightApi.spotLight, this.meshRef, this.shadowMeshInput.width, this.shadowMeshInput.height, this.shadowMeshInput.distance);
|
|
70
|
+
}
|
|
71
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadowMeshNoShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
72
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSpotLightShadowMeshNoShader, isStandalone: true, selector: "ngts-spot-light-shadow-mesh-no-shader", ngImport: i0, template: `
|
|
73
|
+
<ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.scale()" [castShadow]="true">
|
|
74
|
+
<ngt-plane-geometry />
|
|
75
|
+
<ngt-mesh-basic-material
|
|
76
|
+
[transparent]="true"
|
|
77
|
+
[side]="DoubleSide"
|
|
78
|
+
[alphaTest]="shadowMeshInput.alphaTest()"
|
|
79
|
+
[alphaMap]="shadowMeshInput.map()"
|
|
80
|
+
[opacity]="debug() ? 1 : 0"
|
|
81
|
+
>
|
|
82
|
+
<ng-content />
|
|
83
|
+
</ngt-mesh-basic-material>
|
|
84
|
+
</ngt-mesh>
|
|
85
|
+
`, isInline: true }); }
|
|
86
|
+
}
|
|
87
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadowMeshNoShader, decorators: [{
|
|
88
|
+
type: Component,
|
|
89
|
+
args: [{
|
|
90
|
+
selector: 'ngts-spot-light-shadow-mesh-no-shader',
|
|
91
|
+
standalone: true,
|
|
92
|
+
template: `
|
|
93
|
+
<ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.scale()" [castShadow]="true">
|
|
94
|
+
<ngt-plane-geometry />
|
|
95
|
+
<ngt-mesh-basic-material
|
|
96
|
+
[transparent]="true"
|
|
97
|
+
[side]="DoubleSide"
|
|
98
|
+
[alphaTest]="shadowMeshInput.alphaTest()"
|
|
99
|
+
[alphaMap]="shadowMeshInput.map()"
|
|
100
|
+
[opacity]="debug() ? 1 : 0"
|
|
101
|
+
>
|
|
102
|
+
<ng-content />
|
|
103
|
+
</ngt-mesh-basic-material>
|
|
104
|
+
</ngt-mesh>
|
|
105
|
+
`,
|
|
106
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
107
|
+
}]
|
|
108
|
+
}], ctorParameters: function () { return []; } });
|
|
109
|
+
export class NgtsSpotLightShadowMeshShader {
|
|
110
|
+
constructor() {
|
|
111
|
+
this.shadowMeshInput = inject(NgtsSpotLightShadowMeshInput);
|
|
112
|
+
this.meshRef = injectNgtRef();
|
|
113
|
+
this.DoubleSide = THREE.DoubleSide;
|
|
114
|
+
this.RepeatWrapping = THREE.RepeatWrapping;
|
|
115
|
+
this.spotLightApi = injectNgtsSpotLightApi();
|
|
116
|
+
this.debug = this.spotLightApi.debug;
|
|
117
|
+
this.renderTarget = computed(() => {
|
|
118
|
+
const [width, height] = [this.shadowMeshInput.width(), this.shadowMeshInput.height()];
|
|
119
|
+
return new THREE.WebGLRenderTarget(width, height, {
|
|
120
|
+
format: THREE.RGBAFormat,
|
|
121
|
+
encoding: THREE.LinearEncoding,
|
|
122
|
+
stencilBuffer: false,
|
|
123
|
+
// depthTexture: null!
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
this.uniforms = {
|
|
127
|
+
uShadowMap: { value: this.shadowMeshInput.map() },
|
|
128
|
+
uTime: { value: 0 },
|
|
129
|
+
};
|
|
130
|
+
this.fsQuad = computed(() => {
|
|
131
|
+
const shader = this.shadowMeshInput.shader();
|
|
132
|
+
if (!shader)
|
|
133
|
+
return null;
|
|
134
|
+
return new FullScreenQuad(new THREE.ShaderMaterial({
|
|
135
|
+
uniforms: this.uniforms,
|
|
136
|
+
vertexShader: /* glsl */ `
|
|
137
|
+
varying vec2 vUv;
|
|
138
|
+
|
|
139
|
+
void main() {
|
|
140
|
+
vUv = uv;
|
|
141
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
142
|
+
}
|
|
143
|
+
`,
|
|
144
|
+
fragmentShader: shader,
|
|
145
|
+
}));
|
|
146
|
+
});
|
|
147
|
+
effect(() => {
|
|
148
|
+
this.shadowMeshInput.inputs.patch({
|
|
149
|
+
distance: 0.4,
|
|
150
|
+
alphaTest: 0.5,
|
|
151
|
+
width: 512,
|
|
152
|
+
height: 512,
|
|
153
|
+
scale: 4,
|
|
154
|
+
shader: /* glsl */ `
|
|
155
|
+
varying vec2 vUv;
|
|
156
|
+
|
|
157
|
+
uniform sampler2D uShadowMap;
|
|
158
|
+
uniform float uTime;
|
|
159
|
+
|
|
160
|
+
void main() {
|
|
161
|
+
vec3 color = texture2D(uShadowMap, vUv).xyz;
|
|
162
|
+
gl_FragColor = vec4(color, 1.);
|
|
163
|
+
}
|
|
164
|
+
`,
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
injectShadowMeshCommon(this.spotLightApi.spotLight, this.meshRef, this.shadowMeshInput.width, this.shadowMeshInput.height, this.shadowMeshInput.distance);
|
|
168
|
+
injectBeforeRender(({ delta, gl }) => {
|
|
169
|
+
this.uniforms.uTime.value += delta;
|
|
170
|
+
const fsQuad = this.fsQuad();
|
|
171
|
+
const renderTarget = this.renderTarget();
|
|
172
|
+
if (fsQuad && renderTarget) {
|
|
173
|
+
gl.setRenderTarget(renderTarget);
|
|
174
|
+
fsQuad.render(gl);
|
|
175
|
+
gl.setRenderTarget(null);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
effect(() => {
|
|
179
|
+
const map = this.shadowMeshInput.map();
|
|
180
|
+
if (map) {
|
|
181
|
+
this.uniforms.uShadowMap.value = map;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
effect((onCleanup) => {
|
|
185
|
+
const fsQuad = this.fsQuad();
|
|
186
|
+
onCleanup(() => {
|
|
187
|
+
if (fsQuad) {
|
|
188
|
+
fsQuad.dispose();
|
|
189
|
+
fsQuad.material.dispose();
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
effect((onCleanup) => {
|
|
194
|
+
const renderTarget = this.renderTarget();
|
|
195
|
+
onCleanup(() => {
|
|
196
|
+
renderTarget.dispose();
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadowMeshShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
201
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSpotLightShadowMeshShader, isStandalone: true, selector: "ngts-spot-light-shadow-mesh-shader", ngImport: i0, template: `
|
|
202
|
+
<ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.scale()" [castShadow]="true">
|
|
203
|
+
<ngt-plane-geometry />
|
|
204
|
+
<ngt-mesh-basic-material
|
|
205
|
+
[transparent]="true"
|
|
206
|
+
[side]="DoubleSide"
|
|
207
|
+
[alphaTest]="shadowMeshInput.alphaTest()"
|
|
208
|
+
[alphaMap]="renderTarget().texture"
|
|
209
|
+
[opacity]="debug() ? 1 : 0"
|
|
210
|
+
>
|
|
211
|
+
<ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapS" />
|
|
212
|
+
<ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapT" />
|
|
213
|
+
<ng-content />
|
|
214
|
+
</ngt-mesh-basic-material>
|
|
215
|
+
</ngt-mesh>
|
|
216
|
+
`, isInline: true }); }
|
|
217
|
+
}
|
|
218
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadowMeshShader, decorators: [{
|
|
219
|
+
type: Component,
|
|
220
|
+
args: [{
|
|
221
|
+
selector: 'ngts-spot-light-shadow-mesh-shader',
|
|
222
|
+
standalone: true,
|
|
223
|
+
template: `
|
|
224
|
+
<ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.scale()" [castShadow]="true">
|
|
225
|
+
<ngt-plane-geometry />
|
|
226
|
+
<ngt-mesh-basic-material
|
|
227
|
+
[transparent]="true"
|
|
228
|
+
[side]="DoubleSide"
|
|
229
|
+
[alphaTest]="shadowMeshInput.alphaTest()"
|
|
230
|
+
[alphaMap]="renderTarget().texture"
|
|
231
|
+
[opacity]="debug() ? 1 : 0"
|
|
232
|
+
>
|
|
233
|
+
<ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapS" />
|
|
234
|
+
<ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapT" />
|
|
235
|
+
<ng-content />
|
|
236
|
+
</ngt-mesh-basic-material>
|
|
237
|
+
</ngt-mesh>
|
|
238
|
+
`,
|
|
239
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
240
|
+
}]
|
|
241
|
+
}], ctorParameters: function () { return []; } });
|
|
242
|
+
export class NgtsSpotLightShadow extends NgtsSpotLightShadowMeshInput {
|
|
243
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadow, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
244
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSpotLightShadow, isStandalone: true, selector: "ngts-spot-light-shadow", providers: [{ provide: NgtsSpotLightShadowMeshInput, useExisting: NgtsSpotLightShadow }], usesInheritance: true, ngImport: i0, template: `
|
|
245
|
+
<ngts-spot-light-shadow-mesh-shader *ngIf="shader(); else noShader" />
|
|
246
|
+
<ng-template #noShader>
|
|
247
|
+
<ngts-spot-light-shadow-mesh-no-shader />
|
|
248
|
+
</ng-template>
|
|
249
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgtsSpotLightShadowMeshShader, selector: "ngts-spot-light-shadow-mesh-shader" }, { kind: "component", type: NgtsSpotLightShadowMeshNoShader, selector: "ngts-spot-light-shadow-mesh-no-shader" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
250
|
+
}
|
|
251
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightShadow, decorators: [{
|
|
252
|
+
type: Component,
|
|
253
|
+
args: [{
|
|
254
|
+
selector: 'ngts-spot-light-shadow',
|
|
255
|
+
standalone: true,
|
|
256
|
+
template: `
|
|
257
|
+
<ngts-spot-light-shadow-mesh-shader *ngIf="shader(); else noShader" />
|
|
258
|
+
<ng-template #noShader>
|
|
259
|
+
<ngts-spot-light-shadow-mesh-no-shader />
|
|
260
|
+
</ng-template>
|
|
261
|
+
`,
|
|
262
|
+
imports: [NgtsSpotLightShadowMeshShader, NgtsSpotLightShadowMeshNoShader, NgIf],
|
|
263
|
+
providers: [{ provide: NgtsSpotLightShadowMeshInput, useExisting: NgtsSpotLightShadow }],
|
|
264
|
+
}]
|
|
265
|
+
}] });
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZG93LW1lc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvc3BvdC1saWdodC9zaGFkb3ctbWVzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUNOLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04scUJBQXFCLEdBRXJCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsV0FBVyxFQUNYLE1BQU0sRUFDTixrQkFBa0IsRUFDbEIsWUFBWSxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLDRCQUE0QixFQUEwQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFdEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUE0QixFQUE0QixFQUFFO0lBQzlFLE9BQVEsS0FBeUIsRUFBRSxXQUFXLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBRUYsU0FBUyxzQkFBc0IsQ0FDOUIsWUFBNkMsRUFDN0MsT0FBbUMsRUFDbkMsS0FBbUIsRUFDbkIsTUFBb0IsRUFDcEIsUUFBc0IsRUFDdEIsUUFBbUI7SUFFbkIsUUFBUSxHQUFHLHNCQUFzQixDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDcEMsTUFBTSxHQUFH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T0FBTyxFQUFFLDRCQUE0QixFQUFFLFdBQVcscUJBQXFCLEVBQUUsQ0FBQztpQkFDeEYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRydW5JbkluamVjdGlvbkNvbnRleHQsXG5cdHR5cGUgSW5qZWN0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0YXNzZXJ0SW5qZWN0aW9uQ29udGV4dCxcblx0Y2hlY2tVcGRhdGUsXG5cdGV4dGVuZCxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3ROZ3RSZWYsXG5cdHR5cGUgTmd0SW5qZWN0ZWRSZWYsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTWVzaCwgTWVzaEJhc2ljTWF0ZXJpYWwsIFBsYW5lR2VvbWV0cnkgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBGdWxsU2NyZWVuUXVhZCB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaElucHV0LCB0eXBlIE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoSW5wdXRTdGF0ZSB9IGZyb20gJy4vc2hhZG93LW1lc2gtaW5wdXQnO1xuaW1wb3J0IHsgaW5qZWN0Tmd0c1Nwb3RMaWdodEFwaSB9IGZyb20gJy4vc3BvdC1saWdodCc7XG5cbmNvbnN0IGlzU3BvdExpZ2h0ID0gKGNoaWxkOiBUSFJFRS5PYmplY3QzRCB8IG51bGwpOiBjaGlsZCBpcyBUSFJFRS5TcG90TGlnaHQgPT4ge1xuXHRyZXR1cm4gKGNoaWxkIGFzIFRIUkVFLlNwb3RMaWdodCk/LmlzU3BvdExpZ2h0O1xufTtcblxuZnVuY3Rpb24gaW5qZWN0U2hhZG93TWVzaENvbW1vbihcblx0c3BvdExpZ2h0UmVmOiBOZ3RJbmplY3RlZFJlZjxUSFJFRS5TcG90TGlnaHQ+LFxuXHRtZXNoUmVmOiBOZ3RJbmplY3RlZFJlZjxUSFJFRS5NZXNoPixcblx0d2lkdGg6ICgpID0+IG51bWJlcixcblx0aGVpZ2h0OiAoKSA9PiBudW1iZXIsXG5cdGRpc3RhbmNlOiAoKSA9PiBudW1iZXIsXG5cdGluamVjdG9yPzogSW5qZWN0b3IsXG4pIHtcblx0aW5qZWN0b3IgPSBhc3NlcnRJbmplY3Rpb25Db250ZXh0KGluamVjdFNoYWRvd01lc2hDb21tb24sIGluamVjdG9yKTtcblx0cnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgcG9zID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblx0XHRjb25zdCBkaXIgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IHNwb3RMaWdodCA9IHNwb3RMaWdodFJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0aWYgKCFzcG90TGlnaHQpIHJldHVybjtcblx0XHRcdGlmIChpc1Nwb3RMaWdodChzcG90TGlnaHQpKSB7XG5cdFx0XHRcdHNwb3RMaWdodC5zaGFkb3cubWFwU2l6ZS5zZXQod2lkdGgoKSwgaGVpZ2h0KCkpO1xuXHRcdFx0XHRpZiAoc3BvdExpZ2h0LnNoYWRvdy5tYXApIHtcblx0XHRcdFx0XHRzcG90TGlnaHQuc2hhZG93Lm1hcC5zZXRTaXplKHdpZHRoKCksIGhlaWdodCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzcG90TGlnaHQuc2hhZG93Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignPG5ndHMtc3BvdC1saWdodC1zaGFkb3c+IG11c3QgYmUgYSBjaGlsZCBvZiBhIDxuZ3RzLXNwb3QtbGlnaHQ+Jyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3BvdExpZ2h0ID0gc3BvdExpZ2h0UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRjb25zdCBtZXNoID0gbWVzaFJlZi5uYXRpdmVFbGVtZW50O1xuXG5cdFx0XHRpZiAoIXNwb3RMaWdodCkgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBBID0gc3BvdExpZ2h0LnBvc2l0aW9uO1xuXHRcdFx0Y29uc3QgQiA9IHNwb3RMaWdodC50YXJnZXQucG9zaXRpb247XG5cblx0XHRcdGRpci5jb3B5KEIpLnN1YihBKTtcblx0XHRcdGNvbnN0IGxlbiA9IGRpci5sZW5ndGgoKTtcblx0XHRcdGRpci5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihsZW4gKiBkaXN0YW5jZSgpKTtcblx0XHRcdHBvcy5jb3B5KEEpLmFkZChkaXIpO1xuXG5cdFx0XHRpZiAobWVzaCkge1xuXHRcdFx0XHRtZXNoLnBvc2l0aW9uLmNvcHkocG9zKTtcblx0XHRcdFx0bWVzaC5sb29rQXQoc3BvdExpZ2h0LnRhcmdldC5wb3NpdGlvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5leHRlbmQoeyBNZXNoLCBQbGFuZUdlb21ldHJ5LCBNZXNoQmFzaWNNYXRlcmlhbCB9KTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1tZXNoLW5vLXNoYWRlcicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1tZXNoIFtyZWZdPVwibWVzaFJlZlwiIFtzY2FsZV09XCJzaGFkb3dNZXNoSW5wdXQuc2NhbGUoKVwiIFtjYXN0U2hhZG93XT1cInRydWVcIj5cblx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cblx0XHRcdDxuZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbFxuXHRcdFx0XHRbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG5cdFx0XHRcdFtzaWRlXT1cIkRvdWJsZVNpZGVcIlxuXHRcdFx0XHRbYWxwaGFUZXN0XT1cInNoYWRvd01lc2hJbnB1dC5hbHBoYVRlc3QoKVwiXG5cdFx0XHRcdFthbHBoYU1hcF09XCJzaGFkb3dNZXNoSW5wdXQubWFwKClcIlxuXHRcdFx0XHRbb3BhY2l0eV09XCJkZWJ1ZygpID8gMSA6IDBcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9uZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbD5cblx0XHQ8L25ndC1tZXNoPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoTm9TaGFkZXIge1xuXHRzaGFkb3dNZXNoSW5wdXQgPSBpbmplY3QoTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hJbnB1dCk7XG5cblx0bWVzaFJlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5NZXNoPigpO1xuXHREb3VibGVTaWRlID0gVEhSRUUuRG91YmxlU2lkZTtcblxuXHRwcml2YXRlIHNwb3RMaWdodEFwaSA9IGluamVjdE5ndHNTcG90TGlnaHRBcGkoKTtcblx0ZGVidWcgPSB0aGlzLnNwb3RMaWdodEFwaS5kZWJ1ZztcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dGhpcy5zaGFkb3dNZXNoSW5wdXQuaW5wdXRzLnBhdGNoKHsgZGlzdGFuY2U6IDAuNCwgYWxwaGFUZXN0OiAwLjUsIHdpZHRoOiA1MTIsIGhlaWdodDogNTEyLCBzY2FsZTogMSB9KTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBtYXAgPSB0aGlzLnNoYWRvd01lc2hJbnB1dC5tYXAoKTtcblx0XHRcdGlmIChtYXApIHtcblx0XHRcdFx0bWFwLndyYXBTID0gbWFwLndyYXBUID0gVEhSRUUuUmVwZWF0V3JhcHBpbmc7XG5cdFx0XHRcdGNoZWNrVXBkYXRlKG1hcCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpbmplY3RTaGFkb3dNZXNoQ29tbW9uKFxuXHRcdFx0dGhpcy5zcG90TGlnaHRBcGkuc3BvdExpZ2h0LFxuXHRcdFx0dGhpcy5tZXNoUmVmLFxuXHRcdFx0dGhpcy5zaGFkb3dNZXNoSW5wdXQud2lkdGgsXG5cdFx0XHR0aGlzLnNoYWRvd01lc2hJbnB1dC5oZWlnaHQsXG5cdFx0XHR0aGlzLnNoYWRvd01lc2hJbnB1dC5kaXN0YW5jZSxcblx0XHQpO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc3BvdC1saWdodC1zaGFkb3ctbWVzaC1zaGFkZXInLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaCBbcmVmXT1cIm1lc2hSZWZcIiBbc2NhbGVdPVwic2hhZG93TWVzaElucHV0LnNjYWxlKClcIiBbY2FzdFNoYWRvd109XCJ0cnVlXCI+XG5cdFx0XHQ8bmd0LXBsYW5lLWdlb21ldHJ5IC8+XG5cdFx0XHQ8bmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWxcblx0XHRcdFx0W3RyYW5zcGFyZW50XT1cInRydWVcIlxuXHRcdFx0XHRbc2lkZV09XCJEb3VibGVTaWRlXCJcblx0XHRcdFx0W2FscGhhVGVzdF09XCJzaGFkb3dNZXNoSW5wdXQuYWxwaGFUZXN0KClcIlxuXHRcdFx0XHRbYWxwaGFNYXBdPVwicmVuZGVyVGFyZ2V0KCkudGV4dHVyZVwiXG5cdFx0XHRcdFtvcGFjaXR5XT1cImRlYnVnKCkgPyAxIDogMFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgW3Jhd1ZhbHVlXT1cIlJlcGVhdFdyYXBwaW5nXCIgYXR0YWNoPVwiYWxwaGFNYXAud3JhcFNcIiAvPlxuXHRcdFx0XHQ8bmd0LXZhbHVlIFtyYXdWYWx1ZV09XCJSZXBlYXRXcmFwcGluZ1wiIGF0dGFjaD1cImFscGhhTWFwLndyYXBUXCIgLz5cblx0XHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHRcdDwvbmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWw+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaFNoYWRlciB7XG5cdHNoYWRvd01lc2hJbnB1dCA9IGluamVjdChOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaElucHV0KTtcblx0bWVzaFJlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5NZXNoPigpO1xuXG5cdERvdWJsZVNpZGUgPSBUSFJFRS5Eb3VibGVTaWRlO1xuXHRSZXBlYXRXcmFwcGluZyA9IFRIUkVFLlJlcGVhdFdyYXBwaW5nO1xuXG5cdHByaXZhdGUgc3BvdExpZ2h0QXBpID0gaW5qZWN0Tmd0c1Nwb3RMaWdodEFwaSgpO1xuXHRkZWJ1ZyA9IHRoaXMuc3BvdExpZ2h0QXBpLmRlYnVnO1xuXHRyZW5kZXJUYXJnZXQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW3dpZHRoLCBoZWlnaHRdID0gW3RoaXMuc2hhZG93TWVzaElucHV0LndpZHRoKCksIHRoaXMuc2hhZG93TWVzaElucHV0LmhlaWdodCgpXTtcblxuXHRcdHJldHVybiBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwge1xuXHRcdFx0Zm9ybWF0OiBUSFJFRS5SR0JBRm9ybWF0LFxuXHRcdFx0ZW5jb2Rpbmc6IFRIUkVFLkxpbmVhckVuY29kaW5nLFxuXHRcdFx0c3RlbmNpbEJ1ZmZlcjogZmFsc2UsXG5cdFx0XHQvLyBkZXB0aFRleHR1cmU6IG51bGwhXG5cdFx0fSk7XG5cdH0pO1xuXG5cdHByaXZhdGUgdW5pZm9ybXMgPSB7XG5cdFx0dVNoYWRvd01hcDogeyB2YWx1ZTogdGhpcy5zaGFkb3dNZXNoSW5wdXQubWFwKCkgfSxcblx0XHR1VGltZTogeyB2YWx1ZTogMCB9LFxuXHR9O1xuXG5cdHByaXZhdGUgZnNRdWFkID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHNoYWRlciA9IHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRlcigpO1xuXHRcdGlmICghc2hhZGVyKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gbmV3IEZ1bGxTY3JlZW5RdWFkKFxuXHRcdFx0bmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHtcblx0XHRcdFx0dW5pZm9ybXM6IHRoaXMudW5pZm9ybXMsXG5cdFx0XHRcdHZlcnRleFNoYWRlcjogLyogZ2xzbCAqLyBgXG4gICAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjtcblxuICAgICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgICAgIHZVdiA9IHV2O1xuICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICAgICAgICB9XG4gICAgICAgIGAsXG5cdFx0XHRcdGZyYWdtZW50U2hhZGVyOiBzaGFkZXIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dGhpcy5zaGFkb3dNZXNoSW5wdXQuaW5wdXRzLnBhdGNoKHtcblx0XHRcdFx0ZGlzdGFuY2U6IDAuNCxcblx0XHRcdFx0YWxwaGFUZXN0OiAwLjUsXG5cdFx0XHRcdHdpZHRoOiA1MTIsXG5cdFx0XHRcdGhlaWdodDogNTEyLFxuXHRcdFx0XHRzY2FsZTogNCxcblx0XHRcdFx0c2hhZGVyOiAvKiBnbHNsICovIGBcbiAgICAgICAgICB2YXJ5aW5nIHZlYzIgdlV2O1xuXG4gICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdVNoYWRvd01hcDtcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVUaW1lO1xuXG4gICAgICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICAgICAgdmVjMyBjb2xvciA9IHRleHR1cmUyRCh1U2hhZG93TWFwLCB2VXYpLnh5ejtcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIDEuKTtcbiAgICAgICAgICB9XG4gICAgICAgIGAsXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdFNoYWRvd01lc2hDb21tb24oXG5cdFx0XHR0aGlzLnNwb3RMaWdodEFwaS5zcG90TGlnaHQsXG5cdFx0XHR0aGlzLm1lc2hSZWYsXG5cdFx0XHR0aGlzLnNoYWRvd01lc2hJbnB1dC53aWR0aCxcblx0XHRcdHRoaXMuc2hhZG93TWVzaElucHV0LmhlaWdodCxcblx0XHRcdHRoaXMuc2hhZG93TWVzaElucHV0LmRpc3RhbmNlLFxuXHRcdCk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgZGVsdGEsIGdsIH0pID0+IHtcblx0XHRcdHRoaXMudW5pZm9ybXMudVRpbWUudmFsdWUgKz0gZGVsdGE7XG5cdFx0XHRjb25zdCBmc1F1YWQgPSB0aGlzLmZzUXVhZCgpO1xuXHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXQoKTtcblx0XHRcdGlmIChmc1F1YWQgJiYgcmVuZGVyVGFyZ2V0KSB7XG5cdFx0XHRcdGdsLnNldFJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuXHRcdFx0XHRmc1F1YWQucmVuZGVyKGdsKTtcblx0XHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IG1hcCA9IHRoaXMuc2hhZG93TWVzaElucHV0Lm1hcCgpO1xuXHRcdFx0aWYgKG1hcCkge1xuXHRcdFx0XHR0aGlzLnVuaWZvcm1zLnVTaGFkb3dNYXAudmFsdWUgPSBtYXA7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgZnNRdWFkID0gdGhpcy5mc1F1YWQoKTtcblx0XHRcdG9uQ2xlYW51cCgoKSA9PiB7XG5cdFx0XHRcdGlmIChmc1F1YWQpIHtcblx0XHRcdFx0XHRmc1F1YWQuZGlzcG9zZSgpO1xuXHRcdFx0XHRcdGZzUXVhZC5tYXRlcmlhbC5kaXNwb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IHJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0KCk7XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRyZW5kZXJUYXJnZXQuZGlzcG9zZSgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcblx0XHQnbmd0cy1zcG90LWxpZ2h0LXNoYWRvdyc6IE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoSW5wdXRTdGF0ZTtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXNwb3QtbGlnaHQtc2hhZG93Jyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1tZXNoLXNoYWRlciAqbmdJZj1cInNoYWRlcigpOyBlbHNlIG5vU2hhZGVyXCIgLz5cblx0XHQ8bmctdGVtcGxhdGUgI25vU2hhZGVyPlxuXHRcdFx0PG5ndHMtc3BvdC1saWdodC1zaGFkb3ctbWVzaC1uby1zaGFkZXIgLz5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hTaGFkZXIsIE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoTm9TaGFkZXIsIE5nSWZdLFxuXHRwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoSW5wdXQsIHVzZUV4aXN0aW5nOiBOZ3RzU3BvdExpZ2h0U2hhZG93IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3BvdExpZ2h0U2hhZG93IGV4dGVuZHMgTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hJbnB1dCB7fVxuIl19
|
|
@@ -1,75 +1,84 @@
|
|
|
1
1
|
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { signalStore } from 'angular-three';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
class NgtsSpotLightInput
|
|
4
|
+
export class NgtsSpotLightInput {
|
|
5
5
|
constructor() {
|
|
6
|
-
|
|
7
|
-
this.
|
|
8
|
-
this.
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
6
|
+
this.inputs = signalStore({});
|
|
7
|
+
this.debug = this.inputs.select('debug');
|
|
8
|
+
this.color = this.inputs.select('color');
|
|
9
|
+
this.opacity = this.inputs.select('opacity');
|
|
10
|
+
this.radiusBottom = this.inputs.select('radiusBottom');
|
|
11
|
+
this.radiusTop = this.inputs.select('radiusTop');
|
|
12
|
+
this.anglePower = this.inputs.select('anglePower');
|
|
13
|
+
this.attenuation = this.inputs.select('attenuation');
|
|
14
|
+
this.distance = this.inputs.select('distance');
|
|
15
|
+
this.angle = this.inputs.select('angle');
|
|
16
|
+
this.depthBuffer = this.inputs.select('depthBuffer');
|
|
17
17
|
}
|
|
18
|
-
set
|
|
19
|
-
this.set({ depthBuffer });
|
|
18
|
+
set _depthBuffer(depthBuffer) {
|
|
19
|
+
this.inputs.set({ depthBuffer });
|
|
20
20
|
}
|
|
21
|
-
set
|
|
22
|
-
this.set({ angle });
|
|
21
|
+
set _angle(angle) {
|
|
22
|
+
this.inputs.set({ angle });
|
|
23
23
|
}
|
|
24
|
-
set
|
|
25
|
-
this.set({ distance });
|
|
24
|
+
set _distance(distance) {
|
|
25
|
+
this.inputs.set({ distance });
|
|
26
26
|
}
|
|
27
|
-
set
|
|
28
|
-
this.set({ attenuation });
|
|
27
|
+
set _attenuation(attenuation) {
|
|
28
|
+
this.inputs.set({ attenuation });
|
|
29
29
|
}
|
|
30
|
-
set
|
|
31
|
-
this.set({ anglePower });
|
|
30
|
+
set _anglePower(anglePower) {
|
|
31
|
+
this.inputs.set({ anglePower });
|
|
32
32
|
}
|
|
33
|
-
set
|
|
34
|
-
this.set({ radiusTop });
|
|
33
|
+
set _radiusTop(radiusTop) {
|
|
34
|
+
this.inputs.set({ radiusTop });
|
|
35
35
|
}
|
|
36
|
-
set
|
|
37
|
-
this.set({ radiusBottom });
|
|
36
|
+
set _radiusBottom(radiusBottom) {
|
|
37
|
+
this.inputs.set({ radiusBottom });
|
|
38
38
|
}
|
|
39
|
-
set
|
|
40
|
-
this.set({ opacity });
|
|
39
|
+
set _opacity(opacity) {
|
|
40
|
+
this.inputs.set({ opacity });
|
|
41
41
|
}
|
|
42
|
-
set
|
|
43
|
-
this.set({ color });
|
|
42
|
+
set _color(color) {
|
|
43
|
+
this.inputs.set({ color });
|
|
44
44
|
}
|
|
45
|
-
set
|
|
46
|
-
this.set({ debug });
|
|
45
|
+
set _debug(debug) {
|
|
46
|
+
this.inputs.set({ debug });
|
|
47
47
|
}
|
|
48
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.
|
|
49
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.
|
|
48
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
49
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSpotLightInput, inputs: { _depthBuffer: ["depthBuffer", "_depthBuffer"], _angle: ["angle", "_angle"], _distance: ["distance", "_distance"], _attenuation: ["attenuation", "_attenuation"], _anglePower: ["anglePower", "_anglePower"], _radiusTop: ["radiusTop", "_radiusTop"], _radiusBottom: ["radiusBottom", "_radiusBottom"], _opacity: ["opacity", "_opacity"], _color: ["color", "_color"], _debug: ["debug", "_debug"] }, ngImport: i0 }); }
|
|
50
50
|
}
|
|
51
|
-
|
|
52
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsSpotLightInput, decorators: [{
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSpotLightInput, decorators: [{
|
|
53
52
|
type: Directive
|
|
54
|
-
}], propDecorators: {
|
|
55
|
-
type: Input
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}],
|
|
61
|
-
type: Input
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}],
|
|
67
|
-
type: Input
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}],
|
|
73
|
-
type: Input
|
|
53
|
+
}], propDecorators: { _depthBuffer: [{
|
|
54
|
+
type: Input,
|
|
55
|
+
args: [{ alias: 'depthBuffer' }]
|
|
56
|
+
}], _angle: [{
|
|
57
|
+
type: Input,
|
|
58
|
+
args: [{ alias: 'angle' }]
|
|
59
|
+
}], _distance: [{
|
|
60
|
+
type: Input,
|
|
61
|
+
args: [{ alias: 'distance' }]
|
|
62
|
+
}], _attenuation: [{
|
|
63
|
+
type: Input,
|
|
64
|
+
args: [{ alias: 'attenuation' }]
|
|
65
|
+
}], _anglePower: [{
|
|
66
|
+
type: Input,
|
|
67
|
+
args: [{ alias: 'anglePower' }]
|
|
68
|
+
}], _radiusTop: [{
|
|
69
|
+
type: Input,
|
|
70
|
+
args: [{ alias: 'radiusTop' }]
|
|
71
|
+
}], _radiusBottom: [{
|
|
72
|
+
type: Input,
|
|
73
|
+
args: [{ alias: 'radiusBottom' }]
|
|
74
|
+
}], _opacity: [{
|
|
75
|
+
type: Input,
|
|
76
|
+
args: [{ alias: 'opacity' }]
|
|
77
|
+
}], _color: [{
|
|
78
|
+
type: Input,
|
|
79
|
+
args: [{ alias: 'color' }]
|
|
80
|
+
}], _debug: [{
|
|
81
|
+
type: Input,
|
|
82
|
+
args: [{ alias: 'debug' }]
|
|
74
83
|
}] } });
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zdGFnaW5nL3NyYy9zcG90LWxpZ2h0L3Nwb3QtbGlnaHQtaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFnQjVDLE1BQU0sT0FBZ0Isa0JBQWtCO0lBRHhDO1FBRUMsV0FBTSxHQUFHLFdBQVcsQ0FBMEIsRUFBRSxDQUFDLENBQUM7UUEwQ2xELFVBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsWUFBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLGlCQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEQsY0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLGVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5QyxnQkFBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hELGFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsZ0JBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNoRDtJQWxEQSxJQUFxQyxZQUFZLENBQUMsV0FBK0I7UUFDaEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUErQixNQUFNLENBQUMsS0FBYTtRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQWtDLFNBQVMsQ0FBQyxRQUFnQjtRQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQXFDLFlBQVksQ0FBQyxXQUFtQjtRQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQW9DLFdBQVcsQ0FBQyxVQUFrQjtRQUNqRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELElBQW1DLFVBQVUsQ0FBQyxTQUFpQjtRQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQXNDLGFBQWEsQ0FBQyxZQUFvQjtRQUN2RSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQWlDLFFBQVEsQ0FBQyxPQUFlO1FBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBK0IsTUFBTSxDQUFDLEtBQXNCO1FBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBK0IsTUFBTSxDQUFDLEtBQWM7UUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7OEdBekNvQixrQkFBa0I7a0dBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEdkMsU0FBUzs4QkFJNEIsWUFBWTtzQkFBaEQsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7Z0JBSUEsTUFBTTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBSVMsU0FBUztzQkFBMUMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBSVMsWUFBWTtzQkFBaEQsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7Z0JBSUssV0FBVztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBSUssVUFBVTtzQkFBNUMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7Z0JBSVMsYUFBYTtzQkFBbEQsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUU7Z0JBSUMsUUFBUTtzQkFBeEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBSUksTUFBTTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBSU0sTUFBTTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzaWduYWxTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuXG5leHBvcnQgdHlwZSBOZ3RzU3BvdExpZ2h0SW5wdXRTdGF0ZSA9IHtcblx0ZGVwdGhCdWZmZXI/OiBUSFJFRS5EZXB0aFRleHR1cmU7XG5cdGFuZ2xlOiBudW1iZXI7XG5cdGRpc3RhbmNlOiBudW1iZXI7XG5cdGF0dGVudWF0aW9uOiBudW1iZXI7XG5cdGFuZ2xlUG93ZXI6IG51bWJlcjtcblx0cmFkaXVzVG9wOiBudW1iZXI7XG5cdHJhZGl1c0JvdHRvbTogbnVtYmVyO1xuXHRvcGFjaXR5OiBudW1iZXI7XG5cdGNvbG9yOiBzdHJpbmcgfCBudW1iZXI7XG5cdGRlYnVnOiBib29sZWFuO1xufTtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd0c1Nwb3RMaWdodElucHV0IHtcblx0aW5wdXRzID0gc2lnbmFsU3RvcmU8Tmd0c1Nwb3RMaWdodElucHV0U3RhdGU+KHt9KTtcblxuXHRASW5wdXQoeyBhbGlhczogJ2RlcHRoQnVmZmVyJyB9KSBzZXQgX2RlcHRoQnVmZmVyKGRlcHRoQnVmZmVyOiBUSFJFRS5EZXB0aFRleHR1cmUpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBkZXB0aEJ1ZmZlciB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnYW5nbGUnIH0pIHNldCBfYW5nbGUoYW5nbGU6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGFuZ2xlIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdkaXN0YW5jZScgfSkgc2V0IF9kaXN0YW5jZShkaXN0YW5jZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZGlzdGFuY2UgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2F0dGVudWF0aW9uJyB9KSBzZXQgX2F0dGVudWF0aW9uKGF0dGVudWF0aW9uOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBhdHRlbnVhdGlvbiB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnYW5nbGVQb3dlcicgfSkgc2V0IF9hbmdsZVBvd2VyKGFuZ2xlUG93ZXI6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGFuZ2xlUG93ZXIgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3JhZGl1c1RvcCcgfSkgc2V0IF9yYWRpdXNUb3AocmFkaXVzVG9wOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyByYWRpdXNUb3AgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3JhZGl1c0JvdHRvbScgfSkgc2V0IF9yYWRpdXNCb3R0b20ocmFkaXVzQm90dG9tOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyByYWRpdXNCb3R0b20gfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ29wYWNpdHknIH0pIHNldCBfb3BhY2l0eShvcGFjaXR5OiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBvcGFjaXR5IH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdjb2xvcicgfSkgc2V0IF9jb2xvcihjb2xvcjogc3RyaW5nIHwgbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgY29sb3IgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2RlYnVnJyB9KSBzZXQgX2RlYnVnKGRlYnVnOiBib29sZWFuKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZGVidWcgfSk7XG5cdH1cblxuXHRkZWJ1ZyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnZGVidWcnKTtcblx0Y29sb3IgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2NvbG9yJyk7XG5cdG9wYWNpdHkgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ29wYWNpdHknKTtcblx0cmFkaXVzQm90dG9tID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdyYWRpdXNCb3R0b20nKTtcblx0cmFkaXVzVG9wID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdyYWRpdXNUb3AnKTtcblx0YW5nbGVQb3dlciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYW5nbGVQb3dlcicpO1xuXHRhdHRlbnVhdGlvbiA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYXR0ZW51YXRpb24nKTtcblx0ZGlzdGFuY2UgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2Rpc3RhbmNlJyk7XG5cdGFuZ2xlID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdhbmdsZScpO1xuXHRkZXB0aEJ1ZmZlciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnZGVwdGhCdWZmZXInKTtcbn1cbiJdfQ==
|