@zephyr3d/scene 0.6.1 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animation.js +142 -31
- package/dist/animation/animation.js.map +1 -1
- package/dist/animation/animationset.js +186 -73
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js +66 -10
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +40 -20
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/morphtarget.js +20 -38
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +59 -22
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/proptrack.js +186 -0
- package/dist/animation/proptrack.js.map +1 -0
- package/dist/animation/rotationtrack.js +28 -11
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +28 -11
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +238 -82
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/translationtrack.js +29 -11
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/api.js +52 -0
- package/dist/app/api.js.map +1 -0
- package/dist/app/app.js +165 -0
- package/dist/app/app.js.map +1 -0
- package/dist/app/engine.js +300 -0
- package/dist/app/engine.js.map +1 -0
- package/dist/app/inputmgr.js +351 -0
- package/dist/app/inputmgr.js.map +1 -0
- package/dist/app/runtimescript.js +62 -0
- package/dist/app/runtimescript.js.map +1 -0
- package/dist/app/screen.js +318 -0
- package/dist/app/screen.js.map +1 -0
- package/dist/app/scriptingsystem.js +224 -0
- package/dist/app/scriptingsystem.js.map +1 -0
- package/dist/app/scriptregistry.js +421 -0
- package/dist/app/scriptregistry.js.map +1 -0
- package/dist/asset/assetmanager.js +823 -321
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/builtin.js +12 -48
- package/dist/asset/builtin.js.map +1 -1
- package/dist/asset/loaders/dds/dds.js +23 -95
- package/dist/asset/loaders/dds/dds.js.map +1 -1
- package/dist/asset/loaders/dds/dds_loader.js +9 -19
- package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +50 -48
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/helpers.js +33 -16
- package/dist/asset/loaders/gltf/helpers.js.map +1 -1
- package/dist/asset/loaders/hdr/hdr.js +39 -27
- package/dist/asset/loaders/hdr/hdr.js.map +1 -1
- package/dist/asset/loaders/image/tga_Loader.js +15 -17
- package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
- package/dist/asset/loaders/image/webimage_loader.js +51 -50
- package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
- package/dist/asset/loaders/loader.js +2 -2
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/model.js +160 -6
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js +0 -1
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/blitter.js +28 -31
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/blitter/box.js +0 -1
- package/dist/blitter/box.js.map +1 -1
- package/dist/blitter/copy.js.map +1 -1
- package/dist/blitter/gaussianblur.js +23 -23
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +139 -34
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +760 -172
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/fps.js +21 -27
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +134 -59
- package/dist/camera/orbit.js.map +1 -1
- package/dist/camera/orthocamera.js +52 -21
- package/dist/camera/orthocamera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +60 -34
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +17031 -6901
- package/dist/index.js +60 -21
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +5 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/grassmaterial.js +6 -1
- package/dist/material/grassmaterial.js.map +1 -1
- package/dist/material/lambert.js +6 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +356 -77
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +505 -162
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +5 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/foliage.js +3 -3
- package/dist/material/mixins/foliage.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +6 -6
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +242 -0
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +19 -7
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/brdf.js +134 -0
- package/dist/material/mixins/pbr/brdf.js.map +1 -0
- package/dist/material/mixins/pbr/common.js +68 -85
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +101 -83
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js +6 -2
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/particle.js +272 -0
- package/dist/material/particle.js.map +1 -0
- package/dist/material/pbrblueprint.js +344 -0
- package/dist/material/pbrblueprint.js.map +1 -0
- package/dist/material/pbrmr.js +10 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +10 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +533 -316
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +301 -0
- package/dist/material/sprite.js.map +1 -0
- package/dist/material/sprite3d.js +301 -0
- package/dist/material/sprite3d.js.map +1 -0
- package/dist/material/sprite3d_std.js +116 -0
- package/dist/material/sprite3d_std.js.map +1 -0
- package/dist/material/sprite3dblueprint.js +235 -0
- package/dist/material/sprite3dblueprint.js.map +1 -0
- package/dist/material/sprite_std.js +116 -0
- package/dist/material/sprite_std.js.map +1 -0
- package/dist/material/spriteblueprint.js +235 -0
- package/dist/material/spriteblueprint.js.map +1 -0
- package/dist/material/terrain-cm.js +606 -0
- package/dist/material/terrain-cm.js.map +1 -0
- package/dist/material/terrainmaterial.js +59 -54
- package/dist/material/terrainmaterial.js.map +1 -1
- package/dist/material/unlit.js +5 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +415 -0
- package/dist/material/water.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
- package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
- package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
- package/dist/posteffect/bloom.js +39 -54
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js +95 -128
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js +10 -18
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js +9 -17
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js +105 -0
- package/dist/posteffect/motionblur.js.map +1 -0
- package/dist/posteffect/posteffect.js +66 -35
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +13 -21
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/ssr.js +65 -103
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/taa.js +175 -0
- package/dist/posteffect/taa.js.map +1 -0
- package/dist/posteffect/tonemap.js +12 -20
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +38 -25
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +424 -106
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +11 -9
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +51 -13
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +15 -7
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable.js +15 -0
- package/dist/render/drawable.js.map +1 -0
- package/dist/render/drawable_mixin.js +121 -44
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js +86 -141
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +236 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -0
- package/dist/render/fft_wavegenerator.js +131 -114
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/fullscreenquad.js +2 -2
- package/dist/render/fullscreenquad.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +100 -48
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +7 -3
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +7 -5
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +28 -27
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/objectcolorpass.js +6 -9
- package/dist/render/objectcolorpass.js.map +1 -1
- package/dist/render/primitive.js +213 -105
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/render_queue.js +49 -24
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderbundle_wrapper.js +65 -15
- package/dist/render/renderbundle_wrapper.js.map +1 -1
- package/dist/render/renderer.js +324 -189
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/renderpass.js +43 -84
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/rendertarget.js +5 -0
- package/dist/render/rendertarget.js.map +1 -0
- package/dist/render/screenrendertarget.js +56 -0
- package/dist/render/screenrendertarget.js.map +1 -0
- package/dist/render/shadowmap_pass.js +5 -6
- package/dist/render/shadowmap_pass.js.map +1 -1
- package/dist/render/sky.js +867 -542
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +13 -15
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +296 -0
- package/dist/scene/basesprite.js.map +1 -0
- package/dist/scene/batchgroup.js +22 -7
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +78 -49
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/graph_node.js +2 -3
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/light.js +49 -92
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +298 -89
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/octree.js +371 -162
- package/dist/scene/octree.js.map +1 -1
- package/dist/scene/particlesys.js +687 -0
- package/dist/scene/particlesys.js.map +1 -0
- package/dist/scene/raycast_visitor.js +26 -13
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +312 -85
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +663 -105
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/sprite.js +18 -0
- package/dist/scene/sprite.js.map +1 -0
- package/dist/scene/sprite3d.js +18 -0
- package/dist/scene/sprite3d.js.map +1 -0
- package/dist/scene/terrain/grass.js +48 -49
- package/dist/scene/terrain/grass.js.map +1 -1
- package/dist/scene/terrain/heightfield.js +46 -44
- package/dist/scene/terrain/heightfield.js.map +1 -1
- package/dist/scene/terrain/patch.js +20 -29
- package/dist/scene/terrain/patch.js.map +1 -1
- package/dist/scene/terrain/quadtree.js +58 -27
- package/dist/scene/terrain/quadtree.js.map +1 -1
- package/dist/scene/terrain/terrain.js +31 -45
- package/dist/scene/terrain/terrain.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +604 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +162 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/terrain-cm.js +550 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/scene/water.js +383 -0
- package/dist/scene/water.js.map +1 -0
- package/dist/shaders/atmosphere.js +945 -0
- package/dist/shaders/atmosphere.js.map +1 -0
- package/dist/shaders/fog.js +116 -0
- package/dist/shaders/fog.js.map +1 -0
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +217 -8
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/pbr.js.map +1 -1
- package/dist/shaders/shadow.js +8 -8
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssr.js +87 -39
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +216 -0
- package/dist/shaders/temporal.js.map +1 -0
- package/dist/shaders/water.js +42 -20
- package/dist/shaders/water.js.map +1 -1
- package/dist/shadow/esm.js +32 -14
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +12 -13
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +12 -13
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +40 -0
- package/dist/shadow/shader.js.map +1 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +73 -44
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +15 -16
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +33 -16
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/box.js +187 -83
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/cylinder.js +101 -43
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +70 -29
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/shape.js +121 -17
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +78 -44
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/shapes/tetrahedron.js +255 -0
- package/dist/shapes/tetrahedron.js.map +1 -0
- package/dist/shapes/torus.js +76 -55
- package/dist/shapes/torus.js.map +1 -1
- package/dist/src/animation/animation.js +127 -0
- package/dist/src/animation/animation.js.map +1 -0
- package/dist/src/animation/animationset.js +255 -0
- package/dist/src/animation/animationset.js.map +1 -0
- package/dist/src/animation/animationtrack.js +34 -0
- package/dist/src/animation/animationtrack.js.map +1 -0
- package/dist/src/animation/eulerrotationtrack.js +52 -0
- package/dist/src/animation/eulerrotationtrack.js.map +1 -0
- package/dist/src/animation/morphtarget.js +93 -0
- package/dist/src/animation/morphtarget.js.map +1 -0
- package/dist/src/animation/morphtrack.js +70 -0
- package/dist/src/animation/morphtrack.js.map +1 -0
- package/dist/src/animation/proptrack.js +161 -0
- package/dist/src/animation/proptrack.js.map +1 -0
- package/dist/src/animation/rotationtrack.js +51 -0
- package/dist/src/animation/rotationtrack.js.map +1 -0
- package/dist/src/animation/scaletrack.js +50 -0
- package/dist/src/animation/scaletrack.js.map +1 -0
- package/dist/src/animation/skeleton.js +204 -0
- package/dist/src/animation/skeleton.js.map +1 -0
- package/dist/src/animation/translationtrack.js +50 -0
- package/dist/src/animation/translationtrack.js.map +1 -0
- package/dist/{app.js → src/app/app.js} +18 -40
- package/dist/src/app/app.js.map +1 -0
- package/dist/{input → src/app}/inputmgr.js +41 -16
- package/dist/src/app/inputmgr.js.map +1 -0
- package/dist/src/asset/assetmanager.js +404 -0
- package/dist/src/asset/assetmanager.js.map +1 -0
- package/dist/src/asset/builtin.js +337 -0
- package/dist/src/asset/builtin.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds.js +470 -0
- package/dist/src/asset/loaders/dds/dds.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
- package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/helpers.js +327 -0
- package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
- package/dist/src/asset/loaders/hdr/hdr.js +180 -0
- package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
- package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
- package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
- package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
- package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
- package/dist/src/asset/loaders/loader.js +45 -0
- package/dist/src/asset/loaders/loader.js.map +1 -0
- package/dist/src/asset/model.js +414 -0
- package/dist/src/asset/model.js.map +1 -0
- package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
- package/dist/src/blitter/bilateralblur.js.map +1 -0
- package/dist/src/blitter/blitter.js +390 -0
- package/dist/src/blitter/blitter.js.map +1 -0
- package/dist/src/blitter/box.js +118 -0
- package/dist/src/blitter/box.js.map +1 -0
- package/dist/src/blitter/copy.js +22 -0
- package/dist/src/blitter/copy.js.map +1 -0
- package/dist/src/blitter/gaussianblur.js +228 -0
- package/dist/src/blitter/gaussianblur.js.map +1 -0
- package/dist/src/camera/base.js +92 -0
- package/dist/src/camera/base.js.map +1 -0
- package/dist/src/camera/camera.js +1005 -0
- package/dist/src/camera/camera.js.map +1 -0
- package/dist/src/camera/fps.js +238 -0
- package/dist/src/camera/fps.js.map +1 -0
- package/dist/src/camera/orbit.js +245 -0
- package/dist/src/camera/orbit.js.map +1 -0
- package/dist/src/camera/orthocamera.js +167 -0
- package/dist/src/camera/orthocamera.js.map +1 -0
- package/dist/src/camera/perspectivecamera.js +141 -0
- package/dist/src/camera/perspectivecamera.js.map +1 -0
- package/dist/src/index.js +120 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/material/blinn.js +81 -0
- package/dist/src/material/blinn.js.map +1 -0
- package/dist/src/material/grassmaterial.js +113 -0
- package/dist/src/material/grassmaterial.js.map +1 -0
- package/dist/src/material/lambert.js +92 -0
- package/dist/src/material/lambert.js.map +1 -0
- package/dist/src/material/material.js +301 -0
- package/dist/src/material/material.js.map +1 -0
- package/dist/src/material/meshmaterial.js +704 -0
- package/dist/src/material/meshmaterial.js.map +1 -0
- package/dist/src/material/mixins/albedocolor.js +76 -0
- package/dist/src/material/mixins/albedocolor.js.map +1 -0
- package/dist/src/material/mixins/foliage.js +47 -0
- package/dist/src/material/mixins/foliage.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
- package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
- package/dist/src/material/mixins/lit.js +476 -0
- package/dist/src/material/mixins/lit.js.map +1 -0
- package/dist/src/material/mixins/pbr/common.js +918 -0
- package/dist/src/material/mixins/pbr/common.js.map +1 -0
- package/dist/src/material/mixins/texture.js +172 -0
- package/dist/src/material/mixins/texture.js.map +1 -0
- package/dist/src/material/mixins/vertexcolor.js +56 -0
- package/dist/src/material/mixins/vertexcolor.js.map +1 -0
- package/dist/src/material/particle.js +178 -0
- package/dist/src/material/particle.js.map +1 -0
- package/dist/src/material/pbrmr.js +97 -0
- package/dist/src/material/pbrmr.js.map +1 -0
- package/dist/src/material/pbrsg.js +97 -0
- package/dist/src/material/pbrsg.js.map +1 -0
- package/dist/src/material/shader/helper.js +1209 -0
- package/dist/src/material/shader/helper.js.map +1 -0
- package/dist/src/material/terrain-cm.js +606 -0
- package/dist/src/material/terrain-cm.js.map +1 -0
- package/dist/src/material/terrainmaterial.js +375 -0
- package/dist/src/material/terrainmaterial.js.map +1 -0
- package/dist/src/material/unlit.js +41 -0
- package/dist/src/material/unlit.js.map +1 -0
- package/dist/src/material/water.js +417 -0
- package/dist/src/material/water.js.map +1 -0
- package/dist/src/posteffect/bloom.js +361 -0
- package/dist/src/posteffect/bloom.js.map +1 -0
- package/dist/src/posteffect/compositor.js +226 -0
- package/dist/src/posteffect/compositor.js.map +1 -0
- package/dist/src/posteffect/fxaa.js +273 -0
- package/dist/src/posteffect/fxaa.js.map +1 -0
- package/dist/src/posteffect/grayscale.js +69 -0
- package/dist/src/posteffect/grayscale.js.map +1 -0
- package/dist/src/posteffect/motionblur.js +96 -0
- package/dist/src/posteffect/motionblur.js.map +1 -0
- package/dist/src/posteffect/posteffect.js +126 -0
- package/dist/src/posteffect/posteffect.js.map +1 -0
- package/dist/src/posteffect/sao.js +324 -0
- package/dist/src/posteffect/sao.js.map +1 -0
- package/dist/src/posteffect/ssr.js +489 -0
- package/dist/src/posteffect/ssr.js.map +1 -0
- package/dist/src/posteffect/taa.js +172 -0
- package/dist/src/posteffect/taa.js.map +1 -0
- package/dist/src/posteffect/tonemap.js +94 -0
- package/dist/src/posteffect/tonemap.js.map +1 -0
- package/dist/src/render/abuffer_oit.js +361 -0
- package/dist/src/render/abuffer_oit.js.map +1 -0
- package/dist/src/render/clipmap.js +851 -0
- package/dist/src/render/clipmap.js.map +1 -0
- package/dist/src/render/cluster_light.js +333 -0
- package/dist/src/render/cluster_light.js.map +1 -0
- package/dist/src/render/cull_visitor.js +187 -0
- package/dist/src/render/cull_visitor.js.map +1 -0
- package/dist/src/render/depthpass.js +68 -0
- package/dist/src/render/depthpass.js.map +1 -0
- package/dist/src/render/drawable_mixin.js +227 -0
- package/dist/src/render/drawable_mixin.js.map +1 -0
- package/dist/src/render/envlight.js +463 -0
- package/dist/src/render/envlight.js.map +1 -0
- package/dist/src/render/fbm_wavegenerator.js +251 -0
- package/dist/src/render/fbm_wavegenerator.js.map +1 -0
- package/dist/src/render/fft_wavegenerator.js +1006 -0
- package/dist/src/render/fft_wavegenerator.js.map +1 -0
- package/dist/src/render/fullscreenquad.js +38 -0
- package/dist/src/render/fullscreenquad.js.map +1 -0
- package/dist/src/render/gerstner_wavegenerator.js +314 -0
- package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
- package/dist/src/render/globalbindgroup_allocator.js +60 -0
- package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
- package/dist/src/render/hzb.js +273 -0
- package/dist/src/render/hzb.js.map +1 -0
- package/dist/src/render/lightpass.js +172 -0
- package/dist/src/render/lightpass.js.map +1 -0
- package/dist/src/render/objectcolorpass.js +51 -0
- package/dist/src/render/objectcolorpass.js.map +1 -0
- package/dist/src/render/primitive.js +364 -0
- package/dist/src/render/primitive.js.map +1 -0
- package/dist/src/render/render_queue.js +467 -0
- package/dist/src/render/render_queue.js.map +1 -0
- package/dist/src/render/renderbundle_wrapper.js +152 -0
- package/dist/src/render/renderbundle_wrapper.js.map +1 -0
- package/dist/src/render/renderer.js +455 -0
- package/dist/src/render/renderer.js.map +1 -0
- package/dist/src/render/renderpass.js +200 -0
- package/dist/src/render/renderpass.js.map +1 -0
- package/dist/src/render/shadowmap_pass.js +56 -0
- package/dist/src/render/shadowmap_pass.js.map +1 -0
- package/dist/src/render/sky.js +1103 -0
- package/dist/src/render/sky.js.map +1 -0
- package/dist/src/render/weightedblended_oit.js +168 -0
- package/dist/src/render/weightedblended_oit.js.map +1 -0
- package/dist/src/scene/batchgroup.js +162 -0
- package/dist/src/scene/batchgroup.js.map +1 -0
- package/dist/src/scene/environment.js +209 -0
- package/dist/src/scene/environment.js.map +1 -0
- package/dist/src/scene/graph_node.js +72 -0
- package/dist/src/scene/graph_node.js.map +1 -0
- package/dist/src/scene/light.js +416 -0
- package/dist/src/scene/light.js.map +1 -0
- package/dist/src/scene/mesh.js +341 -0
- package/dist/src/scene/mesh.js.map +1 -0
- package/dist/src/scene/octree.js +649 -0
- package/dist/src/scene/octree.js.map +1 -0
- package/dist/src/scene/particlesys.js +738 -0
- package/dist/src/scene/particlesys.js.map +1 -0
- package/dist/src/scene/raycast_visitor.js +103 -0
- package/dist/src/scene/raycast_visitor.js.map +1 -0
- package/dist/src/scene/scene.js +284 -0
- package/dist/src/scene/scene.js.map +1 -0
- package/dist/src/scene/scene_node.js +732 -0
- package/dist/src/scene/scene_node.js.map +1 -0
- package/dist/src/scene/terrain/grass.js +278 -0
- package/dist/src/scene/terrain/grass.js.map +1 -0
- package/dist/src/scene/terrain/heightfield.js +475 -0
- package/dist/src/scene/terrain/heightfield.js.map +1 -0
- package/dist/src/scene/terrain/patch.js +530 -0
- package/dist/src/scene/terrain/patch.js.map +1 -0
- package/dist/src/scene/terrain/quadtree.js +461 -0
- package/dist/src/scene/terrain/quadtree.js.map +1 -0
- package/dist/src/scene/terrain/terrain.js +246 -0
- package/dist/src/scene/terrain/terrain.js.map +1 -0
- package/dist/src/scene/terrain-cm/grass.js +594 -0
- package/dist/src/scene/terrain-cm/grass.js.map +1 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/src/scene/water.js +374 -0
- package/dist/src/scene/water.js.map +1 -0
- package/dist/src/shaders/atmosphere.js +957 -0
- package/dist/src/shaders/atmosphere.js.map +1 -0
- package/dist/src/shaders/fog.js +112 -0
- package/dist/src/shaders/fog.js.map +1 -0
- package/dist/src/shaders/misc.js +266 -0
- package/dist/src/shaders/misc.js.map +1 -0
- package/dist/src/shaders/noise.js +222 -0
- package/dist/src/shaders/noise.js.map +1 -0
- package/dist/src/shaders/pbr.js +51 -0
- package/dist/src/shaders/pbr.js.map +1 -0
- package/dist/src/shaders/shadow.js +636 -0
- package/dist/src/shaders/shadow.js.map +1 -0
- package/dist/src/shaders/ssr.js +490 -0
- package/dist/src/shaders/ssr.js.map +1 -0
- package/dist/src/shaders/temporal.js +215 -0
- package/dist/src/shaders/temporal.js.map +1 -0
- package/dist/src/shaders/water.js +756 -0
- package/dist/src/shaders/water.js.map +1 -0
- package/dist/src/shadow/esm.js +237 -0
- package/dist/src/shadow/esm.js.map +1 -0
- package/dist/src/shadow/pcf_opt.js +181 -0
- package/dist/src/shadow/pcf_opt.js.map +1 -0
- package/dist/src/shadow/pcf_pd.js +189 -0
- package/dist/src/shadow/pcf_pd.js.map +1 -0
- package/dist/src/shadow/shader.js +37 -0
- package/dist/src/shadow/shader.js.map +1 -0
- package/dist/src/shadow/shadow_impl.js +15 -0
- package/dist/src/shadow/shadow_impl.js.map +1 -0
- package/dist/src/shadow/shadowmapper.js +790 -0
- package/dist/src/shadow/shadowmapper.js.map +1 -0
- package/dist/src/shadow/ssm.js +159 -0
- package/dist/src/shadow/ssm.js.map +1 -0
- package/dist/src/shadow/vsm.js +297 -0
- package/dist/src/shadow/vsm.js.map +1 -0
- package/dist/src/shapes/box.js +386 -0
- package/dist/src/shapes/box.js.map +1 -0
- package/dist/src/shapes/cylinder.js +125 -0
- package/dist/src/shapes/cylinder.js.map +1 -0
- package/dist/src/shapes/plane.js +88 -0
- package/dist/src/shapes/plane.js.map +1 -0
- package/dist/src/shapes/shape.js +87 -0
- package/dist/src/shapes/shape.js.map +1 -0
- package/dist/src/shapes/sphere.js +114 -0
- package/dist/src/shapes/sphere.js.map +1 -0
- package/dist/src/shapes/tetrahedron.js +188 -0
- package/dist/src/shapes/tetrahedron.js.map +1 -0
- package/dist/src/shapes/torus.js +111 -0
- package/dist/src/shapes/torus.js.map +1 -0
- package/dist/src/utility/aabbtree.js +400 -0
- package/dist/src/utility/aabbtree.js.map +1 -0
- package/dist/src/utility/bounding_volume.js +29 -0
- package/dist/src/utility/bounding_volume.js.map +1 -0
- package/dist/src/utility/debug.js +28 -0
- package/dist/src/utility/debug.js.map +1 -0
- package/dist/src/utility/draco/decoder.js +116 -0
- package/dist/src/utility/draco/decoder.js.map +1 -0
- package/dist/src/utility/misc.js +105 -0
- package/dist/src/utility/misc.js.map +1 -0
- package/dist/src/utility/panorama.js +163 -0
- package/dist/src/utility/panorama.js.map +1 -0
- package/dist/src/utility/pmrem.js +354 -0
- package/dist/src/utility/pmrem.js.map +1 -0
- package/dist/src/utility/rendermipmap.js +115 -0
- package/dist/src/utility/rendermipmap.js.map +1 -0
- package/dist/src/utility/serialization/json.js +402 -0
- package/dist/src/utility/serialization/json.js.map +1 -0
- package/dist/src/utility/serialization/manager.js +623 -0
- package/dist/src/utility/serialization/manager.js.map +1 -0
- package/dist/src/utility/serialization/scene/animation.js +248 -0
- package/dist/src/utility/serialization/scene/animation.js.map +1 -0
- package/dist/src/utility/serialization/scene/batch.js +59 -0
- package/dist/src/utility/serialization/scene/batch.js.map +1 -0
- package/dist/src/utility/serialization/scene/camera.js +790 -0
- package/dist/src/utility/serialization/scene/camera.js.map +1 -0
- package/dist/src/utility/serialization/scene/common.js +222 -0
- package/dist/src/utility/serialization/scene/common.js.map +1 -0
- package/dist/src/utility/serialization/scene/light.js +575 -0
- package/dist/src/utility/serialization/scene/light.js.map +1 -0
- package/dist/src/utility/serialization/scene/material.js +1111 -0
- package/dist/src/utility/serialization/scene/material.js.map +1 -0
- package/dist/src/utility/serialization/scene/mesh.js +148 -0
- package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/src/utility/serialization/scene/misc.js +39 -0
- package/dist/src/utility/serialization/scene/misc.js.map +1 -0
- package/dist/src/utility/serialization/scene/node.js +451 -0
- package/dist/src/utility/serialization/scene/node.js.map +1 -0
- package/dist/src/utility/serialization/scene/particle.js +425 -0
- package/dist/src/utility/serialization/scene/particle.js.map +1 -0
- package/dist/src/utility/serialization/scene/primitive.js +692 -0
- package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/src/utility/serialization/scene/scene.js +704 -0
- package/dist/src/utility/serialization/scene/scene.js.map +1 -0
- package/dist/src/utility/serialization/scene/terrain.js +488 -0
- package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/src/utility/serialization/scene/water.js +465 -0
- package/dist/src/utility/serialization/scene/water.js.map +1 -0
- package/dist/src/utility/shprojector.js +297 -0
- package/dist/src/utility/shprojector.js.map +1 -0
- package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
- package/dist/src/utility/textures/ggxlut.js.map +1 -0
- package/dist/src/utility/textures/gradientnoise.js +62 -0
- package/dist/src/utility/textures/gradientnoise.js.map +1 -0
- package/dist/src/utility/textures/randomnoise.js +41 -0
- package/dist/src/utility/textures/randomnoise.js.map +1 -0
- package/dist/src/values.js +162 -0
- package/dist/src/values.js.map +1 -0
- package/dist/utility/aabbtree.js +16 -6
- package/dist/utility/aabbtree.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +1325 -0
- package/dist/utility/blueprint/common/constants.js.map +1 -0
- package/dist/utility/blueprint/common/math.js +2507 -0
- package/dist/utility/blueprint/common/math.js.map +1 -0
- package/dist/utility/blueprint/common.js +7 -0
- package/dist/utility/blueprint/common.js.map +1 -0
- package/dist/utility/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/func.js +525 -0
- package/dist/utility/blueprint/material/func.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +1659 -0
- package/dist/utility/blueprint/material/inputs.js.map +1 -0
- package/dist/utility/blueprint/material/ir.js +1519 -0
- package/dist/utility/blueprint/material/ir.js.map +1 -0
- package/dist/utility/blueprint/material/pbr.js +450 -0
- package/dist/utility/blueprint/material/pbr.js.map +1 -0
- package/dist/utility/blueprint/material/texture.js +1116 -0
- package/dist/utility/blueprint/material/texture.js.map +1 -0
- package/dist/utility/blueprint/node.js +214 -0
- package/dist/utility/blueprint/node.js.map +1 -0
- package/dist/utility/bounding_volume.js +0 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/debug.js +26 -0
- package/dist/utility/debug.js.map +1 -0
- package/dist/utility/draco/decoder.js +1 -1
- package/dist/utility/draco/decoder.js.map +1 -1
- package/dist/utility/misc.js +19 -7
- package/dist/utility/misc.js.map +1 -1
- package/dist/utility/panorama.js +8 -6
- package/dist/utility/panorama.js.map +1 -1
- package/dist/utility/pmrem.js +30 -18
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/rendermipmap.js +116 -0
- package/dist/utility/rendermipmap.js.map +1 -0
- package/dist/utility/serialization/blueprint/constants.js +255 -0
- package/dist/utility/serialization/blueprint/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/constants.js +203 -0
- package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/texture.js +165 -0
- package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
- package/dist/utility/serialization/json.js +406 -0
- package/dist/utility/serialization/json.js.map +1 -0
- package/dist/utility/serialization/manager.js +1243 -0
- package/dist/utility/serialization/manager.js.map +1 -0
- package/dist/utility/serialization/scene/animation.js +701 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -0
- package/dist/utility/serialization/scene/batch.js +54 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -0
- package/dist/utility/serialization/scene/camera.js +896 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +298 -0
- package/dist/utility/serialization/scene/common.js.map +1 -0
- package/dist/utility/serialization/scene/light.js +591 -0
- package/dist/utility/serialization/scene/light.js.map +1 -0
- package/dist/utility/serialization/scene/material.js +1070 -0
- package/dist/utility/serialization/scene/material.js.map +1 -0
- package/dist/utility/serialization/scene/mesh.js +345 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/utility/serialization/scene/misc.js +40 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -0
- package/dist/utility/serialization/scene/node.js +424 -0
- package/dist/utility/serialization/scene/node.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +427 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +585 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/utility/serialization/scene/scene.js +764 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -0
- package/dist/utility/serialization/scene/sprite.js +164 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -0
- package/dist/utility/serialization/scene/terrain.js +497 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/utility/serialization/scene/water.js +467 -0
- package/dist/utility/serialization/scene/water.js.map +1 -0
- package/dist/utility/serialization/types.js +6 -0
- package/dist/utility/serialization/types.js.map +1 -0
- package/dist/utility/shprojector.js +313 -0
- package/dist/utility/shprojector.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +4 -5
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/gradientnoise.js +2 -1
- package/dist/utility/textures/gradientnoise.js.map +1 -1
- package/dist/utility/textures/randomnoise.js +1 -0
- package/dist/utility/textures/randomnoise.js.map +1 -1
- package/dist/values.js +103 -16
- package/dist/values.js.map +1 -1
- package/package.json +80 -66
- package/dist/app.js.map +0 -1
- package/dist/blitter/depthlimitedgaussion.js.map +0 -1
- package/dist/input/inputmgr.js.map +0 -1
- package/dist/material/mixins/ggxlut.js.map +0 -1
- package/dist/posteffect/water.js +0 -508
- package/dist/posteffect/water.js.map +0 -1
- package/dist/render/oit.js +0 -16
- package/dist/render/oit.js.map +0 -1
- package/dist/render/scatteringlut.js +0 -634
- package/dist/render/scatteringlut.js.map +0 -1
- package/dist/render/watermesh.js +0 -193
- package/dist/render/watermesh.js.map +0 -1
- package/dist/render/wavegenerator.js +0 -8
- package/dist/render/wavegenerator.js.map +0 -1
- package/dist/scene/xform.js +0 -247
- package/dist/scene/xform.js.map +0 -1
- package/dist/utility/shprojection.js +0 -442
- package/dist/utility/shprojection.js.map +0 -1
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input manager
|
|
3
|
+
*
|
|
4
|
+
* Centralizes DOM input event handling for the engine:
|
|
5
|
+
* - Subscribes to pointer/keyboard/drag/wheel/composition events on the target canvas element.
|
|
6
|
+
* - Normalizes click and double-click detection using distance/time tolerances.
|
|
7
|
+
* - Supports a middleware chain (`use`) to intercept and optionally consume events
|
|
8
|
+
* before they are dispatched to the Application's observable event map.
|
|
9
|
+
* - Manages pointer capture for mouse interactions to ensure consistent up/move delivery.
|
|
10
|
+
*
|
|
11
|
+
* Lifecycle:
|
|
12
|
+
* - Call `start()` to attach all event listeners; `stop()` to remove them.
|
|
13
|
+
*
|
|
14
|
+
* @public
|
|
15
|
+
*/ class InputManager {
|
|
16
|
+
_app;
|
|
17
|
+
_target;
|
|
18
|
+
_started;
|
|
19
|
+
_clickDistTolerance;
|
|
20
|
+
_clickTimeTolerance;
|
|
21
|
+
_dblclickDistTolerance;
|
|
22
|
+
_dblclickTimeTolerance;
|
|
23
|
+
_pointerDownHandler;
|
|
24
|
+
_pointerUpHandler;
|
|
25
|
+
_pointerMoveHandler;
|
|
26
|
+
_pointerCancelHandler;
|
|
27
|
+
_contextMenuHandler;
|
|
28
|
+
_keyboardHandler;
|
|
29
|
+
_dragHandler;
|
|
30
|
+
_wheelHandler;
|
|
31
|
+
_compositionHandler;
|
|
32
|
+
_enableContextMenu;
|
|
33
|
+
_captureId;
|
|
34
|
+
_middlewares;
|
|
35
|
+
_lastEventDatas;
|
|
36
|
+
/**
|
|
37
|
+
* Creates an instance of InputManager bound to the given application/canvas.
|
|
38
|
+
*
|
|
39
|
+
* @param app - The owning Application instance.
|
|
40
|
+
*/ constructor(app){
|
|
41
|
+
this._app = app;
|
|
42
|
+
this._target = app.options.canvas;
|
|
43
|
+
this._started = false;
|
|
44
|
+
this._clickDistTolerance = 4 * 4;
|
|
45
|
+
this._clickTimeTolerance = 400;
|
|
46
|
+
this._dblclickDistTolerance = 4 * 4;
|
|
47
|
+
this._dblclickTimeTolerance = 400;
|
|
48
|
+
this._lastEventDatas = [];
|
|
49
|
+
this._enableContextMenu = false;
|
|
50
|
+
this._pointerDownHandler = this._getPointerDownHandler();
|
|
51
|
+
this._pointerUpHandler = this._getPointerUpHandler();
|
|
52
|
+
this._pointerMoveHandler = this._getPointerMoveHander();
|
|
53
|
+
this._pointerCancelHandler = this._getPointerCancelHandler();
|
|
54
|
+
this._contextMenuHandler = this._getContextMenuHandler();
|
|
55
|
+
this._keyboardHandler = this._getKeyboardHandler();
|
|
56
|
+
this._dragHandler = this._getDragHandler();
|
|
57
|
+
this._wheelHandler = this._getWheelHandler();
|
|
58
|
+
this._compositionHandler = this._getCompositionHandler();
|
|
59
|
+
this._captureId = -1;
|
|
60
|
+
this._middlewares = [];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Begin listening to DOM events on the target element.
|
|
64
|
+
*
|
|
65
|
+
* Idempotent: additional calls have no effect after the first successful start.
|
|
66
|
+
*
|
|
67
|
+
* @internal
|
|
68
|
+
*/ start() {
|
|
69
|
+
if (!this._started) {
|
|
70
|
+
this._started = true;
|
|
71
|
+
this._target.addEventListener('pointerdown', this._pointerDownHandler);
|
|
72
|
+
this._target.addEventListener('pointerup', this._pointerUpHandler);
|
|
73
|
+
this._target.addEventListener('pointermove', this._pointerMoveHandler);
|
|
74
|
+
this._target.addEventListener('pointercancel', this._pointerCancelHandler);
|
|
75
|
+
this._target.addEventListener('contextmenu', this._contextMenuHandler);
|
|
76
|
+
this._target.addEventListener('keydown', this._keyboardHandler);
|
|
77
|
+
this._target.addEventListener('keyup', this._keyboardHandler);
|
|
78
|
+
this._target.addEventListener('keypress', this._keyboardHandler);
|
|
79
|
+
this._target.addEventListener('drag', this._dragHandler);
|
|
80
|
+
this._target.addEventListener('dragenter', this._dragHandler);
|
|
81
|
+
this._target.addEventListener('dragleave', this._dragHandler);
|
|
82
|
+
this._target.addEventListener('dragstart', this._dragHandler);
|
|
83
|
+
this._target.addEventListener('dragend', this._dragHandler);
|
|
84
|
+
this._target.addEventListener('dragover', this._dragHandler);
|
|
85
|
+
this._target.addEventListener('drop', this._dragHandler);
|
|
86
|
+
this._target.addEventListener('wheel', this._wheelHandler);
|
|
87
|
+
this._target.addEventListener('compositionstart', this._compositionHandler);
|
|
88
|
+
this._target.addEventListener('compositionupdate', this._compositionHandler);
|
|
89
|
+
this._target.addEventListener('compositionend', this._compositionHandler);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Stop listening to DOM events and clear per-pointer cached state.
|
|
94
|
+
*
|
|
95
|
+
* Idempotent: does nothing if not started.
|
|
96
|
+
*
|
|
97
|
+
* @internal
|
|
98
|
+
*/ stop() {
|
|
99
|
+
if (this._started) {
|
|
100
|
+
this._started = false;
|
|
101
|
+
this._target.removeEventListener('pointerdown', this._pointerDownHandler);
|
|
102
|
+
this._target.removeEventListener('pointerup', this._pointerUpHandler);
|
|
103
|
+
this._target.removeEventListener('pointermove', this._pointerMoveHandler);
|
|
104
|
+
this._target.removeEventListener('pointercancel', this._pointerCancelHandler);
|
|
105
|
+
this._target.removeEventListener('contextmenu', this._contextMenuHandler);
|
|
106
|
+
this._target.removeEventListener('keydown', this._keyboardHandler);
|
|
107
|
+
this._target.removeEventListener('keyup', this._keyboardHandler);
|
|
108
|
+
this._target.removeEventListener('keypress', this._keyboardHandler);
|
|
109
|
+
this._target.removeEventListener('drag', this._dragHandler);
|
|
110
|
+
this._target.removeEventListener('dragenter', this._dragHandler);
|
|
111
|
+
this._target.removeEventListener('dragleave', this._dragHandler);
|
|
112
|
+
this._target.removeEventListener('dragstart', this._dragHandler);
|
|
113
|
+
this._target.removeEventListener('dragend', this._dragHandler);
|
|
114
|
+
this._target.removeEventListener('dragover', this._dragHandler);
|
|
115
|
+
this._target.removeEventListener('drop', this._dragHandler);
|
|
116
|
+
this._target.removeEventListener('wheel', this._wheelHandler);
|
|
117
|
+
this._target.removeEventListener('compositionstart', this._compositionHandler);
|
|
118
|
+
this._target.removeEventListener('compositionupdate', this._compositionHandler);
|
|
119
|
+
this._target.removeEventListener('compositionend', this._compositionHandler);
|
|
120
|
+
this._lastEventDatas = [];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Register a middleware (interceptor) for input events.
|
|
125
|
+
*
|
|
126
|
+
* Order matters: middlewares are invoked in the order they were added until one returns true.
|
|
127
|
+
* If a middleware returns true, the event is considered handled and will not be dispatched
|
|
128
|
+
* to the Application's observers.
|
|
129
|
+
*
|
|
130
|
+
* @param handler - Middleware function to add.
|
|
131
|
+
* @param ctx - `this` object for handler
|
|
132
|
+
* @returns The InputManager instance for chaining.
|
|
133
|
+
*/ use(handler, ctx) {
|
|
134
|
+
if (handler) {
|
|
135
|
+
this._middlewares.push({
|
|
136
|
+
handler,
|
|
137
|
+
ctx
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return this;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Register a middleware (interceptor) for input events at the first order.
|
|
144
|
+
*
|
|
145
|
+
* @param handler - Middleware function to add.
|
|
146
|
+
* @param ctx - `this` object for handler
|
|
147
|
+
* @returns The InputManager instance for chaining.
|
|
148
|
+
*/ useFirst(handler, ctx) {
|
|
149
|
+
if (handler) {
|
|
150
|
+
this._middlewares.unshift({
|
|
151
|
+
handler,
|
|
152
|
+
ctx
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return this;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Unregister a previously registered middleware (interceptor) for input events.
|
|
159
|
+
*
|
|
160
|
+
* Removes the first middleware that matches both the given `handler` and `ctx`.
|
|
161
|
+
* If no matching middleware is found, this method is a no-op.
|
|
162
|
+
*
|
|
163
|
+
* Note: This only removes the specific pair of `(handler, ctx)` previously added
|
|
164
|
+
* via `use`. If the same `handler` was registered multiple times with different
|
|
165
|
+
* contexts, only the first exact match will be removed.
|
|
166
|
+
*
|
|
167
|
+
* @param handler - Middleware function to remove.
|
|
168
|
+
* @param ctx - `this` object that was associated with the `handler` when it was added.
|
|
169
|
+
* @returns The InputManager instance for chaining.
|
|
170
|
+
*/ unuse(handler, ctx) {
|
|
171
|
+
const index = this._middlewares.findIndex((h)=>h.handler === handler && h.ctx === ctx);
|
|
172
|
+
if (index >= 0) {
|
|
173
|
+
this._middlewares.splice(index, 1);
|
|
174
|
+
}
|
|
175
|
+
return this;
|
|
176
|
+
}
|
|
177
|
+
enableSystemContextMenu(enable) {
|
|
178
|
+
this._enableContextMenu = !!enable;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Utility middleware that logs the event type to the console.
|
|
182
|
+
*
|
|
183
|
+
* Can be used with `use(InputManager.log)` for quick diagnostics.
|
|
184
|
+
*
|
|
185
|
+
* @param ev - The DOM event being logged.
|
|
186
|
+
* @param type - Optional explicit event type; falls back to `ev.type`.
|
|
187
|
+
* @returns Always false (does not consume the event).
|
|
188
|
+
*/ static log(ev, type) {
|
|
189
|
+
console.log('Event log:', type ?? ev.type);
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
_callMiddlewares(ev, type) {
|
|
193
|
+
for (const mw of this._middlewares){
|
|
194
|
+
if (mw.handler.call(mw.ctx, ev, type ?? ev.type)) {
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
_getPointerCancelHandler() {
|
|
201
|
+
const that = this;
|
|
202
|
+
return function(ev) {
|
|
203
|
+
const eventData = that._getPointerEventData(ev.pointerId);
|
|
204
|
+
eventData.lastDown = false;
|
|
205
|
+
eventData.lastClick = false;
|
|
206
|
+
if (!that._callMiddlewares(ev)) {
|
|
207
|
+
that._app.dispatchEvent(ev.type, ev);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
_getContextMenuHandler() {
|
|
212
|
+
const that = this;
|
|
213
|
+
return function(ev) {
|
|
214
|
+
if (!that._enableContextMenu) {
|
|
215
|
+
ev.preventDefault();
|
|
216
|
+
}
|
|
217
|
+
if (!that._callMiddlewares(ev)) {
|
|
218
|
+
that._app.dispatchEvent(ev.type, ev);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
_getPointerMoveHander() {
|
|
223
|
+
const that = this;
|
|
224
|
+
return function(ev) {
|
|
225
|
+
const eventData = that._getPointerEventData(ev.pointerId);
|
|
226
|
+
eventData.lastMoveX = ev.offsetX;
|
|
227
|
+
eventData.lastMoveY = ev.offsetY;
|
|
228
|
+
if (!that._callMiddlewares(ev)) {
|
|
229
|
+
that._app.dispatchEvent(ev.type, ev);
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
_getPointerDownHandler() {
|
|
234
|
+
const that = this;
|
|
235
|
+
return function(ev) {
|
|
236
|
+
if (ev.pointerType === 'mouse') {
|
|
237
|
+
that._captureId = ev.pointerId;
|
|
238
|
+
that._app.options.canvas.setPointerCapture(ev.pointerId);
|
|
239
|
+
}
|
|
240
|
+
const eventData = that._getPointerEventData(ev.pointerId);
|
|
241
|
+
eventData.lastDown = true;
|
|
242
|
+
eventData.lastDownX = ev.offsetX;
|
|
243
|
+
eventData.lastDownY = ev.offsetY;
|
|
244
|
+
eventData.lastDownTime = Date.now();
|
|
245
|
+
that._app.focus();
|
|
246
|
+
if (!that._callMiddlewares(ev)) {
|
|
247
|
+
that._app.dispatchEvent(ev.type, ev);
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
_getPointerUpHandler() {
|
|
252
|
+
const that = this;
|
|
253
|
+
return function(ev) {
|
|
254
|
+
const eventData = that._getPointerEventData(ev.pointerId);
|
|
255
|
+
let emitClickEvent = false;
|
|
256
|
+
let emitDoubleClickEvent = false;
|
|
257
|
+
const now = Date.now();
|
|
258
|
+
if (eventData.lastDown) {
|
|
259
|
+
if (now <= eventData.lastDownTime + that._clickTimeTolerance) {
|
|
260
|
+
let deltaX = ev.offsetX - eventData.lastDownX;
|
|
261
|
+
let deltaY = ev.offsetY - eventData.lastDownY;
|
|
262
|
+
if (deltaX * deltaX + deltaY * deltaY <= that._clickDistTolerance) {
|
|
263
|
+
emitClickEvent = true;
|
|
264
|
+
if (eventData.lastClick && now <= eventData.lastClickTime + that._dblclickTimeTolerance) {
|
|
265
|
+
deltaX = ev.offsetX - eventData.lastClickX;
|
|
266
|
+
deltaY = ev.offsetY - eventData.lastClickY;
|
|
267
|
+
if (deltaX * deltaX + deltaY * deltaY <= that._dblclickDistTolerance) {
|
|
268
|
+
emitDoubleClickEvent = true;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
eventData.lastDown = false;
|
|
275
|
+
eventData.lastMoveX = ev.offsetX;
|
|
276
|
+
eventData.lastMoveY = ev.offsetY;
|
|
277
|
+
if (!that._callMiddlewares(ev)) {
|
|
278
|
+
that._app.dispatchEvent(ev.type, ev);
|
|
279
|
+
}
|
|
280
|
+
if (emitClickEvent) {
|
|
281
|
+
if (!that._callMiddlewares(ev, 'click')) {
|
|
282
|
+
that._app.dispatchEvent('click', ev);
|
|
283
|
+
}
|
|
284
|
+
if (emitDoubleClickEvent) {
|
|
285
|
+
if (!that._callMiddlewares(ev, 'dblclick')) {
|
|
286
|
+
that._app.dispatchEvent('dblclick', ev);
|
|
287
|
+
}
|
|
288
|
+
eventData.lastClick = false;
|
|
289
|
+
} else {
|
|
290
|
+
eventData.lastClick = true;
|
|
291
|
+
eventData.lastClickX = ev.offsetX;
|
|
292
|
+
eventData.lastClickY = ev.offsetY;
|
|
293
|
+
eventData.lastClickTime = now;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
if (ev.pointerType === 'mouse' && that._captureId === ev.pointerId) {
|
|
297
|
+
that._app.options.canvas.releasePointerCapture(ev.pointerId);
|
|
298
|
+
that._captureId = -1;
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
_getKeyboardHandler() {
|
|
303
|
+
const that = this;
|
|
304
|
+
return function(ev) {
|
|
305
|
+
if (!that._callMiddlewares(ev)) {
|
|
306
|
+
that._app.dispatchEvent(ev.type, ev);
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
_getDragHandler() {
|
|
311
|
+
const that = this;
|
|
312
|
+
return function(ev) {
|
|
313
|
+
if (!that._callMiddlewares(ev)) {
|
|
314
|
+
that._app.dispatchEvent(ev.type, ev);
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
_getWheelHandler() {
|
|
319
|
+
const that = this;
|
|
320
|
+
return function(ev) {
|
|
321
|
+
if (!that._callMiddlewares(ev)) {
|
|
322
|
+
that._app.dispatchEvent(ev.type);
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
_getCompositionHandler() {
|
|
327
|
+
const that = this;
|
|
328
|
+
return function(ev) {
|
|
329
|
+
if (!that._callMiddlewares(ev)) {
|
|
330
|
+
that._app.dispatchEvent(ev.type);
|
|
331
|
+
}
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
_getPointerEventData(pointerId) {
|
|
335
|
+
return this._lastEventDatas[pointerId] ?? (this._lastEventDatas[pointerId] = {
|
|
336
|
+
lastClick: false,
|
|
337
|
+
lastClickX: 0,
|
|
338
|
+
lastClickY: 0,
|
|
339
|
+
lastClickTime: 0,
|
|
340
|
+
lastDown: false,
|
|
341
|
+
lastDownX: 0,
|
|
342
|
+
lastDownY: 0,
|
|
343
|
+
lastDownTime: 0,
|
|
344
|
+
lastMoveX: 0,
|
|
345
|
+
lastMoveY: 0
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
export { InputManager };
|
|
351
|
+
//# sourceMappingURL=inputmgr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputmgr.js","sources":["../../src/app/inputmgr.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport type { Application } from '../app';\r\n\r\ntype PointerEventData = {\r\n lastClick: boolean;\r\n lastClickX: number;\r\n lastClickY: number;\r\n lastClickTime: number;\r\n lastDown: boolean;\r\n lastDownX: number;\r\n lastDownY: number;\r\n lastDownTime: number;\r\n lastMoveX: number;\r\n lastMoveY: number;\r\n};\r\n\r\ntype PointerEventHandler = (this: HTMLElement, ev: PointerEvent) => any;\r\ntype KeyboardEventHandler = (this: HTMLElement, ev: KeyboardEvent) => any;\r\ntype DragEventHandler = (this: HTMLElement, ev: DragEvent) => any;\r\ntype WheelEventHandler = (this: HTMLElement, ev: WheelEvent) => any;\r\ntype CompositionEventHandler = (this: HTMLElement, ev: CompositionEvent) => any;\r\n\r\n/**\r\n * Input handler middleware type.\r\n *\r\n * Return true to indicate the event has been handled and should not be forwarded\r\n * to the Application's observable event system.\r\n *\r\n * @public\r\n */\r\nexport type InputEventHandler = (ev: Event, type?: string) => boolean;\r\n\r\n/**\r\n * Input manager\r\n *\r\n * Centralizes DOM input event handling for the engine:\r\n * - Subscribes to pointer/keyboard/drag/wheel/composition events on the target canvas element.\r\n * - Normalizes click and double-click detection using distance/time tolerances.\r\n * - Supports a middleware chain (`use`) to intercept and optionally consume events\r\n * before they are dispatched to the Application's observable event map.\r\n * - Manages pointer capture for mouse interactions to ensure consistent up/move delivery.\r\n *\r\n * Lifecycle:\r\n * - Call `start()` to attach all event listeners; `stop()` to remove them.\r\n *\r\n * @public\r\n */\r\nexport class InputManager {\r\n private readonly _app: Application;\r\n private readonly _target: HTMLElement;\r\n private _started: boolean;\r\n private readonly _clickDistTolerance: number;\r\n private readonly _clickTimeTolerance: number;\r\n private readonly _dblclickDistTolerance: number;\r\n private readonly _dblclickTimeTolerance: number;\r\n private readonly _pointerDownHandler: PointerEventHandler;\r\n private readonly _pointerUpHandler: PointerEventHandler;\r\n private readonly _pointerMoveHandler: PointerEventHandler;\r\n private readonly _pointerCancelHandler: PointerEventHandler;\r\n private readonly _contextMenuHandler: PointerEventHandler;\r\n private readonly _keyboardHandler: KeyboardEventHandler;\r\n private readonly _dragHandler: DragEventHandler;\r\n private readonly _wheelHandler: WheelEventHandler;\r\n private readonly _compositionHandler: CompositionEventHandler;\r\n private _enableContextMenu: boolean;\r\n private _captureId: number;\r\n private readonly _middlewares: { handler: InputEventHandler; ctx: unknown }[];\r\n private _lastEventDatas: PointerEventData[];\r\n /**\r\n * Creates an instance of InputManager bound to the given application/canvas.\r\n *\r\n * @param app - The owning Application instance.\r\n */\r\n constructor(app: Application) {\r\n this._app = app;\r\n this._target = app.options.canvas;\r\n this._started = false;\r\n this._clickDistTolerance = 4 * 4;\r\n this._clickTimeTolerance = 400;\r\n this._dblclickDistTolerance = 4 * 4;\r\n this._dblclickTimeTolerance = 400;\r\n this._lastEventDatas = [];\r\n this._enableContextMenu = false;\r\n this._pointerDownHandler = this._getPointerDownHandler();\r\n this._pointerUpHandler = this._getPointerUpHandler();\r\n this._pointerMoveHandler = this._getPointerMoveHander();\r\n this._pointerCancelHandler = this._getPointerCancelHandler();\r\n this._contextMenuHandler = this._getContextMenuHandler();\r\n this._keyboardHandler = this._getKeyboardHandler();\r\n this._dragHandler = this._getDragHandler();\r\n this._wheelHandler = this._getWheelHandler();\r\n this._compositionHandler = this._getCompositionHandler();\r\n this._captureId = -1;\r\n this._middlewares = [];\r\n }\r\n /**\r\n * Begin listening to DOM events on the target element.\r\n *\r\n * Idempotent: additional calls have no effect after the first successful start.\r\n *\r\n * @internal\r\n */\r\n start() {\r\n if (!this._started) {\r\n this._started = true;\r\n this._target.addEventListener('pointerdown', this._pointerDownHandler);\r\n this._target.addEventListener('pointerup', this._pointerUpHandler);\r\n this._target.addEventListener('pointermove', this._pointerMoveHandler);\r\n this._target.addEventListener('pointercancel', this._pointerCancelHandler);\r\n this._target.addEventListener('contextmenu', this._contextMenuHandler);\r\n this._target.addEventListener('keydown', this._keyboardHandler);\r\n this._target.addEventListener('keyup', this._keyboardHandler);\r\n this._target.addEventListener('keypress', this._keyboardHandler);\r\n this._target.addEventListener('drag', this._dragHandler);\r\n this._target.addEventListener('dragenter', this._dragHandler);\r\n this._target.addEventListener('dragleave', this._dragHandler);\r\n this._target.addEventListener('dragstart', this._dragHandler);\r\n this._target.addEventListener('dragend', this._dragHandler);\r\n this._target.addEventListener('dragover', this._dragHandler);\r\n this._target.addEventListener('drop', this._dragHandler);\r\n this._target.addEventListener('wheel', this._wheelHandler);\r\n this._target.addEventListener('compositionstart', this._compositionHandler);\r\n this._target.addEventListener('compositionupdate', this._compositionHandler);\r\n this._target.addEventListener('compositionend', this._compositionHandler);\r\n }\r\n }\r\n /**\r\n * Stop listening to DOM events and clear per-pointer cached state.\r\n *\r\n * Idempotent: does nothing if not started.\r\n *\r\n * @internal\r\n */\r\n stop() {\r\n if (this._started) {\r\n this._started = false;\r\n this._target.removeEventListener('pointerdown', this._pointerDownHandler);\r\n this._target.removeEventListener('pointerup', this._pointerUpHandler);\r\n this._target.removeEventListener('pointermove', this._pointerMoveHandler);\r\n this._target.removeEventListener('pointercancel', this._pointerCancelHandler);\r\n this._target.removeEventListener('contextmenu', this._contextMenuHandler);\r\n this._target.removeEventListener('keydown', this._keyboardHandler);\r\n this._target.removeEventListener('keyup', this._keyboardHandler);\r\n this._target.removeEventListener('keypress', this._keyboardHandler);\r\n this._target.removeEventListener('drag', this._dragHandler);\r\n this._target.removeEventListener('dragenter', this._dragHandler);\r\n this._target.removeEventListener('dragleave', this._dragHandler);\r\n this._target.removeEventListener('dragstart', this._dragHandler);\r\n this._target.removeEventListener('dragend', this._dragHandler);\r\n this._target.removeEventListener('dragover', this._dragHandler);\r\n this._target.removeEventListener('drop', this._dragHandler);\r\n this._target.removeEventListener('wheel', this._wheelHandler);\r\n this._target.removeEventListener('compositionstart', this._compositionHandler);\r\n this._target.removeEventListener('compositionupdate', this._compositionHandler);\r\n this._target.removeEventListener('compositionend', this._compositionHandler);\r\n this._lastEventDatas = [];\r\n }\r\n }\r\n /**\r\n * Register a middleware (interceptor) for input events.\r\n *\r\n * Order matters: middlewares are invoked in the order they were added until one returns true.\r\n * If a middleware returns true, the event is considered handled and will not be dispatched\r\n * to the Application's observers.\r\n *\r\n * @param handler - Middleware function to add.\r\n * @param ctx - `this` object for handler\r\n * @returns The InputManager instance for chaining.\r\n */\r\n use(handler: Nullable<InputEventHandler>, ctx?: unknown) {\r\n if (handler) {\r\n this._middlewares.push({ handler, ctx });\r\n }\r\n return this;\r\n }\r\n /**\r\n * Register a middleware (interceptor) for input events at the first order.\r\n *\r\n * @param handler - Middleware function to add.\r\n * @param ctx - `this` object for handler\r\n * @returns The InputManager instance for chaining.\r\n */\r\n useFirst(handler: Nullable<InputEventHandler>, ctx?: unknown) {\r\n if (handler) {\r\n this._middlewares.unshift({ handler, ctx });\r\n }\r\n return this;\r\n }\r\n /**\r\n * Unregister a previously registered middleware (interceptor) for input events.\r\n *\r\n * Removes the first middleware that matches both the given `handler` and `ctx`.\r\n * If no matching middleware is found, this method is a no-op.\r\n *\r\n * Note: This only removes the specific pair of `(handler, ctx)` previously added\r\n * via `use`. If the same `handler` was registered multiple times with different\r\n * contexts, only the first exact match will be removed.\r\n *\r\n * @param handler - Middleware function to remove.\r\n * @param ctx - `this` object that was associated with the `handler` when it was added.\r\n * @returns The InputManager instance for chaining.\r\n */\r\n unuse(handler: InputEventHandler, ctx?: unknown) {\r\n const index = this._middlewares.findIndex((h) => h.handler === handler && h.ctx === ctx);\r\n if (index >= 0) {\r\n this._middlewares.splice(index, 1);\r\n }\r\n return this;\r\n }\r\n enableSystemContextMenu(enable: boolean) {\r\n this._enableContextMenu = !!enable;\r\n }\r\n /**\r\n * Utility middleware that logs the event type to the console.\r\n *\r\n * Can be used with `use(InputManager.log)` for quick diagnostics.\r\n *\r\n * @param ev - The DOM event being logged.\r\n * @param type - Optional explicit event type; falls back to `ev.type`.\r\n * @returns Always false (does not consume the event).\r\n */\r\n static log(ev: Event, type?: string) {\r\n console.log('Event log:', type ?? ev.type);\r\n return false;\r\n }\r\n private _callMiddlewares(\r\n ev: PointerEvent | WheelEvent | KeyboardEvent | DragEvent | CompositionEvent,\r\n type?: string\r\n ) {\r\n for (const mw of this._middlewares) {\r\n if (mw.handler.call(mw.ctx, ev, type ?? ev.type)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n private _getPointerCancelHandler() {\r\n const that = this;\r\n return function (ev: PointerEvent) {\r\n const eventData = that._getPointerEventData(ev.pointerId);\r\n eventData.lastDown = false;\r\n eventData.lastClick = false;\r\n if (!that._callMiddlewares(ev)) {\r\n that._app.dispatchEvent(ev.type as any, ev);\r\n }\r\n };\r\n }\r\n private _getContextMenuHandler() {\r\n const that = this;\r\n return function (ev: PointerEvent) {\r\n if (!that._enableContextMenu) {\r\n ev.preventDefault();\r\n }\r\n if (!that._callMiddlewares(ev)) {\r\n that._app.dispatchEvent(ev.type as any, ev);\r\n }\r\n };\r\n }\r\n private _getPointerMoveHander() {\r\n const that = this;\r\n return function (ev: PointerEvent) {\r\n const eventData = that._getPointerEventData(ev.pointerId);\r\n eventData.lastMoveX = ev.offsetX;\r\n eventData.lastMoveY = ev.offsetY;\r\n if (!that._callMiddlewares(ev)) {\r\n that._app.dispatchEvent(ev.type as any, ev);\r\n }\r\n };\r\n }\r\n private _getPointerDownHandler() {\r\n const that = this;\r\n return function (ev: PointerEvent) {\r\n if (ev.pointerType === 'mouse') {\r\n that._captureId = ev.pointerId;\r\n that._app.options.canvas.setPointerCapture(ev.pointerId);\r\n }\r\n const eventData = that._getPointerEventData(ev.pointerId);\r\n eventData.lastDown = true;\r\n eventData.lastDownX = ev.offsetX;\r\n eventData.lastDownY = ev.offsetY;\r\n eventData.lastDownTime = Date.now();\r\n that._app.focus();\r\n if (!that._callMiddlewares(ev)) {\r\n that._app.dispatchEvent(ev.type as any, ev);\r\n }\r\n };\r\n }\r\n private _getPointerUpHandler() {\r\n const that = this;\r\n return function (ev: PointerEvent) {\r\n const eventData = that._getPointerEventData(ev.pointerId);\r\n let emitClickEvent = false;\r\n let emitDoubleClickEvent = false;\r\n const now = Date.now();\r\n if (eventData.lastDown) {\r\n if (now <= eventData.lastDownTime + that._clickTimeTolerance) {\r\n let deltaX = ev.offsetX - eventData.lastDownX;\r\n let deltaY = ev.offsetY - eventData.lastDownY;\r\n if (deltaX * deltaX + deltaY * deltaY <= that._clickDistTolerance) {\r\n emitClickEvent = true;\r\n if (eventData.lastClick && now <= eventData.lastClickTime + that._dblclickTimeTolerance) {\r\n deltaX = ev.offsetX - eventData.lastClickX;\r\n deltaY = ev.offsetY - eventData.lastClickY;\r\n if (deltaX * deltaX + deltaY * deltaY <= that._dblclickDistTolerance) {\r\n emitDoubleClickEvent = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n eventData.lastDown = false;\r\n eventData.lastMoveX = ev.offsetX;\r\n eventData.lastMoveY = ev.offsetY;\r\n if (!that._callMiddlewares(ev)) {\r\n that._app.dispatchEvent(ev.type as any, ev);\r\n }\r\n if (emitClickEvent) {\r\n if (!that._callMiddlewares(ev, 'click')) {\r\n that._app.dispatchEvent('click', ev);\r\n }\r\n if (emitDoubleClickEvent) {\r\n if (!that._callMiddlewares(ev, 'dblclick')) {\r\n that._app.dispatchEvent('dblclick', ev);\r\n }\r\n eventData.lastClick = false;\r\n } else {\r\n eventData.lastClick = true;\r\n eventData.lastClickX = ev.offsetX;\r\n eventData.lastClickY = ev.offsetY;\r\n eventData.lastClickTime = now;\r\n }\r\n }\r\n if (ev.pointerType === 'mouse' && that._captureId === ev.pointerId) {\r\n that._app.options.canvas.releasePointerCapture(ev.pointerId);\r\n that._captureId = -1;\r\n }\r\n };\r\n }\r\n private _getKeyboardHandler() {\r\n const that = this;\r\n return function (ev: KeyboardEvent) {\r\n if (!that._callMiddlewares(ev)) {\r\n that._app.dispatchEvent(ev.type as any, ev);\r\n }\r\n };\r\n }\r\n private _getDragHandler() {\r\n const that = this;\r\n return function (ev: DragEvent) {\r\n if (!that._callMiddlewares(ev)) {\r\n that._app.dispatchEvent(ev.type as any, ev);\r\n }\r\n };\r\n }\r\n private _getWheelHandler() {\r\n const that = this;\r\n return function (ev: WheelEvent) {\r\n if (!that._callMiddlewares(ev)) {\r\n that._app.dispatchEvent(ev.type as any);\r\n }\r\n };\r\n }\r\n private _getCompositionHandler() {\r\n const that = this;\r\n return function (ev: CompositionEvent) {\r\n if (!that._callMiddlewares(ev)) {\r\n that._app.dispatchEvent(ev.type as any);\r\n }\r\n };\r\n }\r\n private _getPointerEventData(pointerId: number) {\r\n return (\r\n this._lastEventDatas[pointerId] ??\r\n (this._lastEventDatas[pointerId] = {\r\n lastClick: false,\r\n lastClickX: 0,\r\n lastClickY: 0,\r\n lastClickTime: 0,\r\n lastDown: false,\r\n lastDownX: 0,\r\n lastDownY: 0,\r\n lastDownTime: 0,\r\n lastMoveX: 0,\r\n lastMoveY: 0\r\n })\r\n );\r\n }\r\n}\r\n"],"names":["InputManager","_app","_target","_started","_clickDistTolerance","_clickTimeTolerance","_dblclickDistTolerance","_dblclickTimeTolerance","_pointerDownHandler","_pointerUpHandler","_pointerMoveHandler","_pointerCancelHandler","_contextMenuHandler","_keyboardHandler","_dragHandler","_wheelHandler","_compositionHandler","_enableContextMenu","_captureId","_middlewares","_lastEventDatas","app","options","canvas","_getPointerDownHandler","_getPointerUpHandler","_getPointerMoveHander","_getPointerCancelHandler","_getContextMenuHandler","_getKeyboardHandler","_getDragHandler","_getWheelHandler","_getCompositionHandler","start","addEventListener","stop","removeEventListener","use","handler","ctx","push","useFirst","unshift","unuse","index","findIndex","h","splice","enableSystemContextMenu","enable","log","ev","type","console","_callMiddlewares","mw","call","that","eventData","_getPointerEventData","pointerId","lastDown","lastClick","dispatchEvent","preventDefault","lastMoveX","offsetX","lastMoveY","offsetY","pointerType","setPointerCapture","lastDownX","lastDownY","lastDownTime","Date","now","focus","emitClickEvent","emitDoubleClickEvent","deltaX","deltaY","lastClickTime","lastClickX","lastClickY","releasePointerCapture"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for runtime scripts that can be attached to a host object.
|
|
3
|
+
*
|
|
4
|
+
* Lifecycle overview:
|
|
5
|
+
* - onCreated(): Called once per script instance right after construction,
|
|
6
|
+
* before any host is attached.
|
|
7
|
+
* - onAttached(host): Called each time this instance is attached to a host.
|
|
8
|
+
* - onUpdate(deltaTime, elapsedTime): Called every frame/tick while attached.
|
|
9
|
+
* - onDetached(host): Called when detached from a host.
|
|
10
|
+
* - onDestroy(): Called when the instance is no longer attached to any host
|
|
11
|
+
* and is about to be discarded.
|
|
12
|
+
*
|
|
13
|
+
* Notes:
|
|
14
|
+
* - Hooks may return a Promise to perform asynchronous work (e.g., asset loading).
|
|
15
|
+
* - The generic host type `T` can be `IDisposable` or `null`. If `null`, the script
|
|
16
|
+
* may operate without a concrete host.
|
|
17
|
+
*
|
|
18
|
+
* @typeParam T - The host type that this script attaches to. Typically implements `IDisposable`.
|
|
19
|
+
* @public
|
|
20
|
+
*/ class RuntimeScript {
|
|
21
|
+
/**
|
|
22
|
+
* Called once after construction, before the first attachment to a host.
|
|
23
|
+
*
|
|
24
|
+
* Use this to initialize internal state, allocate resources, or kick off
|
|
25
|
+
* asynchronous loading needed by the script.
|
|
26
|
+
*
|
|
27
|
+
* @returns Optionally a Promise to await initialization.
|
|
28
|
+
*/ onCreated() {}
|
|
29
|
+
/**
|
|
30
|
+
* Called when the script is attached to a host.
|
|
31
|
+
*
|
|
32
|
+
* This may be called multiple times if the same instance attaches to different
|
|
33
|
+
* hosts over its lifetime.
|
|
34
|
+
*
|
|
35
|
+
* @param _host - The host the script is being attached to.
|
|
36
|
+
* @returns Optionally a Promise to await asynchronous setup.
|
|
37
|
+
*/ onAttached(_host) {}
|
|
38
|
+
/**
|
|
39
|
+
* Called every update/tick while the script is active.
|
|
40
|
+
*
|
|
41
|
+
* Typical usage includes per-frame logic, animation, and input handling.
|
|
42
|
+
*
|
|
43
|
+
* @param _deltaTime - Time since last update in seconds.
|
|
44
|
+
* @param _elapsedTime - Total elapsed time since start in seconds.
|
|
45
|
+
*/ onUpdate(_deltaTime, _elapsedTime) {}
|
|
46
|
+
/**
|
|
47
|
+
* Called when the script is detached from a host.
|
|
48
|
+
*
|
|
49
|
+
* Use this to stop host-specific behaviors and release host-bound resources.
|
|
50
|
+
*
|
|
51
|
+
* @param _host - The host the script is being detached from.
|
|
52
|
+
*/ onDetached(_host) {}
|
|
53
|
+
/**
|
|
54
|
+
* Called when the script has no remaining hosts and is about to be discarded.
|
|
55
|
+
*
|
|
56
|
+
* Use this to release global resources and finalize the script's lifecycle.
|
|
57
|
+
* This is the terminal lifecycle hook for an instance.
|
|
58
|
+
*/ onDestroy() {}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export { RuntimeScript };
|
|
62
|
+
//# sourceMappingURL=runtimescript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimescript.js","sources":["../../src/app/runtimescript.ts"],"sourcesContent":["import type { IDisposable, Nullable } from '@zephyr3d/base';\r\n\r\n/**\r\n * Base class for runtime scripts that can be attached to a host object.\r\n *\r\n * Lifecycle overview:\r\n * - onCreated(): Called once per script instance right after construction,\r\n * before any host is attached.\r\n * - onAttached(host): Called each time this instance is attached to a host.\r\n * - onUpdate(deltaTime, elapsedTime): Called every frame/tick while attached.\r\n * - onDetached(host): Called when detached from a host.\r\n * - onDestroy(): Called when the instance is no longer attached to any host\r\n * and is about to be discarded.\r\n *\r\n * Notes:\r\n * - Hooks may return a Promise to perform asynchronous work (e.g., asset loading).\r\n * - The generic host type `T` can be `IDisposable` or `null`. If `null`, the script\r\n * may operate without a concrete host.\r\n *\r\n * @typeParam T - The host type that this script attaches to. Typically implements `IDisposable`.\r\n * @public\r\n */\r\nexport class RuntimeScript<T extends IDisposable | null> {\r\n /**\r\n * Called once after construction, before the first attachment to a host.\r\n *\r\n * Use this to initialize internal state, allocate resources, or kick off\r\n * asynchronous loading needed by the script.\r\n *\r\n * @returns Optionally a Promise to await initialization.\r\n */\r\n onCreated(): void | Promise<void> {}\r\n /**\r\n * Called when the script is attached to a host.\r\n *\r\n * This may be called multiple times if the same instance attaches to different\r\n * hosts over its lifetime.\r\n *\r\n * @param _host - The host the script is being attached to.\r\n * @returns Optionally a Promise to await asynchronous setup.\r\n */\r\n onAttached(_host: Nullable<T>): void | Promise<void> {}\r\n /**\r\n * Called every update/tick while the script is active.\r\n *\r\n * Typical usage includes per-frame logic, animation, and input handling.\r\n *\r\n * @param _deltaTime - Time since last update in seconds.\r\n * @param _elapsedTime - Total elapsed time since start in seconds.\r\n */\r\n onUpdate(_deltaTime: number, _elapsedTime: number) {}\r\n /**\r\n * Called when the script is detached from a host.\r\n *\r\n * Use this to stop host-specific behaviors and release host-bound resources.\r\n *\r\n * @param _host - The host the script is being detached from.\r\n */\r\n onDetached(_host: T) {}\r\n /**\r\n * Called when the script has no remaining hosts and is about to be discarded.\r\n *\r\n * Use this to release global resources and finalize the script's lifecycle.\r\n * This is the terminal lifecycle hook for an instance.\r\n */\r\n onDestroy() {}\r\n}\r\n"],"names":["RuntimeScript","onCreated","onAttached","_host","onUpdate","_deltaTime","_elapsedTime","onDetached","onDestroy"],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;AAmBC,IACM,MAAMA,aAAAA,CAAAA;AACX;;;;;;;AAOC,MACDC,YAAkC;AAClC;;;;;;;;MASAC,UAAAA,CAAWC,KAAkB,EAAwB;AACrD;;;;;;;AAOC,MACDC,QAASC,CAAAA,UAAkB,EAAEC,YAAoB,EAAE;AACnD;;;;;;MAOAC,UAAAA,CAAWJ,KAAQ,EAAE;AACrB;;;;;AAKC,MACDK,YAAY;AACd;;;;"}
|