@zephyr3d/scene 0.9.27 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -27
- package/dist/animation/animation_bank.js +634 -0
- package/dist/animation/animation_bank.js.map +1 -0
- package/dist/animation/animation_bank_gpu.js +256 -0
- package/dist/animation/animation_bank_gpu.js.map +1 -0
- package/dist/animation/animationset.js +54 -0
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_component.js +406 -0
- package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
- package/dist/animation/cloth/gpu_cloth_system.js +332 -202
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/gpu_animation_driver.js +289 -0
- package/dist/animation/gpu_animation_driver.js.map +1 -0
- package/dist/animation/joint_dynamics/collision.js +112 -1
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +6 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +50 -12
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/skeleton.js +279 -55
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skin_palette_atlas.js +252 -0
- package/dist/animation/skin_palette_atlas.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +298 -38
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +2 -0
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +159 -21
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_solver.js +173 -0
- package/dist/animation/spring/spring_solver.js.map +1 -0
- package/dist/animation/spring/spring_system.js +249 -24
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +32 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/app.js +26 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +86 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/gamepad.js +191 -0
- package/dist/app/gamepad.js.map +1 -0
- package/dist/app/inputactions.js +271 -0
- package/dist/app/inputactions.js.map +1 -0
- package/dist/app/inputmgr.js +331 -22
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/loading.js +138 -0
- package/dist/app/loading.js.map +1 -0
- package/dist/app/pipelinecache.js +209 -0
- package/dist/app/pipelinecache.js.map +1 -0
- package/dist/app/runtimescript.js +25 -0
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/scriptingsystem.js +54 -0
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +7 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/asset_manifest.js +59 -0
- package/dist/asset/asset_manifest.js.map +1 -0
- package/dist/asset/asset_preload.js +258 -0
- package/dist/asset/asset_preload.js.map +1 -0
- package/dist/asset/assetmanager.js +117 -65
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/dist/asset/loaders/ktx2/basis_location.js +17 -0
- package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
- package/dist/asset/mesh_lod_builder.js +104 -0
- package/dist/asset/mesh_lod_builder.js.map +1 -0
- package/dist/asset/mesh_settings.js +111 -0
- package/dist/asset/mesh_settings.js.map +1 -0
- package/dist/asset/meshopt_decoder.js +18 -0
- package/dist/asset/meshopt_decoder.js.map +1 -0
- package/dist/asset/meshopt_simplifier.js +26 -0
- package/dist/asset/meshopt_simplifier.js.map +1 -0
- package/dist/asset/model.js +171 -1
- package/dist/asset/model.js.map +1 -1
- package/dist/asset/texture_settings.js +231 -0
- package/dist/asset/texture_settings.js.map +1 -0
- package/dist/asset/zmsh_binary.js +131 -0
- package/dist/asset/zmsh_binary.js.map +1 -0
- package/dist/asset/zsdf_binary.js +111 -0
- package/dist/asset/zsdf_binary.js.map +1 -0
- package/dist/blitter/bilateralblur.js +1 -2
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/gaussianblur.js +1 -6
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +31 -10
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +104 -178
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/follow.js +342 -0
- package/dist/camera/follow.js.map +1 -0
- package/dist/camera/fps.js +9 -7
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +46 -19
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +25436 -15990
- package/dist/index.js +65 -11
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +3 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/eye.js +1 -1
- package/dist/material/eye.js.map +1 -1
- package/dist/material/hair.js +2 -3
- package/dist/material/hair.js.map +1 -1
- package/dist/material/lambert.js +4 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +66 -4
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +118 -45
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +191 -83
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +31 -206
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +1 -1
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrmr.js +3 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +3 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/sdf_debug.js +78 -0
- package/dist/material/sdf_debug.js.map +1 -0
- package/dist/material/shader/helper.js +333 -191
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +204 -43
- package/dist/material/shader/terrain_blend.js.map +1 -1
- package/dist/material/skin.js +331 -297
- package/dist/material/skin.js.map +1 -1
- package/dist/material/skinprofile.js +1058 -0
- package/dist/material/skinprofile.js.map +1 -0
- package/dist/material/sss.js +353 -0
- package/dist/material/sss.js.map +1 -0
- package/dist/material/sss_kernel.js +265 -0
- package/dist/material/sss_kernel.js.map +1 -0
- package/dist/material/sssprofile.js +879 -0
- package/dist/material/sssprofile.js.map +1 -0
- package/dist/material/subsurfaceprofile.js +4 -8
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/terrain-cm.js +464 -188
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js +3 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +1261 -1438
- package/dist/material/water.js.map +1 -1
- package/dist/node_modules/meshoptimizer/LICENSE +21 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
- package/dist/physics/character.js +226 -0
- package/dist/physics/character.js.map +1 -0
- package/dist/physics/collider.js +209 -0
- package/dist/physics/collider.js.map +1 -0
- package/dist/physics/events.js +79 -0
- package/dist/physics/events.js.map +1 -0
- package/dist/physics/joint.js +272 -0
- package/dist/physics/joint.js.map +1 -0
- package/dist/physics/node_physics.js +234 -0
- package/dist/physics/node_physics.js.map +1 -0
- package/dist/physics/part.js +91 -0
- package/dist/physics/part.js.map +1 -0
- package/dist/physics/rigid_body.js +379 -0
- package/dist/physics/rigid_body.js.map +1 -0
- package/dist/physics/vehicle.js +335 -0
- package/dist/physics/vehicle.js.map +1 -0
- package/dist/physics/world.js +25 -0
- package/dist/physics/world.js.map +1 -0
- package/dist/posteffect/bloom.js +49 -14
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/motionblur.js +106 -106
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/postsss.js +572 -0
- package/dist/posteffect/postsss.js.map +1 -0
- package/dist/posteffect/sao.js +2 -6
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +605 -355
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +91 -162
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -11
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +4 -13
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +1 -0
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +3 -2
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +179 -64
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +958 -224
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +25 -5
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/debug_views.js +37 -0
- package/dist/render/debug_views.js.map +1 -0
- package/dist/render/depthpass.js +5 -1
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +53 -6
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +5 -5
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +196 -113
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +5 -10
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +247 -157
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +16 -38
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/gi/probe_volume.js +1334 -0
- package/dist/render/gi/probe_volume.js.map +1 -0
- package/dist/render/gi/scene_gi.js +282 -0
- package/dist/render/gi/scene_gi.js.map +1 -0
- package/dist/render/gi/voxel_atlas.js +198 -0
- package/dist/render/gi/voxel_atlas.js.map +1 -0
- package/dist/render/gi/voxel_lighting.js +652 -0
- package/dist/render/gi/voxel_lighting.js.map +1 -0
- package/dist/render/gi/voxel_scene.js +642 -0
- package/dist/render/gi/voxel_scene.js.map +1 -0
- package/dist/render/gi/voxelize_pass.js +223 -0
- package/dist/render/gi/voxelize_pass.js.map +1 -0
- package/dist/render/globalbindgroup_allocator.js +3 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/gpu_picking.js +9 -36
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/instance_culling.js +499 -0
- package/dist/render/instance_culling.js.map +1 -0
- package/dist/render/lightpass.js +19 -8
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/lod.js +46 -0
- package/dist/render/lod.js.map +1 -0
- package/dist/render/primitive.js +301 -9
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/primitive_readback.js +209 -0
- package/dist/render/primitive_readback.js.map +1 -0
- package/dist/render/render_queue.js +162 -11
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +10 -7
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +14 -1
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/executor.js +136 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +272 -55
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_graph_context.js +41 -0
- package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
- package/dist/render/rendergraph/scene_render_context.js +31 -2
- package/dist/render/rendergraph/scene_render_context.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +28 -5
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sdf/box_allocator.js +98 -0
- package/dist/render/sdf/box_allocator.js.map +1 -0
- package/dist/render/sdf/global_sdf.js +865 -0
- package/dist/render/sdf/global_sdf.js.map +1 -0
- package/dist/render/sdf/scene_sdf.js +562 -0
- package/dist/render/sdf/scene_sdf.js.map +1 -0
- package/dist/render/sdf/sdf_atlas.js +227 -0
- package/dist/render/sdf/sdf_atlas.js.map +1 -0
- package/dist/render/sdf/sdf_programs.js +42 -0
- package/dist/render/sdf/sdf_programs.js.map +1 -0
- package/dist/render/sdf/sdf_view.js +199 -0
- package/dist/render/sdf/sdf_view.js.map +1 -0
- package/dist/render/sdf/waterline.js +610 -0
- package/dist/render/sdf/waterline.js.map +1 -0
- package/dist/render/shadow_mask_pass.js +142 -25
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/shore_wave_generator.js +1193 -0
- package/dist/render/shore_wave_generator.js.map +1 -0
- package/dist/render/sky.js +516 -86
- package/dist/render/sky.js.map +1 -1
- package/dist/render/transmission_thickness_pass.js +477 -0
- package/dist/render/transmission_thickness_pass.js.map +1 -0
- package/dist/render/underwater.js +58 -158
- package/dist/render/underwater.js.map +1 -1
- package/dist/render/virtualtexture/virtual_texture.js +1214 -0
- package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_common.js +472 -0
- package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
- package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
- package/dist/render/volumetric_cloud/debug_view.js +131 -0
- package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
- package/dist/render/volumetric_cloud/resources.js +380 -0
- package/dist/render/volumetric_cloud/resources.js.map +1 -0
- package/dist/render/volumetric_cloud/sky_cache.js +380 -0
- package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
- package/dist/render/water_caustics.js +134 -319
- package/dist/render/water_caustics.js.map +1 -1
- package/dist/render/water_foam.js +627 -0
- package/dist/render/water_foam.js.map +1 -0
- package/dist/render/water_interaction.js +1795 -0
- package/dist/render/water_interaction.js.map +1 -0
- package/dist/render/weightedblended_oit.js +3 -3
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +9 -4
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +108 -12
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +28 -7
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/foliage.js +1020 -0
- package/dist/scene/foliage.js.map +1 -0
- package/dist/scene/foliage_buckets.js +147 -0
- package/dist/scene/foliage_buckets.js.map +1 -0
- package/dist/scene/foliage_mask.js +358 -0
- package/dist/scene/foliage_mask.js.map +1 -0
- package/dist/scene/hair.js +15 -4
- package/dist/scene/hair.js.map +1 -1
- package/dist/scene/light.js +179 -13
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +327 -45
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +9 -3
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +9 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +8 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/physics_settings.js +157 -0
- package/dist/scene/physics_settings.js.map +1 -0
- package/dist/scene/scene.js +190 -44
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +147 -6
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
- package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +881 -42
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grass_gpu.js +929 -0
- package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +180 -9
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +465 -36
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
- package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
- package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
- package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
- package/dist/scene/update_queue.js +54 -0
- package/dist/scene/update_queue.js.map +1 -0
- package/dist/scene/water.js +633 -268
- package/dist/scene/water.js.map +1 -1
- package/dist/scene/water_surface_sampler.js +324 -0
- package/dist/scene/water_surface_sampler.js.map +1 -0
- package/dist/scene/wind.js +317 -0
- package/dist/scene/wind.js.map +1 -0
- package/dist/shaders/atmosphere.js +388 -166
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +100 -32
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/gi.js +365 -0
- package/dist/shaders/gi.js.map +1 -0
- package/dist/shaders/ltc_rect.js +202 -0
- package/dist/shaders/ltc_rect.js.map +1 -0
- package/dist/shaders/misc.js +1 -10
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +5 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/probes.js +309 -0
- package/dist/shaders/probes.js.map +1 -0
- package/dist/shaders/sdf.js +537 -0
- package/dist/shaders/sdf.js.map +1 -0
- package/dist/shaders/shadow.js +104 -70
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/skin_brdf.js +243 -0
- package/dist/shaders/skin_brdf.js.map +1 -0
- package/dist/shaders/ssgi.js +63 -0
- package/dist/shaders/ssgi.js.map +1 -0
- package/dist/shaders/ssgi_reprojection.js +118 -0
- package/dist/shaders/ssgi_reprojection.js.map +1 -0
- package/dist/shaders/ssr.js +6 -159
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +38 -27
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +32 -82
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +7 -21
- package/dist/shaders/water_medium.js.map +1 -1
- package/dist/shadow/dom.js +110 -19
- package/dist/shadow/dom.js.map +1 -1
- package/dist/shadow/esm.js +3 -3
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +15 -48
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +15 -53
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +34 -9
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +3 -8
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +40 -2
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +93 -53
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +18 -72
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +3 -3
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/shape.js +44 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/utility/buoyancy.js +287 -0
- package/dist/utility/buoyancy.js.map +1 -0
- package/dist/utility/physical.js +10 -1
- package/dist/utility/physical.js.map +1 -1
- package/dist/utility/pmrem.js +17 -43
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/sdf/bake.js +435 -0
- package/dist/utility/sdf/bake.js.map +1 -0
- package/dist/utility/sdf/bvh.js +576 -0
- package/dist/utility/sdf/bvh.js.map +1 -0
- package/dist/utility/serialization/manager.js +34 -6
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +46 -5
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +11 -4
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +87 -254
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth.js +25 -0
- package/dist/utility/serialization/scene/cloth.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +14 -6
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/foliage.js +821 -0
- package/dist/utility/serialization/scene/foliage.js.map +1 -0
- package/dist/utility/serialization/scene/hair.js +11 -4
- package/dist/utility/serialization/scene/hair.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +115 -7
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +388 -220
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +69 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +140 -5
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/node_physics.js +1318 -0
- package/dist/utility/serialization/scene/node_physics.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +11 -4
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/physics.js +120 -0
- package/dist/utility/serialization/scene/physics.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +124 -10
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +1687 -51
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +11 -4
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +163 -33
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +11 -4
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +1543 -264
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +10 -22
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/foam.js +170 -0
- package/dist/utility/textures/foam.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +17 -43
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +4 -4
- package/dist/utility/textures/ltcdata.js.map +1 -1
- package/dist/utility/textures/ltclut.js +16 -6
- package/dist/utility/textures/ltclut.js.map +1 -1
- package/dist/utility/unsupported.js +24 -0
- package/dist/utility/unsupported.js.map +1 -0
- package/dist/values.js +13 -1
- package/dist/values.js.map +1 -1
- package/package.json +25 -12
- package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/src/asset/meshoptimizer/LICENSE +21 -0
- package/dist/animation/joint_dynamics/convex_collider.js +0 -320
- package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
package/dist/app/inputmgr.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { GamepadState } from './gamepad.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Input manager
|
|
3
5
|
*
|
|
@@ -7,6 +9,14 @@
|
|
|
7
9
|
* - Supports a middleware chain (`use`) to intercept and optionally consume events
|
|
8
10
|
* before they are dispatched to the Application's observable event map.
|
|
9
11
|
* - Manages pointer capture for mouse interactions to ensure consistent up/move delivery.
|
|
12
|
+
* - Tracks which keys and mouse buttons are held, polls gamepads, and evaluates
|
|
13
|
+
* {@link InputActionMap}s, once per frame at the start of `Application.frame()`.
|
|
14
|
+
*
|
|
15
|
+
* Held state and middlewares: a key or button only counts as held if no
|
|
16
|
+
* middleware consumed its down event, so a UI that consumes keyboard input while
|
|
17
|
+
* focused keeps it from gameplay. Releases are always recorded. When the canvas
|
|
18
|
+
* or the window loses focus, every held key is released and a synthesized `keyup`
|
|
19
|
+
* is sent through the middlewares, so nothing stays stuck.
|
|
10
20
|
*
|
|
11
21
|
* Lifecycle:
|
|
12
22
|
* - Call `start()` to attach all event listeners; `stop()` to remove them.
|
|
@@ -33,6 +43,27 @@
|
|
|
33
43
|
_captureId;
|
|
34
44
|
_middlewares;
|
|
35
45
|
_lastEventDatas;
|
|
46
|
+
_blurHandler;
|
|
47
|
+
_visibilityHandler;
|
|
48
|
+
_keysDown;
|
|
49
|
+
_keysPressedPending;
|
|
50
|
+
_keysReleasedPending;
|
|
51
|
+
_keysPressed;
|
|
52
|
+
_keysReleased;
|
|
53
|
+
/** Held buttons per pointer id, as a mask of `1 << MouseEvent.button` */ _pointerButtons;
|
|
54
|
+
_buttons;
|
|
55
|
+
_buttonsPressedPending;
|
|
56
|
+
_buttonsReleasedPending;
|
|
57
|
+
_buttonsPressed;
|
|
58
|
+
_buttonsReleased;
|
|
59
|
+
_pointerDeltaPending;
|
|
60
|
+
_pointerDelta;
|
|
61
|
+
_wheelDeltaPending;
|
|
62
|
+
_wheelDelta;
|
|
63
|
+
_gamepads;
|
|
64
|
+
_activeGamepad;
|
|
65
|
+
_lastDevice;
|
|
66
|
+
_actionMaps;
|
|
36
67
|
/**
|
|
37
68
|
* Creates an instance of InputManager bound to the given application/canvas.
|
|
38
69
|
*
|
|
@@ -58,6 +89,43 @@
|
|
|
58
89
|
this._compositionHandler = this._getCompositionHandler();
|
|
59
90
|
this._captureId = -1;
|
|
60
91
|
this._middlewares = [];
|
|
92
|
+
this._blurHandler = ()=>this._releaseAll();
|
|
93
|
+
this._visibilityHandler = ()=>{
|
|
94
|
+
if (document.visibilityState === 'hidden') {
|
|
95
|
+
this._releaseAll();
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
this._keysDown = new Map();
|
|
99
|
+
this._keysPressedPending = new Set();
|
|
100
|
+
this._keysReleasedPending = new Set();
|
|
101
|
+
this._keysPressed = new Set();
|
|
102
|
+
this._keysReleased = new Set();
|
|
103
|
+
this._pointerButtons = new Map();
|
|
104
|
+
this._buttons = 0;
|
|
105
|
+
this._buttonsPressedPending = 0;
|
|
106
|
+
this._buttonsReleasedPending = 0;
|
|
107
|
+
this._buttonsPressed = 0;
|
|
108
|
+
this._buttonsReleased = 0;
|
|
109
|
+
this._pointerDeltaPending = {
|
|
110
|
+
x: 0,
|
|
111
|
+
y: 0
|
|
112
|
+
};
|
|
113
|
+
this._pointerDelta = {
|
|
114
|
+
x: 0,
|
|
115
|
+
y: 0
|
|
116
|
+
};
|
|
117
|
+
this._wheelDeltaPending = {
|
|
118
|
+
x: 0,
|
|
119
|
+
y: 0
|
|
120
|
+
};
|
|
121
|
+
this._wheelDelta = {
|
|
122
|
+
x: 0,
|
|
123
|
+
y: 0
|
|
124
|
+
};
|
|
125
|
+
this._gamepads = [];
|
|
126
|
+
this._activeGamepad = null;
|
|
127
|
+
this._lastDevice = null;
|
|
128
|
+
this._actionMaps = [];
|
|
61
129
|
}
|
|
62
130
|
/**
|
|
63
131
|
* Begin listening to DOM events on the target element.
|
|
@@ -87,6 +155,9 @@
|
|
|
87
155
|
this._target.addEventListener('compositionstart', this._compositionHandler);
|
|
88
156
|
this._target.addEventListener('compositionupdate', this._compositionHandler);
|
|
89
157
|
this._target.addEventListener('compositionend', this._compositionHandler);
|
|
158
|
+
this._target.addEventListener('blur', this._blurHandler);
|
|
159
|
+
window.addEventListener('blur', this._blurHandler);
|
|
160
|
+
document.addEventListener('visibilitychange', this._visibilityHandler);
|
|
90
161
|
}
|
|
91
162
|
}
|
|
92
163
|
/**
|
|
@@ -117,38 +188,247 @@
|
|
|
117
188
|
this._target.removeEventListener('compositionstart', this._compositionHandler);
|
|
118
189
|
this._target.removeEventListener('compositionupdate', this._compositionHandler);
|
|
119
190
|
this._target.removeEventListener('compositionend', this._compositionHandler);
|
|
191
|
+
this._target.removeEventListener('blur', this._blurHandler);
|
|
192
|
+
window.removeEventListener('blur', this._blurHandler);
|
|
193
|
+
document.removeEventListener('visibilitychange', this._visibilityHandler);
|
|
194
|
+
this._releaseAll();
|
|
120
195
|
this._lastEventDatas = [];
|
|
121
196
|
}
|
|
122
197
|
}
|
|
123
198
|
/**
|
|
124
|
-
*
|
|
199
|
+
* Whether a key is held, by `KeyboardEvent.code` (e.g. `'KeyW'`, `'Space'`).
|
|
125
200
|
*
|
|
126
|
-
*
|
|
127
|
-
|
|
128
|
-
|
|
201
|
+
* @param code - Key code.
|
|
202
|
+
*/ isKeyDown(code) {
|
|
203
|
+
return this._keysDown.has(code);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Whether a key went down during the last frame. True for a tap that went
|
|
207
|
+
* down and up between two frames, even though `isKeyDown` is false.
|
|
129
208
|
*
|
|
130
|
-
* @param
|
|
131
|
-
|
|
209
|
+
* @param code - Key code.
|
|
210
|
+
*/ keyPressed(code) {
|
|
211
|
+
return this._keysPressed.has(code);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Whether a key went up during the last frame.
|
|
215
|
+
*
|
|
216
|
+
* @param code - Key code.
|
|
217
|
+
*/ keyReleased(code) {
|
|
218
|
+
return this._keysReleased.has(code);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Whether a mouse button is held, by `MouseEvent.button` (0 left, 1 middle,
|
|
222
|
+
* 2 right). A touch or pen contact counts as button 0.
|
|
223
|
+
*
|
|
224
|
+
* @param button - Button index.
|
|
225
|
+
*/ isMouseDown(button) {
|
|
226
|
+
return !!(this._buttons & 1 << button);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Whether a mouse button went down during the last frame.
|
|
230
|
+
*
|
|
231
|
+
* @param button - Button index.
|
|
232
|
+
*/ mousePressed(button) {
|
|
233
|
+
return !!(this._buttonsPressed & 1 << button);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Whether a mouse button went up during the last frame.
|
|
237
|
+
*
|
|
238
|
+
* @param button - Button index.
|
|
239
|
+
*/ mouseReleased(button) {
|
|
240
|
+
return !!(this._buttonsReleased & 1 << button);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Pointer movement during the last frame in CSS pixels, +y down. Keeps
|
|
244
|
+
* reporting movement while the pointer is locked.
|
|
245
|
+
*/ get pointerDelta() {
|
|
246
|
+
return this._pointerDelta;
|
|
247
|
+
}
|
|
248
|
+
/** Wheel movement during the last frame in pixels. */ get wheelDelta() {
|
|
249
|
+
return this._wheelDelta;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* The active gamepad: the one operated most recently, or the first connected
|
|
253
|
+
* one. Null if no gamepad with the standard layout has been used yet - browsers
|
|
254
|
+
* only expose a gamepad after one of its buttons has been pressed.
|
|
255
|
+
*/ get gamepad() {
|
|
256
|
+
return this._activeGamepad;
|
|
257
|
+
}
|
|
258
|
+
/** All connected gamepads with the standard layout. */ get gamepads() {
|
|
259
|
+
return this._gamepads.filter((pad)=>pad?.connected);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Device that was operated most recently, e.g. to show matching button
|
|
263
|
+
* prompts; null before any input.
|
|
264
|
+
*/ get lastDevice() {
|
|
265
|
+
return this._lastDevice;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Adds an action map on top of the existing ones. Its values are evaluated
|
|
269
|
+
* from the next frame on.
|
|
270
|
+
*
|
|
271
|
+
* @param map - Map to add.
|
|
272
|
+
* @returns The InputManager instance for chaining.
|
|
273
|
+
*/ addActionMap(map) {
|
|
274
|
+
if (!this._actionMaps.includes(map)) {
|
|
275
|
+
this._actionMaps.push(map);
|
|
276
|
+
}
|
|
277
|
+
return this;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Removes an action map; it then reads as idle.
|
|
281
|
+
*
|
|
282
|
+
* @param map - Map to remove.
|
|
132
283
|
* @returns The InputManager instance for chaining.
|
|
133
|
-
*/
|
|
284
|
+
*/ removeActionMap(map) {
|
|
285
|
+
const index = this._actionMaps.indexOf(map);
|
|
286
|
+
if (index >= 0) {
|
|
287
|
+
this._actionMaps.splice(index, 1);
|
|
288
|
+
map._evaluate(null, 0);
|
|
289
|
+
}
|
|
290
|
+
return this;
|
|
291
|
+
}
|
|
292
|
+
/** Action maps, from bottom to top. */ get actionMaps() {
|
|
293
|
+
return this._actionMaps;
|
|
294
|
+
}
|
|
295
|
+
/** Whether the pointer is locked to the canvas. */ get pointerLocked() {
|
|
296
|
+
return document.pointerLockElement === this._target;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Locks the pointer to the canvas and hides it, for mouse look. Must be called
|
|
300
|
+
* from a user gesture such as a click. Asks for raw, unaccelerated movement
|
|
301
|
+
* where supported.
|
|
302
|
+
*/ async requestPointerLock() {
|
|
303
|
+
const target = this._target;
|
|
304
|
+
try {
|
|
305
|
+
await target.requestPointerLock({
|
|
306
|
+
unadjustedMovement: true
|
|
307
|
+
});
|
|
308
|
+
} catch {
|
|
309
|
+
await target.requestPointerLock();
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/** Releases a pointer lock taken with {@link InputManager.requestPointerLock}. */ exitPointerLock() {
|
|
313
|
+
if (this.pointerLocked) {
|
|
314
|
+
document.exitPointerLock();
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Starts a new input frame: publishes the edges, movement and wheel collected
|
|
319
|
+
* since the last call, polls gamepads and evaluates the action maps. Called by
|
|
320
|
+
* `Application.frame()` before `tick`.
|
|
321
|
+
*
|
|
322
|
+
* @param deltaTime - Frame time in seconds, used by `perSecond` bindings.
|
|
323
|
+
* @internal
|
|
324
|
+
*/ _beginFrame(deltaTime) {
|
|
325
|
+
[this._keysPressed, this._keysPressedPending] = [
|
|
326
|
+
this._keysPressedPending,
|
|
327
|
+
this._keysPressed
|
|
328
|
+
];
|
|
329
|
+
[this._keysReleased, this._keysReleasedPending] = [
|
|
330
|
+
this._keysReleasedPending,
|
|
331
|
+
this._keysReleased
|
|
332
|
+
];
|
|
333
|
+
this._keysPressedPending.clear();
|
|
334
|
+
this._keysReleasedPending.clear();
|
|
335
|
+
this._buttonsPressed = this._buttonsPressedPending;
|
|
336
|
+
this._buttonsReleased = this._buttonsReleasedPending;
|
|
337
|
+
this._buttonsPressedPending = 0;
|
|
338
|
+
this._buttonsReleasedPending = 0;
|
|
339
|
+
this._pointerDelta.x = this._pointerDeltaPending.x;
|
|
340
|
+
this._pointerDelta.y = this._pointerDeltaPending.y;
|
|
341
|
+
this._pointerDeltaPending.x = this._pointerDeltaPending.y = 0;
|
|
342
|
+
this._wheelDelta.x = this._wheelDeltaPending.x;
|
|
343
|
+
this._wheelDelta.y = this._wheelDeltaPending.y;
|
|
344
|
+
this._wheelDeltaPending.x = this._wheelDeltaPending.y = 0;
|
|
345
|
+
if (this._keysPressed.size > 0 || this._buttonsPressed || this._wheelDelta.x || this._wheelDelta.y) {
|
|
346
|
+
this._lastDevice = 'keyboardMouse';
|
|
347
|
+
}
|
|
348
|
+
this._pollGamepads();
|
|
349
|
+
let blocked = false;
|
|
350
|
+
for(let i = this._actionMaps.length - 1; i >= 0; i--){
|
|
351
|
+
const map = this._actionMaps[i];
|
|
352
|
+
map._evaluate(blocked ? null : this, deltaTime);
|
|
353
|
+
blocked ||= map.enabled && map.blocking;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
_pollGamepads() {
|
|
357
|
+
const pads = typeof navigator !== 'undefined' && navigator.getGamepads ? navigator.getGamepads() : [];
|
|
358
|
+
for(let i = 0; i < Math.max(pads.length, this._gamepads.length); i++){
|
|
359
|
+
const raw = pads[i];
|
|
360
|
+
const pad = raw && raw.mapping === 'standard' ? raw : null;
|
|
361
|
+
if (!pad && !this._gamepads[i]) {
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
364
|
+
const state = this._gamepads[i] ??= new GamepadState(i);
|
|
365
|
+
state._update(pad);
|
|
366
|
+
if (state.connected && state.active) {
|
|
367
|
+
this._activeGamepad = state;
|
|
368
|
+
this._lastDevice = 'gamepad';
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
if (!this._activeGamepad?.connected) {
|
|
372
|
+
this._activeGamepad = this._gamepads.find((pad)=>pad?.connected) ?? null;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
_releaseAll() {
|
|
376
|
+
for (const ev of [
|
|
377
|
+
...this._keysDown.values()
|
|
378
|
+
]){
|
|
379
|
+
const up = new KeyboardEvent('keyup', {
|
|
380
|
+
code: ev.code,
|
|
381
|
+
key: ev.key,
|
|
382
|
+
location: ev.location
|
|
383
|
+
});
|
|
384
|
+
this._keyboardHandler.call(this._target, up);
|
|
385
|
+
}
|
|
386
|
+
for (const pointerId of [
|
|
387
|
+
...this._pointerButtons.keys()
|
|
388
|
+
]){
|
|
389
|
+
this._setPointerButtons(pointerId, 0, false);
|
|
390
|
+
}
|
|
391
|
+
for (const pad of this._gamepads){
|
|
392
|
+
pad?._reset();
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
_setPointerButtons(pointerId, mask, consumed) {
|
|
396
|
+
const old = this._pointerButtons.get(pointerId) ?? 0;
|
|
397
|
+
// A press consumed by a middleware is not recorded; a release always is
|
|
398
|
+
const next = old & mask | (consumed ? 0 : mask & ~old);
|
|
399
|
+
if (next) {
|
|
400
|
+
this._pointerButtons.set(pointerId, next);
|
|
401
|
+
} else {
|
|
402
|
+
this._pointerButtons.delete(pointerId);
|
|
403
|
+
}
|
|
404
|
+
let buttons = 0;
|
|
405
|
+
for (const m of this._pointerButtons.values()){
|
|
406
|
+
buttons |= m;
|
|
407
|
+
}
|
|
408
|
+
this._buttonsPressedPending |= buttons & ~this._buttons;
|
|
409
|
+
this._buttonsReleasedPending |= this._buttons & ~buttons;
|
|
410
|
+
this._buttons = buttons;
|
|
411
|
+
}
|
|
412
|
+
_updatePointerState(ev, consumed) {
|
|
413
|
+
// PointerEvent.buttons has right and middle swapped relative to
|
|
414
|
+
// MouseEvent.button; convert to a mask of 1 << button
|
|
415
|
+
const b = ev.type === 'pointerup' || ev.type === 'pointercancel' ? 0 : ev.buttons;
|
|
416
|
+
const mask = b & 1 | (b & 4) >> 1 | (b & 2) << 1 | b & 24;
|
|
417
|
+
this._setPointerButtons(ev.pointerId, mask, consumed);
|
|
418
|
+
}
|
|
419
|
+
use(handler, ctx) {
|
|
134
420
|
if (handler) {
|
|
135
421
|
this._middlewares.push({
|
|
136
|
-
handler,
|
|
422
|
+
handler: handler,
|
|
137
423
|
ctx
|
|
138
424
|
});
|
|
139
425
|
}
|
|
140
426
|
return this;
|
|
141
427
|
}
|
|
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) {
|
|
428
|
+
useFirst(handler, ctx) {
|
|
149
429
|
if (handler) {
|
|
150
430
|
this._middlewares.unshift({
|
|
151
|
-
handler,
|
|
431
|
+
handler: handler,
|
|
152
432
|
ctx
|
|
153
433
|
});
|
|
154
434
|
}
|
|
@@ -190,8 +470,12 @@
|
|
|
190
470
|
return false;
|
|
191
471
|
}
|
|
192
472
|
_callMiddlewares(ev, type) {
|
|
473
|
+
const args = [
|
|
474
|
+
ev,
|
|
475
|
+
type ?? ev.type
|
|
476
|
+
];
|
|
193
477
|
for (const mw of this._middlewares){
|
|
194
|
-
if (mw.handler.call(mw.ctx,
|
|
478
|
+
if (mw.handler.call(mw.ctx, ...args)) {
|
|
195
479
|
return true;
|
|
196
480
|
}
|
|
197
481
|
}
|
|
@@ -206,6 +490,7 @@
|
|
|
206
490
|
if (!that._callMiddlewares(ev)) {
|
|
207
491
|
that._app.dispatchEvent(ev.type, ev);
|
|
208
492
|
}
|
|
493
|
+
that._updatePointerState(ev, false);
|
|
209
494
|
};
|
|
210
495
|
}
|
|
211
496
|
_getContextMenuHandler() {
|
|
@@ -225,9 +510,14 @@
|
|
|
225
510
|
const eventData = that._getPointerEventData(ev.pointerId);
|
|
226
511
|
eventData.lastMoveX = ev.offsetX;
|
|
227
512
|
eventData.lastMoveY = ev.offsetY;
|
|
228
|
-
|
|
513
|
+
const consumed = that._callMiddlewares(ev);
|
|
514
|
+
if (!consumed) {
|
|
229
515
|
that._app.dispatchEvent(ev.type, ev);
|
|
516
|
+
that._pointerDeltaPending.x += ev.movementX ?? 0;
|
|
517
|
+
that._pointerDeltaPending.y += ev.movementY ?? 0;
|
|
230
518
|
}
|
|
519
|
+
// A button pressed or released while another is held arrives as pointermove
|
|
520
|
+
that._updatePointerState(ev, consumed);
|
|
231
521
|
};
|
|
232
522
|
}
|
|
233
523
|
_getPointerDownHandler() {
|
|
@@ -243,9 +533,11 @@
|
|
|
243
533
|
eventData.lastDownY = ev.offsetY;
|
|
244
534
|
eventData.lastDownTime = Date.now();
|
|
245
535
|
that._app.focus();
|
|
246
|
-
|
|
536
|
+
const consumed = that._callMiddlewares(ev);
|
|
537
|
+
if (!consumed) {
|
|
247
538
|
that._app.dispatchEvent(ev.type, ev);
|
|
248
539
|
}
|
|
540
|
+
that._updatePointerState(ev, consumed);
|
|
249
541
|
};
|
|
250
542
|
}
|
|
251
543
|
_getPointerUpHandler() {
|
|
@@ -277,6 +569,7 @@
|
|
|
277
569
|
if (!that._callMiddlewares(ev)) {
|
|
278
570
|
that._app.dispatchEvent(ev.type, ev);
|
|
279
571
|
}
|
|
572
|
+
that._updatePointerState(ev, false);
|
|
280
573
|
if (emitClickEvent) {
|
|
281
574
|
if (!that._callMiddlewares(ev, 'click')) {
|
|
282
575
|
that._app.dispatchEvent('click', ev);
|
|
@@ -302,9 +595,21 @@
|
|
|
302
595
|
_getKeyboardHandler() {
|
|
303
596
|
const that = this;
|
|
304
597
|
return function(ev) {
|
|
305
|
-
|
|
598
|
+
const consumed = that._callMiddlewares(ev);
|
|
599
|
+
if (!consumed) {
|
|
306
600
|
that._app.dispatchEvent(ev.type, ev);
|
|
307
601
|
}
|
|
602
|
+
if (ev.code) {
|
|
603
|
+
if (ev.type === 'keydown') {
|
|
604
|
+
// A press consumed by a middleware is not recorded; a release always is
|
|
605
|
+
if (!consumed && !that._keysDown.has(ev.code)) {
|
|
606
|
+
that._keysDown.set(ev.code, ev);
|
|
607
|
+
that._keysPressedPending.add(ev.code);
|
|
608
|
+
}
|
|
609
|
+
} else if (ev.type === 'keyup' && that._keysDown.delete(ev.code)) {
|
|
610
|
+
that._keysReleasedPending.add(ev.code);
|
|
611
|
+
}
|
|
612
|
+
}
|
|
308
613
|
};
|
|
309
614
|
}
|
|
310
615
|
_getDragHandler() {
|
|
@@ -319,7 +624,11 @@
|
|
|
319
624
|
const that = this;
|
|
320
625
|
return function(ev) {
|
|
321
626
|
if (!that._callMiddlewares(ev)) {
|
|
322
|
-
that._app.dispatchEvent(ev.type);
|
|
627
|
+
that._app.dispatchEvent(ev.type, ev);
|
|
628
|
+
// Normalize line and page modes to pixels
|
|
629
|
+
const scale = ev.deltaMode === WheelEvent.DOM_DELTA_LINE ? 16 : ev.deltaMode === WheelEvent.DOM_DELTA_PAGE ? that._target.clientHeight : 1;
|
|
630
|
+
that._wheelDeltaPending.x += ev.deltaX * scale;
|
|
631
|
+
that._wheelDeltaPending.y += ev.deltaY * scale;
|
|
323
632
|
}
|
|
324
633
|
};
|
|
325
634
|
}
|
|
@@ -327,7 +636,7 @@
|
|
|
327
636
|
const that = this;
|
|
328
637
|
return function(ev) {
|
|
329
638
|
if (!that._callMiddlewares(ev)) {
|
|
330
|
-
that._app.dispatchEvent(ev.type);
|
|
639
|
+
that._app.dispatchEvent(ev.type, ev);
|
|
331
640
|
}
|
|
332
641
|
};
|
|
333
642
|
}
|