angular-three-soba 2.0.0-beta.2 → 2.0.0-beta.21
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 +24 -12
- package/abstractions/grid/grid.d.ts +50 -0
- package/abstractions/index.d.ts +2 -7
- package/abstractions/text/text.d.ts +10 -5
- package/abstractions/text-3d/text-3d.d.ts +51 -41
- 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 +31 -12
- 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 +180 -0
- package/esm2022/abstractions/index.mjs +3 -8
- package/esm2022/abstractions/text/text.mjs +123 -124
- package/esm2022/abstractions/text-3d/text-3d.mjs +120 -115
- package/esm2022/cameras/camera/camera-content.mjs +6 -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 +105 -85
- package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +197 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +93 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +150 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +66 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +71 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +195 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +272 -0
- package/esm2022/gizmos/index.mjs +4 -0
- package/esm2022/loaders/gltf-loader/gltf-loader.mjs +3 -6
- package/esm2022/loaders/loader/loader.mjs +92 -87
- package/esm2022/loaders/progress/progress.mjs +29 -29
- 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 +102 -99
- 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 +50 -0
- package/esm2022/misc/animations/animations.mjs +36 -32
- 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 +8 -0
- package/esm2022/performances/instances/instances.mjs +220 -0
- package/esm2022/performances/instances/position-mesh.mjs +52 -0
- package/esm2022/performances/points/points-input.mjs +64 -0
- package/esm2022/performances/points/points.mjs +326 -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 +2 -2
- 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 +77 -0
- package/esm2022/shaders/index.mjs +6 -3
- package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
- package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +2 -2
- 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 +69 -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 +129 -112
- 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 +17 -19
- package/esm2022/staging/environment/environment-input.mjs +98 -85
- 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 +37 -15
- 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 +67 -70
- package/esm2022/staging/stage/stage.mjs +305 -290
- package/esm2022/staging/stars/stars.mjs +101 -102
- package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
- package/esm2022/staging/wireframe/wireframe.mjs +228 -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 +514 -1947
- 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 +104 -83
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-gizmos.mjs +1043 -0
- package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
- package/fesm2022/angular-three-soba-loaders.mjs +121 -117
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +662 -592
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +2214 -105
- 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 +956 -0
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
- package/fesm2022/angular-three-soba-shaders.mjs +549 -252
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +2899 -2563
- 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/gizmos/README.md +3 -0
- package/gizmos/gizmo-helper/gizmo-helper.d.ts +69 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +29 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +33 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +10 -0
- package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +40 -0
- package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +30 -0
- package/gizmos/index.d.ts +3 -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 +31 -16
- 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 +7 -0
- package/performances/instances/instances.d.ts +79 -0
- package/{performance → performances}/instances/position-mesh.d.ts +1 -1
- package/performances/points/points-input.d.ts +32 -0
- package/performances/points/points.d.ts +92 -0
- package/performances/points/position-point.d.ts +11 -0
- 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 +37 -0
- package/shaders/index.d.ts +5 -2
- package/shaders/mesh-distort-material/mesh-distort-material.d.ts +147 -2
- 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 +37 -37
- 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 +36 -22
- 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 +89 -65
- package/staging/stars/stars.d.ts +28 -17
- 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/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 -256
- 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 -4
- package/plugin/src/generators/init/init.js +0 -22
- 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/{abstractions → gizmos}/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -0
- /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,111 @@
|
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, computed } from '@angular/core';
|
|
2
|
+
import { NgtArgs, extend, injectNgtRef, signalStore } from 'angular-three';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { CanvasTexture, Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
extend({ Mesh, CanvasTexture, PlaneGeometry, MeshBasicMaterial });
|
|
7
|
+
export class NgtsShadow {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.Math = Math;
|
|
10
|
+
this.DoubleSide = THREE.DoubleSide;
|
|
11
|
+
this.inputs = signalStore({
|
|
12
|
+
fog: false,
|
|
13
|
+
depthWrite: false,
|
|
14
|
+
colorStop: 0.0,
|
|
15
|
+
color: 'black',
|
|
16
|
+
opacity: 0.5,
|
|
17
|
+
});
|
|
18
|
+
this.shadowRef = injectNgtRef();
|
|
19
|
+
this.colorStop = this.inputs.select('colorStop');
|
|
20
|
+
this.color = this.inputs.select('color');
|
|
21
|
+
this.opacity = this.inputs.select('opacity');
|
|
22
|
+
this.fog = this.inputs.select('fog');
|
|
23
|
+
this.depthWrite = this.inputs.select('depthWrite');
|
|
24
|
+
this.canvas = computed(() => {
|
|
25
|
+
const [colorStop, color] = [this.colorStop(), this.color()];
|
|
26
|
+
const canvas = document.createElement('canvas');
|
|
27
|
+
canvas.width = 128;
|
|
28
|
+
canvas.height = 128;
|
|
29
|
+
const context = canvas.getContext('2d');
|
|
30
|
+
const gradient = context.createRadialGradient(canvas.width / 2, canvas.height / 2, 0, canvas.width / 2, canvas.height / 2, canvas.width / 2);
|
|
31
|
+
gradient.addColorStop(colorStop, new THREE.Color(color).getStyle());
|
|
32
|
+
gradient.addColorStop(1, 'rgba(0,0,0,0)');
|
|
33
|
+
context.fillStyle = gradient;
|
|
34
|
+
context.fillRect(0, 0, canvas.width, canvas.height);
|
|
35
|
+
return canvas;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
set _colorStop(colorStop) {
|
|
39
|
+
this.inputs.set({ colorStop });
|
|
40
|
+
}
|
|
41
|
+
set _fog(fog) {
|
|
42
|
+
this.inputs.set({ fog });
|
|
43
|
+
}
|
|
44
|
+
set _color(color) {
|
|
45
|
+
this.inputs.set({ color });
|
|
46
|
+
}
|
|
47
|
+
set _opacity(opacity) {
|
|
48
|
+
this.inputs.set({ opacity });
|
|
49
|
+
}
|
|
50
|
+
set _depthWrite(depthWrite) {
|
|
51
|
+
this.inputs.set({ depthWrite });
|
|
52
|
+
}
|
|
53
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsShadow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
54
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtsShadow, isStandalone: true, selector: "ngts-shadow", inputs: { shadowRef: "shadowRef", _colorStop: ["colorStop", "_colorStop"], _fog: ["fog", "_fog"], _color: ["color", "_color"], _opacity: ["opacity", "_opacity"], _depthWrite: ["depthWrite", "_depthWrite"] }, ngImport: i0, template: `
|
|
55
|
+
<ngt-mesh ngtCompound [ref]="shadowRef" [rotation]="[-Math.PI / 2, 0, 0]">
|
|
56
|
+
<ngt-plane-geometry />
|
|
57
|
+
<ngt-mesh-basic-material
|
|
58
|
+
[transparent]="true"
|
|
59
|
+
[opacity]="opacity()"
|
|
60
|
+
[fog]="fog()"
|
|
61
|
+
[depthWrite]="depthWrite()"
|
|
62
|
+
[side]="DoubleSide"
|
|
63
|
+
>
|
|
64
|
+
<ngt-canvas-texture *args="[canvas()]" attach="map" />
|
|
65
|
+
</ngt-mesh-basic-material>
|
|
66
|
+
<ng-content />
|
|
67
|
+
</ngt-mesh>
|
|
68
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
69
|
+
}
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsShadow, decorators: [{
|
|
71
|
+
type: Component,
|
|
72
|
+
args: [{
|
|
73
|
+
selector: 'ngts-shadow',
|
|
74
|
+
standalone: true,
|
|
75
|
+
template: `
|
|
76
|
+
<ngt-mesh ngtCompound [ref]="shadowRef" [rotation]="[-Math.PI / 2, 0, 0]">
|
|
77
|
+
<ngt-plane-geometry />
|
|
78
|
+
<ngt-mesh-basic-material
|
|
79
|
+
[transparent]="true"
|
|
80
|
+
[opacity]="opacity()"
|
|
81
|
+
[fog]="fog()"
|
|
82
|
+
[depthWrite]="depthWrite()"
|
|
83
|
+
[side]="DoubleSide"
|
|
84
|
+
>
|
|
85
|
+
<ngt-canvas-texture *args="[canvas()]" attach="map" />
|
|
86
|
+
</ngt-mesh-basic-material>
|
|
87
|
+
<ng-content />
|
|
88
|
+
</ngt-mesh>
|
|
89
|
+
`,
|
|
90
|
+
imports: [NgtArgs],
|
|
91
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
92
|
+
}]
|
|
93
|
+
}], propDecorators: { shadowRef: [{
|
|
94
|
+
type: Input
|
|
95
|
+
}], _colorStop: [{
|
|
96
|
+
type: Input,
|
|
97
|
+
args: [{ alias: 'colorStop' }]
|
|
98
|
+
}], _fog: [{
|
|
99
|
+
type: Input,
|
|
100
|
+
args: [{ alias: 'fog' }]
|
|
101
|
+
}], _color: [{
|
|
102
|
+
type: Input,
|
|
103
|
+
args: [{ alias: 'color' }]
|
|
104
|
+
}], _opacity: [{
|
|
105
|
+
type: Input,
|
|
106
|
+
args: [{ alias: 'opacity' }]
|
|
107
|
+
}], _depthWrite: [{
|
|
108
|
+
type: Input,
|
|
109
|
+
args: [{ alias: 'depthWrite' }]
|
|
110
|
+
}] } });
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21pc2Mvc3JjL3NoYWRvdy9zaGFkb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFtQjlFLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztBQXVCbEUsTUFBTSxPQUFPLFVBQVU7SUFyQnZCO1FBc0JDLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixlQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUV0QixXQUFNLEdBQUcsV0FBVyxDQUFrQjtZQUM3QyxHQUFHLEVBQUUsS0FBSztZQUNWLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxHQUFHO1lBQ2QsS0FBSyxFQUFFLE9BQU87WUFDZCxPQUFPLEVBQUUsR0FBRztTQUNaLENBQUMsQ0FBQztRQUVNLGNBQVMsR0FBRyxZQUFZLEVBQVEsQ0FBQztRQXNCbEMsY0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLFVBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1QyxZQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsUUFBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLGVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU5QyxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN0QixNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzVELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDbkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDcEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQTZCLENBQUM7WUFDcEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUM1QyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsRUFDaEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2pCLENBQUMsRUFDRCxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsRUFDaEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2pCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUNoQixDQUFDO1lBQ0YsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDcEUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDMUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7WUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELE9BQU8sTUFBTSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7S0FDSDtJQS9DQSxJQUFtQyxVQUFVLENBQUMsU0FBaUI7UUFDOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUE2QixJQUFJLENBQUMsR0FBWTtRQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQStCLE1BQU0sQ0FBQyxLQUFnQztRQUNyRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQWlDLFFBQVEsQ0FBQyxPQUFlO1FBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBb0MsV0FBVyxDQUFDLFVBQW1CO1FBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDOzhHQWhDVyxVQUFVO2tHQUFWLFVBQVUsdVJBbEJaOzs7Ozs7Ozs7Ozs7OztFQWNULDREQUNTLE9BQU87OzJGQUdMLFVBQVU7a0JBckJ0QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxhQUFhO29CQUN2QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7OztFQWNUO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2pDOzhCQWFTLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRTZCLFVBQVU7c0JBQTVDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO2dCQUlBLElBQUk7c0JBQWhDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO2dCQUlRLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUlRLFFBQVE7c0JBQXhDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUlTLFdBQVc7c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgQ29tcG9uZW50LCBJbnB1dCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MsIGV4dGVuZCwgaW5qZWN0Tmd0UmVmLCBzaWduYWxTdG9yZSwgdHlwZSBOZ3RNZXNoIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBDYW52YXNUZXh0dXJlLCBNZXNoLCBNZXNoQmFzaWNNYXRlcmlhbCwgUGxhbmVHZW9tZXRyeSB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IHR5cGUgTmd0c1NoYWRvd1N0YXRlID0ge1xuXHRjb2xvclN0b3A6IG51bWJlcjtcblx0Zm9nOiBib29sZWFuO1xuXHRjb2xvcjogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcblx0b3BhY2l0eTogbnVtYmVyO1xuXHRkZXB0aFdyaXRlOiBib29sZWFuO1xufTtcblxuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcblx0XHQvKipcblx0XHQgKiBAZXh0ZW5kcyBuZ3QtbWVzaFxuXHRcdCAqL1xuXHRcdCduZ3RzLXNoYWRvdyc6IE5ndHNTaGFkb3dTdGF0ZSAmIE5ndE1lc2g7XG5cdH1cbn1cblxuZXh0ZW5kKHsgTWVzaCwgQ2FudmFzVGV4dHVyZSwgUGxhbmVHZW9tZXRyeSwgTWVzaEJhc2ljTWF0ZXJpYWwgfSk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc2hhZG93Jyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LW1lc2ggbmd0Q29tcG91bmQgW3JlZl09XCJzaGFkb3dSZWZcIiBbcm90YXRpb25dPVwiWy1NYXRoLlBJIC8gMiwgMCwgMF1cIj5cblx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cblx0XHRcdDxuZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbFxuXHRcdFx0XHRbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG5cdFx0XHRcdFtvcGFjaXR5XT1cIm9wYWNpdHkoKVwiXG5cdFx0XHRcdFtmb2ddPVwiZm9nKClcIlxuXHRcdFx0XHRbZGVwdGhXcml0ZV09XCJkZXB0aFdyaXRlKClcIlxuXHRcdFx0XHRbc2lkZV09XCJEb3VibGVTaWRlXCJcblx0XHRcdD5cblx0XHRcdFx0PG5ndC1jYW52YXMtdGV4dHVyZSAqYXJncz1cIltjYW52YXMoKV1cIiBhdHRhY2g9XCJtYXBcIiAvPlxuXHRcdFx0PC9uZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbD5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTaGFkb3cge1xuXHRNYXRoID0gTWF0aDtcblx0RG91YmxlU2lkZSA9IFRIUkVFLkRvdWJsZVNpZGU7XG5cblx0cHJpdmF0ZSBpbnB1dHMgPSBzaWduYWxTdG9yZTxOZ3RzU2hhZG93U3RhdGU+KHtcblx0XHRmb2c6IGZhbHNlLFxuXHRcdGRlcHRoV3JpdGU6IGZhbHNlLFxuXHRcdGNvbG9yU3RvcDogMC4wLFxuXHRcdGNvbG9yOiAnYmxhY2snLFxuXHRcdG9wYWNpdHk6IDAuNSxcblx0fSk7XG5cblx0QElucHV0KCkgc2hhZG93UmVmID0gaW5qZWN0Tmd0UmVmPE1lc2g+KCk7XG5cblx0QElucHV0KHsgYWxpYXM6ICdjb2xvclN0b3AnIH0pIHNldCBfY29sb3JTdG9wKGNvbG9yU3RvcDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgY29sb3JTdG9wIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdmb2cnIH0pIHNldCBfZm9nKGZvZzogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGZvZyB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnY29sb3InIH0pIHNldCBfY29sb3IoY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb2xvciB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnb3BhY2l0eScgfSkgc2V0IF9vcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG9wYWNpdHkgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2RlcHRoV3JpdGUnIH0pIHNldCBfZGVwdGhXcml0ZShkZXB0aFdyaXRlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZGVwdGhXcml0ZSB9KTtcblx0fVxuXG5cdHByaXZhdGUgY29sb3JTdG9wID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdjb2xvclN0b3AnKTtcblx0cHJpdmF0ZSBjb2xvciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY29sb3InKTtcblxuXHRvcGFjaXR5ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdvcGFjaXR5Jyk7XG5cdGZvZyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnZm9nJyk7XG5cdGRlcHRoV3JpdGUgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2RlcHRoV3JpdGUnKTtcblxuXHRjYW52YXMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW2NvbG9yU3RvcCwgY29sb3JdID0gW3RoaXMuY29sb3JTdG9wKCksIHRoaXMuY29sb3IoKV07XG5cdFx0Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cdFx0Y2FudmFzLndpZHRoID0gMTI4O1xuXHRcdGNhbnZhcy5oZWlnaHQgPSAxMjg7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcblx0XHRjb25zdCBncmFkaWVudCA9IGNvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQoXG5cdFx0XHRjYW52YXMud2lkdGggLyAyLFxuXHRcdFx0Y2FudmFzLmhlaWdodCAvIDIsXG5cdFx0XHQwLFxuXHRcdFx0Y2FudmFzLndpZHRoIC8gMixcblx0XHRcdGNhbnZhcy5oZWlnaHQgLyAyLFxuXHRcdFx0Y2FudmFzLndpZHRoIC8gMixcblx0XHQpO1xuXHRcdGdyYWRpZW50LmFkZENvbG9yU3RvcChjb2xvclN0b3AsIG5ldyBUSFJFRS5Db2xvcihjb2xvcikuZ2V0U3R5bGUoKSk7XG5cdFx0Z3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDAsMCwwLDApJyk7XG5cdFx0Y29udGV4dC5maWxsU3R5bGUgPSBncmFkaWVudDtcblx0XHRjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG5cdFx0cmV0dXJuIGNhbnZhcztcblx0fSk7XG59XG5cbi8vXG4vL1xuLy8gdHlwZSBQcm9wcyA9IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snbWVzaCddICYge1xuLy8gICBjb2xvclN0b3A/OiBudW1iZXJcbi8vICAgZm9nPzogYm9vbGVhblxuLy8gICBjb2xvcj86IENvbG9yIHwgbnVtYmVyIHwgc3RyaW5nXG4vLyAgIG9wYWNpdHk/OiBudW1iZXJcbi8vICAgZGVwdGhXcml0ZT86IGJvb2xlYW5cbi8vIH1cbi8vXG4vLyBleHBvcnQgY29uc3QgU2hhZG93ID0gUmVhY3QuZm9yd2FyZFJlZihcbi8vICAgKFxuLy8gICAgIHsgZm9nID0gZmFsc2UsIHJlbmRlck9yZGVyLCBkZXB0aFdyaXRlID0gZmFsc2UsIGNvbG9yU3RvcCA9IDAuMCwgY29sb3IgPSAnYmxhY2snLCBvcGFjaXR5ID0gMC41LCAuLi5wcm9wcyB9OiBQcm9wcyxcbi8vICAgICByZWZcbi8vICAgKSA9PiB7XG4vLyAgICAgY29uc3QgY2FudmFzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4vLyAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxuLy8gICAgICAgY2FudmFzLndpZHRoID0gMTI4XG4vLyAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTI4XG4vLyAgICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG4vLyAgICAgICBjb25zdCBncmFkaWVudCA9IGNvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQoXG4vLyAgICAgICAgIGNhbnZhcy53aWR0aCAvIDIsXG4vLyAgICAgICAgIGNhbnZhcy5oZWlnaHQgLyAyLFxuLy8gICAgICAgICAwLFxuLy8gICAgICAgICBjYW52YXMud2lkdGggLyAyLFxuLy8gICAgICAgICBjYW52YXMuaGVpZ2h0IC8gMixcbi8vICAgICAgICAgY2FudmFzLndpZHRoIC8gMlxuLy8gICAgICAgKVxuLy8gICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKGNvbG9yU3RvcCwgbmV3IENvbG9yKGNvbG9yKS5nZXRTdHlsZSgpKVxuLy8gICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDAsMCwwLDApJylcbi8vICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZ3JhZGllbnRcbi8vICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KVxuLy8gICAgICAgcmV0dXJuIGNhbnZhc1xuLy8gICAgIH0sIFtjb2xvciwgY29sb3JTdG9wXSlcbi8vICAgICByZXR1cm4gKFxuLy8gICAgICAgPG1lc2ggcmVuZGVyT3JkZXI9e3JlbmRlck9yZGVyfSByZWY9e3JlZiBhcyBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PE1lc2g+fSByb3RhdGlvbi14PXstTWF0aC5QSSAvIDJ9IHsuLi5wcm9wc30+XG4vLyAgICAgICAgIDxwbGFuZUdlb21ldHJ5IC8+XG4vLyAgICAgICAgIDxtZXNoQmFzaWNNYXRlcmlhbCB0cmFuc3BhcmVudCBvcGFjaXR5PXtvcGFjaXR5fSBmb2c9e2ZvZ30gZGVwdGhXcml0ZT17ZGVwdGhXcml0ZX0gc2lkZT17RG91YmxlU2lkZX0+XG4vLyAgICAgICAgICAgPGNhbnZhc1RleHR1cmUgYXR0YWNoPVwibWFwXCIgYXJncz17W2NhbnZhc119IC8+XG4vLyAgICAgICAgIDwvbWVzaEJhc2ljTWF0ZXJpYWw+XG4vLyAgICAgICA8L21lc2g+XG4vLyAgICAgKVxuLy8gICB9XG4vLyApXG4iXX0=
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { Directive, Input, computed, effect, inject } from '@angular/core';
|
|
3
|
+
import { addAfterEffect, addEffect, injectNgtStore, is, signalStore } from 'angular-three';
|
|
4
|
+
import Stats from 'stats-gl';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class NgtsStatsGL {
|
|
7
|
+
set _parent(parent) {
|
|
8
|
+
this.inputs.set({ parent });
|
|
9
|
+
}
|
|
10
|
+
set _containerClass(containerClass) {
|
|
11
|
+
this.inputs.set({ containerClass });
|
|
12
|
+
}
|
|
13
|
+
set _config(config) {
|
|
14
|
+
this.inputs.set({ config });
|
|
15
|
+
}
|
|
16
|
+
constructor() {
|
|
17
|
+
this.inputs = signalStore();
|
|
18
|
+
this.document = inject(DOCUMENT);
|
|
19
|
+
this.store = injectNgtStore();
|
|
20
|
+
this.gl = this.store.select('gl');
|
|
21
|
+
this.config = this.inputs.select('config');
|
|
22
|
+
this.parent = this.inputs.select('parent');
|
|
23
|
+
this.containerClass = this.inputs.select('containerClass');
|
|
24
|
+
this.stats = computed(() => {
|
|
25
|
+
const [config, gl] = [this.config() || {}, this.gl()];
|
|
26
|
+
const stats = new Stats(config);
|
|
27
|
+
stats.init(gl.domElement);
|
|
28
|
+
return stats;
|
|
29
|
+
});
|
|
30
|
+
effect((onCleanup) => {
|
|
31
|
+
const [parent, stats, containerClass] = [this.parent(), this.stats(), this.containerClass()];
|
|
32
|
+
const node = parent ? (is.ref(parent) ? parent.nativeElement : parent) : this.document.body;
|
|
33
|
+
node.appendChild(stats.container);
|
|
34
|
+
if (containerClass)
|
|
35
|
+
stats.container.classList.add(...containerClass.split(' ').filter(Boolean));
|
|
36
|
+
const begin = addEffect(() => stats.begin());
|
|
37
|
+
const end = addAfterEffect(() => stats.end());
|
|
38
|
+
onCleanup(() => {
|
|
39
|
+
node.removeChild(stats.container);
|
|
40
|
+
begin();
|
|
41
|
+
end();
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsStatsGL, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
46
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: NgtsStatsGL, isStandalone: true, selector: "ngts-stats-gl", inputs: { _parent: ["parent", "_parent"], _containerClass: ["containerClass", "_containerClass"], _config: ["config", "_config"] }, ngImport: i0 }); }
|
|
47
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsStatsGL, decorators: [{
|
|
49
|
+
type: Directive,
|
|
50
|
+
args: [{ selector: 'ngts-stats-gl', standalone: true }]
|
|
51
|
+
}], ctorParameters: function () { return []; }, propDecorators: { _parent: [{
|
|
52
|
+
type: Input,
|
|
53
|
+
args: [{ alias: 'parent' }]
|
|
54
|
+
}], _containerClass: [{
|
|
55
|
+
type: Input,
|
|
56
|
+
args: [{ alias: 'containerClass' }]
|
|
57
|
+
}], _config: [{
|
|
58
|
+
type: Input,
|
|
59
|
+
args: [{ alias: 'config' }]
|
|
60
|
+
}] } });
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMtZ2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWlzYy9zcmMvc3RhdHMtZ2wvc3RhdHMtZ2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sS0FBSyxNQUFNLFVBQVUsQ0FBQzs7QUFTN0IsTUFBTSxPQUFPLFdBQVc7SUFHdkIsSUFBZ0MsT0FBTyxDQUFDLE1BQTJCO1FBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBd0MsZUFBZSxDQUFDLGNBQXNCO1FBQzdFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBZ0MsT0FBTyxDQUFDLE1BQWtDO1FBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBaUJEO1FBN0JRLFdBQU0sR0FBRyxXQUFXLEVBQW9CLENBQUM7UUFjekMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixVQUFLLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDekIsT0FBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdCLFdBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxXQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsbUJBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXRELFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFHRixNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNwQixNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDN0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUM1RixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsQyxJQUFJLGNBQWM7Z0JBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUVoRyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDN0MsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBN0NXLFdBQVc7a0dBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFEdkIsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTswRUFJekIsT0FBTztzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBSWMsZUFBZTtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRTtnQkFJRixPQUFPO3NCQUF0QyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYWRkQWZ0ZXJFZmZlY3QsIGFkZEVmZmVjdCwgaW5qZWN0Tmd0U3RvcmUsIGlzLCBzaWduYWxTdG9yZSwgdHlwZSBOZ3RSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCBTdGF0cyBmcm9tICdzdGF0cy1nbCc7XG5cbmV4cG9ydCB0eXBlIE5ndHNTdGF0c0dMU3RhdGUgPSB7XG5cdHBhcmVudD86IE5ndFJlZjxIVE1MRWxlbWVudD47XG5cdGNvbnRhaW5lckNsYXNzPzogc3RyaW5nO1xuXHRjb25maWc/OiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFN0YXRzPlswXTtcbn07XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25ndHMtc3RhdHMtZ2wnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0c1N0YXRzR0wge1xuXHRwcml2YXRlIGlucHV0cyA9IHNpZ25hbFN0b3JlPE5ndHNTdGF0c0dMU3RhdGU+KCk7XG5cblx0QElucHV0KHsgYWxpYXM6ICdwYXJlbnQnIH0pIHNldCBfcGFyZW50KHBhcmVudDogTmd0UmVmPEhUTUxFbGVtZW50Pikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHBhcmVudCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnY29udGFpbmVyQ2xhc3MnIH0pIHNldCBfY29udGFpbmVyQ2xhc3MoY29udGFpbmVyQ2xhc3M6IHN0cmluZykge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGNvbnRhaW5lckNsYXNzIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdjb25maWcnIH0pIHNldCBfY29uZmlnKGNvbmZpZzogTmd0c1N0YXRzR0xTdGF0ZVsnY29uZmlnJ10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb25maWcgfSk7XG5cdH1cblxuXHRwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdE5ndFN0b3JlKCk7XG5cdHByaXZhdGUgZ2wgPSB0aGlzLnN0b3JlLnNlbGVjdCgnZ2wnKTtcblxuXHRwcml2YXRlIGNvbmZpZyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY29uZmlnJyk7XG5cdHByaXZhdGUgcGFyZW50ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdwYXJlbnQnKTtcblx0cHJpdmF0ZSBjb250YWluZXJDbGFzcyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY29udGFpbmVyQ2xhc3MnKTtcblxuXHRwcml2YXRlIHN0YXRzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtjb25maWcsIGdsXSA9IFt0aGlzLmNvbmZpZygpIHx8IHt9LCB0aGlzLmdsKCldO1xuXHRcdGNvbnN0IHN0YXRzID0gbmV3IFN0YXRzKGNvbmZpZyk7XG5cdFx0c3RhdHMuaW5pdChnbC5kb21FbGVtZW50KTtcblx0XHRyZXR1cm4gc3RhdHM7XG5cdH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBbcGFyZW50LCBzdGF0cywgY29udGFpbmVyQ2xhc3NdID0gW3RoaXMucGFyZW50KCksIHRoaXMuc3RhdHMoKSwgdGhpcy5jb250YWluZXJDbGFzcygpXTtcblx0XHRcdGNvbnN0IG5vZGUgPSBwYXJlbnQgPyAoaXMucmVmKHBhcmVudCkgPyBwYXJlbnQubmF0aXZlRWxlbWVudCA6IHBhcmVudCkgOiB0aGlzLmRvY3VtZW50LmJvZHk7XG5cdFx0XHRub2RlLmFwcGVuZENoaWxkKHN0YXRzLmNvbnRhaW5lcik7XG5cdFx0XHRpZiAoY29udGFpbmVyQ2xhc3MpIHN0YXRzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKC4uLmNvbnRhaW5lckNsYXNzLnNwbGl0KCcgJykuZmlsdGVyKEJvb2xlYW4pKTtcblxuXHRcdFx0Y29uc3QgYmVnaW4gPSBhZGRFZmZlY3QoKCkgPT4gc3RhdHMuYmVnaW4oKSk7XG5cdFx0XHRjb25zdCBlbmQgPSBhZGRBZnRlckVmZmVjdCgoKSA9PiBzdGF0cy5lbmQoKSk7XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRub2RlLnJlbW92ZUNoaWxkKHN0YXRzLmNvbnRhaW5lcik7XG5cdFx0XHRcdGJlZ2luKCk7XG5cdFx0XHRcdGVuZCgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, computed, effect, runInInjectionContext, } from '@angular/core';
|
|
2
|
+
import { NgtPortal, NgtPortalContent, assertInjectionContext, extend, injectBeforeRender, injectNgtRef, injectNgtStore, is, signalStore, } from 'angular-three';
|
|
3
|
+
import { MeshLineGeometry, MeshLineMaterial } from 'meshline';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import { Group, Mesh } from 'three';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const shiftLeft = (collection, steps = 1) => {
|
|
8
|
+
collection.set(collection.subarray(steps));
|
|
9
|
+
collection.fill(-Infinity, -steps);
|
|
10
|
+
return collection;
|
|
11
|
+
};
|
|
12
|
+
const defaultSettings = {
|
|
13
|
+
width: 0.2,
|
|
14
|
+
length: 1,
|
|
15
|
+
decay: 1,
|
|
16
|
+
local: false,
|
|
17
|
+
stride: 0,
|
|
18
|
+
interval: 1,
|
|
19
|
+
};
|
|
20
|
+
export function injectNgtsTrail(targetFactory, settingsFactory, { injector } = {}) {
|
|
21
|
+
injector = assertInjectionContext(injectNgtsTrail, injector);
|
|
22
|
+
return runInInjectionContext(injector, () => {
|
|
23
|
+
const points = injectNgtRef();
|
|
24
|
+
let frameCount = 0;
|
|
25
|
+
const prevPosition = new THREE.Vector3();
|
|
26
|
+
const worldPosition = new THREE.Vector3();
|
|
27
|
+
const _target = computed(() => {
|
|
28
|
+
const _target = targetFactory();
|
|
29
|
+
if (is.ref(_target))
|
|
30
|
+
return _target.nativeElement;
|
|
31
|
+
return _target;
|
|
32
|
+
});
|
|
33
|
+
const _settings = computed(() => ({ ...defaultSettings, ...settingsFactory() }));
|
|
34
|
+
const _length = computed(() => _settings().length);
|
|
35
|
+
effect(() => {
|
|
36
|
+
const [target, length] = [_target(), _length()];
|
|
37
|
+
if (target) {
|
|
38
|
+
points.nativeElement = Float32Array.from({ length: length * 10 * 3 }, (_, i) => target.position.getComponent(i % 3));
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
injectBeforeRender(() => {
|
|
42
|
+
const [target, _points, { local, decay, stride, interval }] = [
|
|
43
|
+
_target(),
|
|
44
|
+
points.nativeElement,
|
|
45
|
+
_settings(),
|
|
46
|
+
];
|
|
47
|
+
if (!target)
|
|
48
|
+
return;
|
|
49
|
+
if (!_points)
|
|
50
|
+
return;
|
|
51
|
+
if (frameCount === 0) {
|
|
52
|
+
let newPosition;
|
|
53
|
+
if (local) {
|
|
54
|
+
newPosition = target.position;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
target.getWorldPosition(worldPosition);
|
|
58
|
+
newPosition = worldPosition;
|
|
59
|
+
}
|
|
60
|
+
const steps = 1 * decay;
|
|
61
|
+
for (let i = 0; i < steps; i++) {
|
|
62
|
+
if (newPosition.distanceTo(prevPosition) < stride)
|
|
63
|
+
continue;
|
|
64
|
+
shiftLeft(_points, 3);
|
|
65
|
+
_points.set(newPosition.toArray(), _points.length - 3);
|
|
66
|
+
}
|
|
67
|
+
prevPosition.copy(newPosition);
|
|
68
|
+
}
|
|
69
|
+
frameCount++;
|
|
70
|
+
frameCount = frameCount % interval;
|
|
71
|
+
});
|
|
72
|
+
return points;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
extend({ Group, Mesh });
|
|
76
|
+
export class NgtsTrail {
|
|
77
|
+
set _color(color) {
|
|
78
|
+
this.inputs.set({ color });
|
|
79
|
+
}
|
|
80
|
+
set _attenuation(attenuation) {
|
|
81
|
+
this.inputs.set({ attenuation });
|
|
82
|
+
}
|
|
83
|
+
set _target(target) {
|
|
84
|
+
this.inputs.set({ target });
|
|
85
|
+
}
|
|
86
|
+
set _settings(settings) {
|
|
87
|
+
this.inputs.set({ settings: { ...defaultSettings, ...settings } });
|
|
88
|
+
}
|
|
89
|
+
constructor() {
|
|
90
|
+
this.inputs = signalStore({ settings: defaultSettings, color: 'hotpink' });
|
|
91
|
+
this.trailRef = injectNgtRef();
|
|
92
|
+
this.groupRef = injectNgtRef();
|
|
93
|
+
this.children = this.groupRef.children('both');
|
|
94
|
+
this.store = injectNgtStore();
|
|
95
|
+
this.size = this.store.select('size');
|
|
96
|
+
this.target = this.inputs.select('target');
|
|
97
|
+
this.settings = this.inputs.select('settings');
|
|
98
|
+
this.width = computed(() => this.settings().width);
|
|
99
|
+
this.color = this.inputs.select('color');
|
|
100
|
+
this.attenuation = this.inputs.select('attenuation');
|
|
101
|
+
this.anchor = computed(() => {
|
|
102
|
+
const target = this.target();
|
|
103
|
+
if (target)
|
|
104
|
+
return target;
|
|
105
|
+
const group = this.groupRef.nativeElement;
|
|
106
|
+
if (group) {
|
|
107
|
+
return group.children.find((child) => child instanceof THREE.Object3D) || null;
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
});
|
|
111
|
+
this.points = injectNgtsTrail(this.anchor, this.settings);
|
|
112
|
+
this.scene = this.store.select('scene');
|
|
113
|
+
this.geometry = new MeshLineGeometry();
|
|
114
|
+
this.material = computed(() => {
|
|
115
|
+
const [width, color, size] = [this.width(), this.color(), this.size()];
|
|
116
|
+
const m = new MeshLineMaterial({
|
|
117
|
+
lineWidth: 0.1 * width,
|
|
118
|
+
color,
|
|
119
|
+
sizeAttenuation: 1,
|
|
120
|
+
resolution: new THREE.Vector2(size.width, size.height),
|
|
121
|
+
});
|
|
122
|
+
// TODO: understand this first
|
|
123
|
+
// Get and apply first <meshLineMaterial /> from children
|
|
124
|
+
// let matOverride: React.ReactElement | undefined;
|
|
125
|
+
// if (children) {
|
|
126
|
+
// if (Array.isArray(children)) {
|
|
127
|
+
// matOverride = children.find((child: React.ReactNode) => {
|
|
128
|
+
// const c = child as React.ReactElement;
|
|
129
|
+
// return typeof c.type === 'string' && c.type === 'meshLineMaterial';
|
|
130
|
+
// }) as React.ReactElement | undefined;
|
|
131
|
+
// } else {
|
|
132
|
+
// const c = children as React.ReactElement;
|
|
133
|
+
// if (typeof c.type === 'string' && c.type === 'meshLineMaterial') {
|
|
134
|
+
// matOverride = c;
|
|
135
|
+
// }
|
|
136
|
+
// }
|
|
137
|
+
// }
|
|
138
|
+
// if (typeof matOverride?.props === 'object') {
|
|
139
|
+
// m.setValues(matOverride.props);
|
|
140
|
+
// }
|
|
141
|
+
return m;
|
|
142
|
+
});
|
|
143
|
+
this.setMaterialSize();
|
|
144
|
+
this.beforeRender();
|
|
145
|
+
}
|
|
146
|
+
setMaterialSize() {
|
|
147
|
+
effect(() => {
|
|
148
|
+
const [material, size] = [this.material(), this.size()];
|
|
149
|
+
material.uniforms['resolution'].value.set(size.width, size.height);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
beforeRender() {
|
|
153
|
+
injectBeforeRender(() => {
|
|
154
|
+
const [points, attenuation] = [this.points.nativeElement, this.attenuation()];
|
|
155
|
+
if (!points)
|
|
156
|
+
return;
|
|
157
|
+
this.geometry.setPoints(points, attenuation);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsTrail, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
161
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtsTrail, isStandalone: true, selector: "ngts-trail", inputs: { trailRef: "trailRef", _color: ["color", "_color"], _attenuation: ["attenuation", "_attenuation"], _target: ["target", "_target"], _settings: ["settings", "_settings"] }, ngImport: i0, template: `
|
|
162
|
+
<ngt-group>
|
|
163
|
+
<ngt-portal [container]="scene()" [autoRender]="false">
|
|
164
|
+
<ng-template ngtPortalContent>
|
|
165
|
+
<ngt-mesh [ref]="trailRef" [geometry]="geometry" [material]="material()" />
|
|
166
|
+
</ng-template>
|
|
167
|
+
</ngt-portal>
|
|
168
|
+
<ngt-group [ref]="groupRef">
|
|
169
|
+
<ng-content />
|
|
170
|
+
</ngt-group>
|
|
171
|
+
</ngt-group>
|
|
172
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgtPortal, selector: "ngt-portal", inputs: ["container", "state", "autoRender", "autoRenderPriority"], outputs: ["beforeRender"] }, { kind: "directive", type: NgtPortalContent, selector: "ng-template[ngtPortalContent]" }] }); }
|
|
173
|
+
}
|
|
174
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsTrail, decorators: [{
|
|
175
|
+
type: Component,
|
|
176
|
+
args: [{
|
|
177
|
+
selector: 'ngts-trail',
|
|
178
|
+
standalone: true,
|
|
179
|
+
template: `
|
|
180
|
+
<ngt-group>
|
|
181
|
+
<ngt-portal [container]="scene()" [autoRender]="false">
|
|
182
|
+
<ng-template ngtPortalContent>
|
|
183
|
+
<ngt-mesh [ref]="trailRef" [geometry]="geometry" [material]="material()" />
|
|
184
|
+
</ng-template>
|
|
185
|
+
</ngt-portal>
|
|
186
|
+
<ngt-group [ref]="groupRef">
|
|
187
|
+
<ng-content />
|
|
188
|
+
</ngt-group>
|
|
189
|
+
</ngt-group>
|
|
190
|
+
`,
|
|
191
|
+
imports: [NgtPortal, NgtPortalContent],
|
|
192
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
193
|
+
}]
|
|
194
|
+
}], ctorParameters: function () { return []; }, propDecorators: { trailRef: [{
|
|
195
|
+
type: Input
|
|
196
|
+
}], _color: [{
|
|
197
|
+
type: Input,
|
|
198
|
+
args: [{ alias: 'color' }]
|
|
199
|
+
}], _attenuation: [{
|
|
200
|
+
type: Input,
|
|
201
|
+
args: [{ alias: 'attenuation' }]
|
|
202
|
+
}], _target: [{
|
|
203
|
+
type: Input,
|
|
204
|
+
args: [{ alias: 'target' }]
|
|
205
|
+
}], _settings: [{
|
|
206
|
+
type: Input,
|
|
207
|
+
args: [{ alias: 'settings' }]
|
|
208
|
+
}] } });
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWlzYy9zcmMvdHJhaWwvdHJhaWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04scUJBQXFCLEdBRXJCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixjQUFjLEVBQ2QsRUFBRSxFQUNGLFdBQVcsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBRXBDLE1BQU0sU0FBUyxHQUFHLENBQUMsVUFBd0IsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFnQixFQUFFO0lBQ3ZFLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxPQUFPLFVBQVUsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFnQkYsTUFBTSxlQUFlLEdBQXNCO0lBQzFDLEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLENBQUM7SUFDVCxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxLQUFLO0lBQ1osTUFBTSxFQUFFLENBQUM7SUFDVCxRQUFRLEVBQUUsQ0FBQztDQUNYLENBQUM7QUFFRixNQUFNLFVBQVUs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dCI6WyJpbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRydW5JbkluamVjdGlvbkNvbnRleHQsXG5cdHR5cGUgSW5qZWN0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0Tmd0UG9ydGFsLFxuXHROZ3RQb3J0YWxDb250ZW50LFxuXHRhc3NlcnRJbmplY3Rpb25Db250ZXh0LFxuXHRleHRlbmQsXG5cdGluamVjdEJlZm9yZVJlbmRlcixcblx0aW5qZWN0Tmd0UmVmLFxuXHRpbmplY3ROZ3RTdG9yZSxcblx0aXMsXG5cdHNpZ25hbFN0b3JlLFxuXHR0eXBlIE5ndFJlZixcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBNZXNoTGluZUdlb21ldHJ5LCBNZXNoTGluZU1hdGVyaWFsIH0gZnJvbSAnbWVzaGxpbmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgR3JvdXAsIE1lc2ggfSBmcm9tICd0aHJlZSc7XG5cbmNvbnN0IHNoaWZ0TGVmdCA9IChjb2xsZWN0aW9uOiBGbG9hdDMyQXJyYXksIHN0ZXBzID0gMSk6IEZsb2F0MzJBcnJheSA9PiB7XG5cdGNvbGxlY3Rpb24uc2V0KGNvbGxlY3Rpb24uc3ViYXJyYXkoc3RlcHMpKTtcblx0Y29sbGVjdGlvbi5maWxsKC1JbmZpbml0eSwgLXN0ZXBzKTtcblx0cmV0dXJuIGNvbGxlY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RzVHJhaWxTZXR0aW5ncyA9IHtcblx0d2lkdGg6IG51bWJlcjtcblx0bGVuZ3RoOiBudW1iZXI7XG5cdGRlY2F5OiBudW1iZXI7XG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gdXNlIHRoZSB0YXJnZXQncyB3b3JsZCBvciBsb2NhbCBwb3NpdGlvbnNcblx0ICovXG5cdGxvY2FsOiBib29sZWFuO1xuXHQvLyBNaW4gZGlzdGFuY2UgYmV0d2VlbiBwcmV2aW91cyBhbmQgY3VycmVudCBwb2ludHNcblx0c3RyaWRlOiBudW1iZXI7XG5cdC8vIE51bWJlciBvZiBmcmFtZXMgdG8gd2FpdCBiZWZvcmUgbmV4dCBjYWxjdWxhdGlvblxuXHRpbnRlcnZhbDogbnVtYmVyO1xufTtcblxuY29uc3QgZGVmYXVsdFNldHRpbmdzOiBOZ3RzVHJhaWxTZXR0aW5ncyA9IHtcblx0d2lkdGg6IDAuMixcblx0bGVuZ3RoOiAxLFxuXHRkZWNheTogMSxcblx0bG9jYWw6IGZhbHNlLFxuXHRzdHJpZGU6IDAsXG5cdGludGVydmFsOiAxLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5ndHNUcmFpbChcblx0dGFyZ2V0RmFjdG9yeTogKCkgPT4gTmd0UmVmPFRIUkVFLk9iamVjdDNEPiB8IG51bGwsXG5cdHNldHRpbmdzRmFjdG9yeTogKCkgPT4gUGFydGlhbDxOZ3RzVHJhaWxTZXR0aW5ncz4sXG5cdHsgaW5qZWN0b3IgfTogeyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSxcbikge1xuXHRpbmplY3RvciA9IGFzc2VydEluamVjdGlvbkNvbnRleHQoaW5qZWN0Tmd0c1RyYWlsLCBpbmplY3Rvcik7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBwb2ludHMgPSBpbmplY3ROZ3RSZWY8RmxvYXQzMkFycmF5PigpO1xuXHRcdGxldCBmcmFtZUNvdW50ID0gMDtcblxuXHRcdGNvbnN0IHByZXZQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdFx0Y29uc3Qgd29ybGRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cblx0XHRjb25zdCBfdGFyZ2V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgX3RhcmdldCA9IHRhcmdldEZhY3RvcnkoKTtcblx0XHRcdGlmIChpcy5yZWYoX3RhcmdldCkpIHJldHVybiBfdGFyZ2V0Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRyZXR1cm4gX3RhcmdldDtcblx0XHR9KTtcblxuXHRcdGNvbnN0IF9zZXR0aW5ncyA9IGNvbXB1dGVkKCgpID0+ICh7IC4uLmRlZmF1bHRTZXR0aW5ncywgLi4uc2V0dGluZ3NGYWN0b3J5KCkgfSkpO1xuXHRcdGNvbnN0IF9sZW5ndGggPSBjb21wdXRlZCgoKSA9PiBfc2V0dGluZ3MoKS5sZW5ndGgpO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFt0YXJnZXQsIGxlbmd0aF0gPSBbX3RhcmdldCgpLCBfbGVuZ3RoKCldO1xuXHRcdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0XHRwb2ludHMubmF0aXZlRWxlbWVudCA9IEZsb2F0MzJBcnJheS5mcm9tKHsgbGVuZ3RoOiBsZW5ndGggKiAxMCAqIDMgfSwgKF8sIGkpID0+XG5cdFx0XHRcdFx0dGFyZ2V0LnBvc2l0aW9uLmdldENvbXBvbmVudChpICUgMyksXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3QgW3RhcmdldCwgX3BvaW50cywgeyBsb2NhbCwgZGVjYXksIHN0cmlkZSwgaW50ZXJ2YWwgfV0gPSBbXG5cdFx0XHRcdF90YXJnZXQoKSxcblx0XHRcdFx0cG9pbnRzLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdF9zZXR0aW5ncygpLFxuXHRcdFx0XTtcblx0XHRcdGlmICghdGFyZ2V0KSByZXR1cm47XG5cdFx0XHRpZiAoIV9wb2ludHMpIHJldHVybjtcblxuXHRcdFx0aWYgKGZyYW1lQ291bnQgPT09IDApIHtcblx0XHRcdFx0bGV0IG5ld1Bvc2l0aW9uOiBUSFJFRS5WZWN0b3IzO1xuXHRcdFx0XHRpZiAobG9jYWwpIHtcblx0XHRcdFx0XHRuZXdQb3NpdGlvbiA9IHRhcmdldC5wb3NpdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YXJnZXQuZ2V0V29ybGRQb3NpdGlvbih3b3JsZFBvc2l0aW9uKTtcblx0XHRcdFx0XHRuZXdQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb247XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBzdGVwcyA9IDEgKiBkZWNheTtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKG5ld1Bvc2l0aW9uLmRpc3RhbmNlVG8ocHJldlBvc2l0aW9uKSA8IHN0cmlkZSkgY29udGludWU7XG5cblx0XHRcdFx0XHRzaGlmdExlZnQoX3BvaW50cywgMyk7XG5cdFx0XHRcdFx0X3BvaW50cy5zZXQobmV3UG9zaXRpb24udG9BcnJheSgpLCBfcG9pbnRzLmxlbmd0aCAtIDMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByZXZQb3NpdGlvbi5jb3B5KG5ld1Bvc2l0aW9uKTtcblx0XHRcdH1cblxuXHRcdFx0ZnJhbWVDb3VudCsrO1xuXHRcdFx0ZnJhbWVDb3VudCA9IGZyYW1lQ291bnQgJSBpbnRlcnZhbDtcblx0XHR9KTtcblxuXHRcdHJldHVybiBwb2ludHM7XG5cdH0pO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RzVHJhaWxTdGF0ZSA9IHtcblx0Y29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247XG5cdGF0dGVudWF0aW9uOiAod2lkdGg6IG51bWJlcikgPT4gbnVtYmVyO1xuXHRzZXR0aW5nczogTmd0c1RyYWlsU2V0dGluZ3M7XG5cdHRhcmdldD86IE5ndFJlZjxUSFJFRS5PYmplY3QzRD47XG59O1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdCduZ3RzLXRyYWlsJzogTmd0c1RyYWlsU3RhdGU7XG5cdH1cbn1cblxuZXh0ZW5kKHsgR3JvdXAsIE1lc2ggfSk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtdHJhaWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXA+XG5cdFx0XHQ8bmd0LXBvcnRhbCBbY29udGFpbmVyXT1cInNjZW5lKClcIiBbYXV0b1JlbmRlcl09XCJmYWxzZVwiPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgbmd0UG9ydGFsQ29udGVudD5cblx0XHRcdFx0XHQ8bmd0LW1lc2ggW3JlZl09XCJ0cmFpbFJlZlwiIFtnZW9tZXRyeV09XCJnZW9tZXRyeVwiIFttYXRlcmlhbF09XCJtYXRlcmlhbCgpXCIgLz5cblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvbmd0LXBvcnRhbD5cblx0XHRcdDxuZ3QtZ3JvdXAgW3JlZl09XCJncm91cFJlZlwiPlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9uZ3QtZ3JvdXA+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RQb3J0YWwsIE5ndFBvcnRhbENvbnRlbnRdLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNUcmFpbCB7XG5cdHByaXZhdGUgaW5wdXRzID0gc2lnbmFsU3RvcmU8Tmd0c1RyYWlsU3RhdGU+KHsgc2V0dGluZ3M6IGRlZmF1bHRTZXR0aW5ncywgY29sb3I6ICdob3RwaW5rJyB9KTtcblxuXHRASW5wdXQoKSB0cmFpbFJlZiA9IGluamVjdE5ndFJlZjxNZXNoPigpO1xuXG5cdEBJbnB1dCh7IGFsaWFzOiAnY29sb3InIH0pIHNldCBfY29sb3IoY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb2xvciB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnYXR0ZW51YXRpb24nIH0pIHNldCBfYXR0ZW51YXRpb24oYXR0ZW51YXRpb246ICh3aWR0aDogbnVtYmVyKSA9PiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBhdHRlbnVhdGlvbiB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAndGFyZ2V0JyB9KSBzZXQgX3RhcmdldCh0YXJnZXQ6IE5ndFJlZjxUSFJFRS5PYmplY3QzRD4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyB0YXJnZXQgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3NldHRpbmdzJyB9KSBzZXQgX3NldHRpbmdzKHNldHRpbmdzOiBQYXJ0aWFsPE5ndHNUcmFpbFNldHRpbmdzPikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHNldHRpbmdzOiB7IC4uLmRlZmF1bHRTZXR0aW5ncywgLi4uc2V0dGluZ3MgfSB9KTtcblx0fVxuXG5cdGdyb3VwUmVmID0gaW5qZWN0Tmd0UmVmPEdyb3VwPigpO1xuXG5cdHByaXZhdGUgY2hpbGRyZW4gPSB0aGlzLmdyb3VwUmVmLmNoaWxkcmVuKCdib3RoJyk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdE5ndFN0b3JlKCk7XG5cdHByaXZhdGUgc2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cblx0cHJpdmF0ZSB0YXJnZXQgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3RhcmdldCcpO1xuXHRwcml2YXRlIHNldHRpbmdzID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdzZXR0aW5ncycpO1xuXHRwcml2YXRlIHdpZHRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZXR0aW5ncygpLndpZHRoKTtcblx0cHJpdmF0ZSBjb2xvciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY29sb3InKTtcblx0cHJpdmF0ZSBhdHRlbnVhdGlvbiA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYXR0ZW51YXRpb24nKTtcblxuXHRwcml2YXRlIGFuY2hvciA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldCgpO1xuXHRcdGlmICh0YXJnZXQpIHJldHVybiB0YXJnZXQ7XG5cdFx0Y29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwUmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0aWYgKGdyb3VwKSB7XG5cdFx0XHRyZXR1cm4gZ3JvdXAuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkIGluc3RhbmNlb2YgVEhSRUUuT2JqZWN0M0QpIHx8IG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9KTtcblxuXHRwcml2YXRlIHBvaW50cyA9IGluamVjdE5ndHNUcmFpbCh0aGlzLmFuY2hvciwgdGhpcy5zZXR0aW5ncyk7XG5cblx0c2NlbmUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2NlbmUnKTtcblx0Z2VvbWV0cnkgPSBuZXcgTWVzaExpbmVHZW9tZXRyeSgpO1xuXHRtYXRlcmlhbCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbd2lkdGgsIGNvbG9yLCBzaXplXSA9IFt0aGlzLndpZHRoKCksIHRoaXMuY29sb3IoKSwgdGhpcy5zaXplKCldO1xuXG5cdFx0Y29uc3QgbSA9IG5ldyBNZXNoTGluZU1hdGVyaWFsKHtcblx0XHRcdGxpbmVXaWR0aDogMC4xICogd2lkdGgsXG5cdFx0XHRjb2xvcixcblx0XHRcdHNpemVBdHRlbnVhdGlvbjogMSxcblx0XHRcdHJlc29sdXRpb246IG5ldyBUSFJFRS5WZWN0b3IyKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KSxcblx0XHR9KTtcblxuXHRcdC8vIFRPRE86IHVuZGVyc3RhbmQgdGhpcyBmaXJzdFxuXHRcdC8vIEdldCBhbmQgYXBwbHkgZmlyc3QgPG1lc2hMaW5lTWF0ZXJpYWwgLz4gZnJvbSBjaGlsZHJlblxuXHRcdC8vIGxldCBtYXRPdmVycmlkZTogUmVhY3QuUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRcdC8vIGlmIChjaGlsZHJlbikge1xuXHRcdC8vIFx0aWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG5cdFx0Ly8gXHRcdG1hdE92ZXJyaWRlID0gY2hpbGRyZW4uZmluZCgoY2hpbGQ6IFJlYWN0LlJlYWN0Tm9kZSkgPT4ge1xuXHRcdC8vIFx0XHRcdGNvbnN0IGMgPSBjaGlsZCBhcyBSZWFjdC5SZWFjdEVsZW1lbnQ7XG5cdFx0Ly8gXHRcdFx0cmV0dXJuIHR5cGVvZiBjLnR5cGUgPT09ICdzdHJpbmcnICYmIGMudHlwZSA9PT0gJ21lc2hMaW5lTWF0ZXJpYWwnO1xuXHRcdC8vIFx0XHR9KSBhcyBSZWFjdC5SZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0Ly8gXHR9IGVsc2Uge1xuXHRcdC8vIFx0XHRjb25zdCBjID0gY2hpbGRyZW4gYXMgUmVhY3QuUmVhY3RFbGVtZW50O1xuXHRcdC8vIFx0XHRpZiAodHlwZW9mIGMudHlwZSA9PT0gJ3N0cmluZycgJiYgYy50eXBlID09PSAnbWVzaExpbmVNYXRlcmlhbCcpIHtcblx0XHQvLyBcdFx0XHRtYXRPdmVycmlkZSA9IGM7XG5cdFx0Ly8gXHRcdH1cblx0XHQvLyBcdH1cblx0XHQvLyB9XG5cdFx0Ly8gaWYgKHR5cGVvZiBtYXRPdmVycmlkZT8ucHJvcHMgPT09ICdvYmplY3QnKSB7XG5cdFx0Ly8gXHRtLnNldFZhbHVlcyhtYXRPdmVycmlkZS5wcm9wcyk7XG5cdFx0Ly8gfVxuXG5cdFx0cmV0dXJuIG07XG5cdH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuc2V0TWF0ZXJpYWxTaXplKCk7XG5cdFx0dGhpcy5iZWZvcmVSZW5kZXIoKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0TWF0ZXJpYWxTaXplKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbbWF0ZXJpYWwsIHNpemVdID0gW3RoaXMubWF0ZXJpYWwoKSwgdGhpcy5zaXplKCldO1xuXHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbJ3Jlc29sdXRpb24nXS52YWx1ZS5zZXQoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBiZWZvcmVSZW5kZXIoKSB7XG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IFtwb2ludHMsIGF0dGVudWF0aW9uXSA9IFt0aGlzLnBvaW50cy5uYXRpdmVFbGVtZW50LCB0aGlzLmF0dGVudWF0aW9uKCldO1xuXHRcdFx0aWYgKCFwb2ludHMpIHJldHVybjtcblx0XHRcdHRoaXMuZ2VvbWV0cnkuc2V0UG9pbnRzKHBvaW50cywgYXR0ZW51YXRpb24pO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Injector, computed, runInInjectionContext } from '@angular/core';
|
|
2
|
+
import { assertInjectionContext, injectBeforeRender } from 'angular-three';
|
|
3
|
+
import { TrailTexture } from './trail-texture';
|
|
4
|
+
export function injectNgtsTrailTexture(trailConfigFn, { injector } = {}) {
|
|
5
|
+
injector = assertInjectionContext(injectNgtsTrailTexture, injector);
|
|
6
|
+
return runInInjectionContext(injector, () => {
|
|
7
|
+
const config = computed(() => trailConfigFn() || {});
|
|
8
|
+
const trail = computed(() => new TrailTexture(config()));
|
|
9
|
+
const texture = computed(() => trail().texture);
|
|
10
|
+
injectBeforeRender(({ delta }) => {
|
|
11
|
+
trail().update(delta);
|
|
12
|
+
});
|
|
13
|
+
const onMove = (ev) => trail().addTouch(ev.uv);
|
|
14
|
+
return { texture, onMove };
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0LXRyYWlsLXRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWlzYy9zcmMvdHJhaWwtdGV4dHVyZS9pbmplY3QtdHJhaWwtdGV4dHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQW9CLE1BQU0saUJBQWlCLENBQUM7QUFFakUsTUFBTSxVQUFVLHNCQUFzQixDQUNyQyxhQUF5QyxFQUN6QyxFQUFFLFFBQVEsS0FBOEIsRUFBRTtJQUUxQyxRQUFRLEdBQUcsc0JBQXNCLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEUsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQzNDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoRCxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNoQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQStCLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRyxDQUFDLENBQUM7UUFFN0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgY29tcHV0ZWQsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0aW9uQ29udGV4dCwgaW5qZWN0QmVmb3JlUmVuZGVyLCB0eXBlIE5ndFRocmVlRXZlbnQgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IFRyYWlsVGV4dHVyZSwgdHlwZSBUcmFpbENvbmZpZyB9IGZyb20gJy4vdHJhaWwtdGV4dHVyZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3ROZ3RzVHJhaWxUZXh0dXJlKFxuXHR0cmFpbENvbmZpZ0ZuOiAoKSA9PiBQYXJ0aWFsPFRyYWlsQ29uZmlnPixcblx0eyBpbmplY3RvciB9OiB7IGluamVjdG9yPzogSW5qZWN0b3IgfSA9IHt9LFxuKSB7XG5cdGluamVjdG9yID0gYXNzZXJ0SW5qZWN0aW9uQ29udGV4dChpbmplY3ROZ3RzVHJhaWxUZXh0dXJlLCBpbmplY3Rvcik7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBjb25maWcgPSBjb21wdXRlZCgoKSA9PiB0cmFpbENvbmZpZ0ZuKCkgfHwge30pO1xuXHRcdGNvbnN0IHRyYWlsID0gY29tcHV0ZWQoKCkgPT4gbmV3IFRyYWlsVGV4dHVyZShjb25maWcoKSkpO1xuXHRcdGNvbnN0IHRleHR1cmUgPSBjb21wdXRlZCgoKSA9PiB0cmFpbCgpLnRleHR1cmUpO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGRlbHRhIH0pID0+IHtcblx0XHRcdHRyYWlsKCkudXBkYXRlKGRlbHRhKTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9uTW92ZSA9IChldjogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB0cmFpbCgpLmFkZFRvdWNoKGV2LnV2ISk7XG5cblx0XHRyZXR1cm4geyB0ZXh0dXJlLCBvbk1vdmUgfTtcblx0fSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Texture } from 'three';
|
|
2
|
+
// default ease
|
|
3
|
+
const easeCircleOut = (x) => Math.sqrt(1 - Math.pow(x - 1, 2));
|
|
4
|
+
// smooth new sample (measurement) based on previous sample (current)
|
|
5
|
+
function smoothAverage(current, measurement, smoothing = 0.9) {
|
|
6
|
+
return measurement * smoothing + current * (1.0 - smoothing);
|
|
7
|
+
}
|
|
8
|
+
export class TrailTexture {
|
|
9
|
+
constructor({ size = 256, maxAge = 750, radius = 0.3, intensity = 0.2, interpolate = 0, smoothing = 0, minForce = 0.3, blend = 'screen', // source-over is canvas default. Others are slower
|
|
10
|
+
ease = easeCircleOut, } = {}) {
|
|
11
|
+
this.size = size;
|
|
12
|
+
this.maxAge = maxAge;
|
|
13
|
+
this.radius = radius;
|
|
14
|
+
this.intensity = intensity;
|
|
15
|
+
this.ease = ease;
|
|
16
|
+
this.interpolate = interpolate;
|
|
17
|
+
this.smoothing = smoothing;
|
|
18
|
+
this.minForce = minForce;
|
|
19
|
+
this.blend = blend;
|
|
20
|
+
this.trail = [];
|
|
21
|
+
this.force = 0;
|
|
22
|
+
this.initTexture();
|
|
23
|
+
}
|
|
24
|
+
initTexture() {
|
|
25
|
+
this.canvas = document.createElement('canvas');
|
|
26
|
+
this.canvas.width = this.canvas.height = this.size;
|
|
27
|
+
this.ctx = this.canvas.getContext('2d');
|
|
28
|
+
this.ctx.fillStyle = 'black';
|
|
29
|
+
this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
|
30
|
+
this.texture = new Texture(this.canvas);
|
|
31
|
+
this.canvas.id = 'touchTexture';
|
|
32
|
+
this.canvas.style.width = this.canvas.style.height = `${this.canvas.width}px`;
|
|
33
|
+
}
|
|
34
|
+
update(delta) {
|
|
35
|
+
this.clear();
|
|
36
|
+
// age points
|
|
37
|
+
this.trail.forEach((point, i) => {
|
|
38
|
+
point.age += delta * 1000;
|
|
39
|
+
// remove old
|
|
40
|
+
if (point.age > this.maxAge) {
|
|
41
|
+
this.trail.splice(i, 1);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
// reset force when empty (when smoothing)
|
|
45
|
+
if (!this.trail.length)
|
|
46
|
+
this.force = 0;
|
|
47
|
+
this.trail.forEach((point) => {
|
|
48
|
+
this.drawTouch(point);
|
|
49
|
+
});
|
|
50
|
+
this.texture.needsUpdate = true;
|
|
51
|
+
}
|
|
52
|
+
clear() {
|
|
53
|
+
this.ctx.globalCompositeOperation = 'source-over';
|
|
54
|
+
this.ctx.fillStyle = 'black';
|
|
55
|
+
this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
|
56
|
+
}
|
|
57
|
+
addTouch(point) {
|
|
58
|
+
const last = this.trail[this.trail.length - 1];
|
|
59
|
+
if (last) {
|
|
60
|
+
const dx = last.x - point.x;
|
|
61
|
+
const dy = last.y - point.y;
|
|
62
|
+
const dd = dx * dx + dy * dy;
|
|
63
|
+
const force = Math.max(this.minForce, Math.min(dd * 10000, 1));
|
|
64
|
+
this.force = smoothAverage(force, this.force, this.smoothing);
|
|
65
|
+
if (!!this.interpolate) {
|
|
66
|
+
const lines = Math.ceil(dd / Math.pow((this.radius * 0.5) / this.interpolate, 2));
|
|
67
|
+
if (lines > 1) {
|
|
68
|
+
for (let i = 1; i < lines; i++) {
|
|
69
|
+
this.trail.push({
|
|
70
|
+
x: last.x - (dx / lines) * i,
|
|
71
|
+
y: last.y - (dy / lines) * i,
|
|
72
|
+
age: 0,
|
|
73
|
+
force,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
this.trail.push({ x: point.x, y: point.y, age: 0, force: this.force });
|
|
80
|
+
}
|
|
81
|
+
drawTouch(point) {
|
|
82
|
+
const pos = {
|
|
83
|
+
x: point.x * this.size,
|
|
84
|
+
y: (1 - point.y) * this.size,
|
|
85
|
+
};
|
|
86
|
+
let intensity = 1;
|
|
87
|
+
if (point.age < this.maxAge * 0.3) {
|
|
88
|
+
intensity = this.ease(point.age / (this.maxAge * 0.3));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
intensity = this.ease(1 - (point.age - this.maxAge * 0.3) / (this.maxAge * 0.7));
|
|
92
|
+
}
|
|
93
|
+
intensity *= point.force;
|
|
94
|
+
// apply blending
|
|
95
|
+
this.ctx.globalCompositeOperation = this.blend;
|
|
96
|
+
const radius = this.size * this.radius * intensity;
|
|
97
|
+
const grd = this.ctx.createRadialGradient(pos.x, pos.y, Math.max(0, radius * 0.25), pos.x, pos.y, Math.max(0, radius));
|
|
98
|
+
grd.addColorStop(0, `rgba(255, 255, 255, ${this.intensity})`);
|
|
99
|
+
grd.addColorStop(1, `rgba(0, 0, 0, 0.0)`);
|
|
100
|
+
this.ctx.beginPath();
|
|
101
|
+
this.ctx.fillStyle = grd;
|
|
102
|
+
this.ctx.arc(pos.x, pos.y, Math.max(0, radius), 0, Math.PI * 2);
|
|
103
|
+
this.ctx.fill();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaWwtdGV4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9taXNjL3NyYy90cmFpbC10ZXh0dXJlL3RyYWlsLXRleHR1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQThCaEMsZUFBZTtBQUNmLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV2RSxxRUFBcUU7QUFDckUsU0FBUyxhQUFhLENBQUMsT0FBZSxFQUFFLFdBQW1CLEVBQUUsU0FBUyxHQUFHLEdBQUc7SUFDM0UsT0FBTyxXQUFXLEdBQUcsU0FBUyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsTUFBTSxPQUFPLFlBQVk7SUFnQnhCLFlBQVksRUFDWCxJQUFJLEdBQUcsR0FBRyxFQUNWLE1BQU0sR0FBRyxHQUFHLEVBQ1osTUFBTSxHQUFHLEdBQUcsRUFDWixTQUFTLEdBQUcsR0FBRyxFQUNmLFdBQVcsR0FBRyxDQUFDLEVBQ2YsU0FBUyxHQUFHLENBQUMsRUFDYixRQUFRLEdBQUcsR0FBRyxFQUNkLEtBQUssR0FBRyxRQUFRLEVBQUUsbURBQW1EO0lBQ3JFLElBQUksR0FBRyxhQUFhLE1BQ0osRUFBRTtRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxH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LEtBQUssQ0FBQztRQUUvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ25ELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQ3hDLEdBQUcsQ0FBQyxDQUFDLEVBQ0wsR0FBRyxDQUFDLENBQUMsRUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQzFCLEdBQUcsQ0FBQyxDQUFDLEVBQ0wsR0FBRyxDQUFDLENBQUMsRUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FDbkIsQ0FBQztRQUNGLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUM5RCxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pCLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRleHR1cmUgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCB0eXBlIFBvaW50ID0ge1xuXHR4OiBudW1iZXI7XG5cdHk6IG51bWJlcjtcblx0YWdlOiBudW1iZXI7XG5cdGZvcmNlOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBUcmFpbENvbmZpZyA9IHtcblx0LyoqIHRleHR1cmUgc2l6ZSAoZGVmYXVsdDogMjU2eDI1NikgKi9cblx0c2l6ZT86IG51bWJlcjtcblx0LyoqIE1heCBhZ2UgKG1zKSBvZiB0cmFpbCBwb2ludHMgKGRlZmF1bHQ6IDc1MCkgKi9cblx0bWF4QWdlPzogbnVtYmVyO1xuXHQvKiogVHJhaWwgcmFkaXVzIChkZWZhdWx0OiAwLjMpICovXG5cdHJhZGl1cz86IG51bWJlcjtcblx0LyoqIENhbnZhcyB0cmFpbCBvcGFjaXR5IChkZWZhdWx0OiAwLjIpICovXG5cdGludGVuc2l0eT86IG51bWJlcjtcblx0LyoqIEFkZCBwb2ludHMgaW4gYmV0d2VlbiBzbG93IHBvaW50ZXIgZXZlbnRzIChkZWZhdWx0OiAwKSAqL1xuXHRpbnRlcnBvbGF0ZT86IG51bWJlcjtcblx0LyoqIE1vdmluZyBhdmVyYWdlIG9mIHBvaW50ZXIgZm9yY2UgKGRlZmF1bHQ6IDApICovXG5cdHNtb290aGluZz86IG51bWJlcjtcblx0LyoqIE1pbmltdW0gcG9pbnRlciBmb3JjZSAoZGVmYXVsdDogMC4zKSAqL1xuXHRtaW5Gb3JjZT86IG51bWJlcjtcblx0LyoqIEJsZW5kIG1vZGUgKGRlZmF1bHQ6ICdzY3JlZW4nKSAqL1xuXHRibGVuZD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFsnZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uJ107XG5cdC8qKiBFYXNpbmcgKGRlZmF1bHQ6IGVhc2VDaXJjT3V0KSAqL1xuXHRlYXNlPzogKHQ6IG51bWJlcikgPT4gbnVtYmVyO1xufTtcblxuLy8gZGVmYXVsdCBlYXNlXG5jb25zdCBlYXNlQ2lyY2xlT3V0ID0gKHg6IG51bWJlcikgPT4gTWF0aC5zcXJ0KDEgLSBNYXRoLnBvdyh4IC0gMSwgMikpO1xuXG4vLyBzbW9vdGggbmV3IHNhbXBsZSAobWVhc3VyZW1lbnQpIGJhc2VkIG9uIHByZXZpb3VzIHNhbXBsZSAoY3VycmVudClcbmZ1bmN0aW9uIHNtb290aEF2ZXJhZ2UoY3VycmVudDogbnVtYmVyLCBtZWFzdXJlbWVudDogbnVtYmVyLCBzbW9vdGhpbmcgPSAwLjkpIHtcblx0cmV0dXJuIG1lYXN1cmVtZW50ICogc21vb3RoaW5nICsgY3VycmVudCAqICgxLjAgLSBzbW9vdGhpbmcpO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhaWxUZXh0dXJlIHtcblx0dHJhaWw6IFBvaW50W107XG5cdGNhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xuXHRjdHghOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG5cdHRleHR1cmUhOiBUZXh0dXJlO1xuXHRmb3JjZTogbnVtYmVyO1xuXHRzaXplOiBudW1iZXI7XG5cdG1heEFnZTogbnVtYmVyO1xuXHRyYWRpdXM6IG51bWJlcjtcblx0aW50ZW5zaXR5OiBudW1iZXI7XG5cdGVhc2U6ICh0OiBudW1iZXIpID0+IG51bWJlcjtcblx0bWluRm9yY2U6IG51bWJlcjtcblx0aW50ZXJwb2xhdGU6IG51bWJlcjtcblx0c21vb3RoaW5nOiBudW1iZXI7XG5cdGJsZW5kOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRbJ2dsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiddO1xuXG5cdGNvbnN0cnVjdG9yKHtcblx0XHRzaXplID0gMjU2LFxuXHRcdG1heEFnZSA9IDc1MCxcblx0XHRyYWRpdXMgPSAwLjMsXG5cdFx0aW50ZW5zaXR5ID0gMC4yLFxuXHRcdGludGVycG9sYXRlID0gMCxcblx0XHRzbW9vdGhpbmcgPSAwLFxuXHRcdG1pbkZvcmNlID0gMC4zLFxuXHRcdGJsZW5kID0gJ3NjcmVlbicsIC8vIHNvdXJjZS1vdmVyIGlzIGNhbnZhcyBkZWZhdWx0LiBPdGhlcnMgYXJlIHNsb3dlclxuXHRcdGVhc2UgPSBlYXNlQ2lyY2xlT3V0LFxuXHR9OiBUcmFpbENvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5zaXplID0gc2l6ZTtcblx0XHR0aGlzLm1heEFnZSA9IG1heEFnZTtcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcblx0XHR0aGlzLmludGVuc2l0eSA9IGludGVuc2l0eTtcblx0XHR0aGlzLmVhc2UgPSBlYXNlO1xuXHRcdHRoaXMuaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZTtcblx0XHR0aGlzLnNtb290aGluZyA9IHNtb290aGluZztcblx0XHR0aGlzLm1pbkZvcmNlID0gbWluRm9yY2U7XG5cdFx0dGhpcy5ibGVuZCA9IGJsZW5kIGFzIEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtcblxuXHRcdHRoaXMudHJhaWwgPSBbXTtcblx0XHR0aGlzLmZvcmNlID0gMDtcblx0XHR0aGlzLmluaXRUZXh0dXJlKCk7XG5cdH1cblxuXHRpbml0VGV4dHVyZSgpIHtcblx0XHR0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXHRcdHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5zaXplO1xuXHRcdHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKSE7XG5cdFx0dGhpcy5jdHguZmlsbFN0eWxlID0gJ2JsYWNrJztcblx0XHR0aGlzLmN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuXHRcdHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKHRoaXMuY2FudmFzKTtcblxuXHRcdHRoaXMuY2FudmFzLmlkID0gJ3RvdWNoVGV4dHVyZSc7XG5cdFx0dGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSB0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLmNhbnZhcy53aWR0aH1weGA7XG5cdH1cblxuXHR1cGRhdGUoZGVsdGE6IG51bWJlcikge1xuXHRcdHRoaXMuY2xlYXIoKTtcblxuXHRcdC8vIGFnZSBwb2ludHNcblx0XHR0aGlzLnRyYWlsLmZvckVhY2goKHBvaW50LCBpKSA9PiB7XG5cdFx0XHRwb2ludC5hZ2UgKz0gZGVsdGEgKiAxMDAwO1xuXHRcdFx0Ly8gcmVtb3ZlIG9sZFxuXHRcdFx0aWYgKHBvaW50LmFnZSA+IHRoaXMubWF4QWdlKSB7XG5cdFx0XHRcdHRoaXMudHJhaWwuc3BsaWNlKGksIDEpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gcmVzZXQgZm9yY2Ugd2hlbiBlbXB0eSAod2hlbiBzbW9vdGhpbmcpXG5cdFx0aWYgKCF0aGlzLnRyYWlsLmxlbmd0aCkgdGhpcy5mb3JjZSA9IDA7XG5cblx0XHR0aGlzLnRyYWlsLmZvckVhY2goKHBvaW50KSA9PiB7XG5cdFx0XHR0aGlzLmRyYXdUb3VjaChwb2ludCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9XG5cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5jdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ3NvdXJjZS1vdmVyJztcblx0XHR0aGlzLmN0eC5maWxsU3R5bGUgPSAnYmxhY2snO1xuXHRcdHRoaXMuY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXHR9XG5cblx0YWRkVG91Y2gocG9pbnQ6IFBpY2s8UG9pbnQsICd4JyB8ICd5Jz4pIHtcblx0XHRjb25zdCBsYXN0ID0gdGhpcy50cmFpbFt0aGlzLnRyYWlsLmxlbmd0aCAtIDFdO1xuXG5cdFx0aWYgKGxhc3QpIHtcblx0XHRcdGNvbnN0IGR4ID0gbGFzdC54IC0gcG9pbnQueDtcblx0XHRcdGNvbnN0IGR5ID0gbGFzdC55IC0gcG9pbnQueTtcblx0XHRcdGNvbnN0IGRkID0gZHggKiBkeCArIGR5ICogZHk7XG5cblx0XHRcdGNvbnN0IGZvcmNlID0gTWF0aC5tYXgodGhpcy5taW5Gb3JjZSwgTWF0aC5taW4oZGQgKiAxMDAwMCwgMSkpO1xuXG5cdFx0XHR0aGlzLmZvcmNlID0gc21vb3RoQXZlcmFnZShmb3JjZSwgdGhpcy5mb3JjZSwgdGhpcy5zbW9vdGhpbmcpO1xuXG5cdFx0XHRpZiAoISF0aGlzLmludGVycG9sYXRlKSB7XG5cdFx0XHRcdGNvbnN0IGxpbmVzID0gTWF0aC5jZWlsKGRkIC8gTWF0aC5wb3coKHRoaXMucmFkaXVzICogMC41KSAvIHRoaXMuaW50ZXJwb2xhdGUsIDIpKTtcblxuXHRcdFx0XHRpZiAobGluZXMgPiAxKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBsaW5lczsgaSsrKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRyYWlsLnB1c2goe1xuXHRcdFx0XHRcdFx0XHR4OiBsYXN0LnggLSAoZHggLyBsaW5lcykgKiBpLFxuXHRcdFx0XHRcdFx0XHR5OiBsYXN0LnkgLSAoZHkgLyBsaW5lcykgKiBpLFxuXHRcdFx0XHRcdFx0XHRhZ2U6IDAsXG5cdFx0XHRcdFx0XHRcdGZvcmNlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMudHJhaWwucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50LnksIGFnZTogMCwgZm9yY2U6IHRoaXMuZm9yY2UgfSk7XG5cdH1cblxuXHRkcmF3VG91Y2gocG9pbnQ6IFBvaW50KSB7XG5cdFx0Y29uc3QgcG9zID0ge1xuXHRcdFx0eDogcG9pbnQueCAqIHRoaXMuc2l6ZSxcblx0XHRcdHk6ICgxIC0gcG9pbnQueSkgKiB0aGlzLnNpemUsXG5cdFx0fTtcblxuXHRcdGxldCBpbnRlbnNpdHkgPSAxO1xuXHRcdGlmIChwb2ludC5hZ2UgPCB0aGlzLm1heEFnZSAqIDAuMykge1xuXHRcdFx0aW50ZW5zaXR5ID0gdGhpcy5lYXNlKHBvaW50LmFnZSAvICh0aGlzLm1heEFnZSAqIDAuMykpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbnRlbnNpdHkgPSB0aGlzLmVhc2UoMSAtIChwb2ludC5hZ2UgLSB0aGlzLm1heEFnZSAqIDAuMykgLyAodGhpcy5tYXhBZ2UgKiAwLjcpKTtcblx0XHR9XG5cblx0XHRpbnRlbnNpdHkgKj0gcG9pbnQuZm9yY2U7XG5cblx0XHQvLyBhcHBseSBibGVuZGluZ1xuXHRcdHRoaXMuY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmQ7XG5cblx0XHRjb25zdCByYWRpdXMgPSB0aGlzLnNpemUgKiB0aGlzLnJhZGl1cyAqIGludGVuc2l0eTtcblx0XHRjb25zdCBncmQgPSB0aGlzLmN0eC5jcmVhdGVSYWRpYWxHcmFkaWVudChcblx0XHRcdHBvcy54LFxuXHRcdFx0cG9zLnksXG5cdFx0XHRNYXRoLm1heCgwLCByYWRpdXMgKiAwLjI1KSxcblx0XHRcdHBvcy54LFxuXHRcdFx0cG9zLnksXG5cdFx0XHRNYXRoLm1heCgwLCByYWRpdXMpLFxuXHRcdCk7XG5cdFx0Z3JkLmFkZENvbG9yU3RvcCgwLCBgcmdiYSgyNTUsIDI1NSwgMjU1LCAke3RoaXMuaW50ZW5zaXR5fSlgKTtcblx0XHRncmQuYWRkQ29sb3JTdG9wKDEsIGByZ2JhKDAsIDAsIDAsIDAuMClgKTtcblxuXHRcdHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuXHRcdHRoaXMuY3R4LmZpbGxTdHlsZSA9IGdyZDtcblx0XHR0aGlzLmN0eC5hcmMocG9zLngsIHBvcy55LCBNYXRoLm1heCgwLCByYWRpdXMpLCAwLCBNYXRoLlBJICogMik7XG5cdFx0dGhpcy5jdHguZmlsbCgpO1xuXHR9XG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1zb2JhLW1vZGlmaWVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9tb2RpZmllcnMvc3JjL2FuZ3VsYXItdGhyZWUtc29iYS1tb2RpZmllcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|