@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 @@
|
|
|
1
|
+
{"version":3,"file":"camera.js","sources":["../../../src/camera/camera.ts"],"sourcesContent":["import type { CubeFace } from '@zephyr3d/base';\r\nimport { DRef, Plane, Vector2, Matrix4x4, Frustum, Vector4, Vector3, Ray, halton23 } from '@zephyr3d/base';\r\nimport type { NodeClonable, NodeCloneMethod } from '../scene/scene_node';\r\nimport { SceneNode } from '../scene/scene_node';\r\nimport { Application } from '../app';\r\nimport type { Drawable, PickTarget } from '../render/drawable';\r\nimport type { BaseTexture } from '@zephyr3d/device';\r\nimport { Compositor } from '../posteffect/compositor';\r\nimport type { Scene } from '../scene/scene';\r\nimport type { BaseCameraController } from './base';\r\nimport type { OIT } from '../render/oit';\r\nimport { TAA } from '../posteffect/taa';\r\nimport { SSR } from '../posteffect/ssr';\r\nimport { Tonemap } from '../posteffect/tonemap';\r\nimport { FXAA } from '../posteffect/fxaa';\r\nimport { Bloom } from '../posteffect/bloom';\r\nimport { SAO } from '../posteffect/sao';\r\nimport { MotionBlur } from '../posteffect/motionblur';\r\n\r\n/**\r\n * Camera pick result\r\n * @public\r\n */\r\nexport type PickResult = {\r\n distance: number;\r\n intersectedPoint: Vector3;\r\n drawable: Drawable;\r\n target: PickTarget;\r\n};\r\n\r\n/**\r\n * History data of the camera\r\n * @public\r\n */\r\nexport type CameraHistoryData = {\r\n prevColorTex: BaseTexture;\r\n prevMotionVectorTex: BaseTexture;\r\n};\r\n\r\n/**\r\n * The camera node class\r\n * @public\r\n */\r\nexport class Camera extends SceneNode implements NodeClonable<Camera> {\r\n /** @internal */\r\n private static readonly _halton23 = halton23(16);\r\n /** @internal */\r\n private static readonly _historyData: WeakMap<Camera, CameraHistoryData> = new WeakMap();\r\n /** @internal */\r\n protected _projMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _invProjMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _viewMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _viewProjMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _rotationMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _invViewProjMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _clipPlane: Plane;\r\n /** @internal */\r\n protected _controller: BaseCameraController;\r\n /** @internal */\r\n protected _frustum: Frustum;\r\n /** @internal */\r\n protected _frustumV: Frustum;\r\n /** @internal */\r\n protected _dirty: boolean;\r\n /** @internal */\r\n protected _viewport: number[];\r\n /** @internal */\r\n protected _scissor: number[];\r\n /** @internal */\r\n protected _clipMask: number;\r\n /** @internal */\r\n protected _oit: DRef<OIT>;\r\n /** @internal */\r\n protected _depthPrePass: boolean;\r\n /** @internal */\r\n protected _commandBufferReuse: boolean;\r\n /** @internal */\r\n protected _HiZ: boolean;\r\n /** @internal */\r\n protected _toneMap: boolean;\r\n /** @internal */\r\n protected _postEffectTonemap: DRef<Tonemap>;\r\n /** @internal */\r\n protected _tonemapExposure: number;\r\n /** @internal */\r\n protected _motionBlur: boolean;\r\n /** @internal */\r\n protected _postEffectMotionBlur: DRef<MotionBlur>;\r\n /** @internal */\r\n protected _motionBlurStrength: number;\r\n /** @internal */\r\n protected _bloom: boolean;\r\n /** @internal */\r\n protected _postEffectBloom: DRef<Bloom>;\r\n /** @internal */\r\n protected _bloomMaxDownsampleLevels: number;\r\n /** @internal */\r\n protected _bloomDownsampleLimit: number;\r\n /** @internal */\r\n protected _bloomThreshold: number;\r\n /** @internal */\r\n protected _bloomThresholdKnee: number;\r\n /** @internal */\r\n protected _bloomIntensity: number;\r\n /** @internal */\r\n protected _FXAA: boolean;\r\n /** @internal */\r\n protected _postEffectFXAA: DRef<FXAA>;\r\n /** @internal */\r\n protected _TAA: boolean;\r\n /** @internal */\r\n protected _postEffectTAA: DRef<TAA>;\r\n /** @internal */\r\n protected _TAADebug: number;\r\n /** @internal */\r\n protected _SSR: boolean;\r\n /** @internal */\r\n protected _postEffectSSR: DRef<SSR>;\r\n /** @internal */\r\n protected _ssrParams: Vector4;\r\n /** @internal */\r\n protected _ssrMaxRoughness: number;\r\n /** @internal */\r\n protected _ssrRoughnessFactor: number;\r\n /** @internal */\r\n protected _ssrStride: number;\r\n /** @internal */\r\n protected _ssrCalcThickness: boolean;\r\n /** @internal */\r\n protected _ssrBlurriness: number;\r\n /** @internal */\r\n protected _ssrBlurDepthCutoff: number;\r\n /** @internal */\r\n protected _ssrBlurKernelSize: number;\r\n /** @internal */\r\n protected _ssrBlurStdDev: number;\r\n /** @internal */\r\n protected _SSAO: boolean;\r\n /** @internal */\r\n protected _postEffectSSAO: DRef<SAO>;\r\n /** @internal */\r\n protected _SSAOScale: number;\r\n /** @internal */\r\n protected _SSAOBias: number;\r\n /** @internal */\r\n protected _SSAORadius: number;\r\n /** @internal */\r\n protected _SSAOIntensity: number;\r\n /** @internal */\r\n protected _SSAOBlurDepthCutoff: number;\r\n /** @internal */\r\n protected _pickResultPromise: Promise<PickResult>;\r\n /** @internal */\r\n protected _pickResultResolve: (result: PickResult) => void;\r\n /** @internal */\r\n protected _pickPosX: number;\r\n /** @internal */\r\n protected _pickPosY: number;\r\n /** @internal */\r\n protected _pickResult: PickResult;\r\n /** @internal */\r\n protected _jitterValue: Vector2;\r\n /** @internal */\r\n protected _prevJitterValue: Vector2;\r\n /** @internal */\r\n protected _jitteredVPMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _jitteredInvVPMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _prevVPMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _prevPosition: Vector3;\r\n /** @internal */\r\n protected _prevJitteredVPMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _compositor: Compositor;\r\n /**\r\n * Creates a new camera node\r\n *\r\n * @param scene - The scene that the camera belongs to\r\n * @param projectionMatrix - Projection matrix for this camera\r\n */\r\n constructor(scene: Scene, projectionMatrix?: Matrix4x4) {\r\n super(scene);\r\n this._projMatrix = projectionMatrix || Matrix4x4.identity();\r\n this._invProjMatrix = Matrix4x4.invert(this._projMatrix);\r\n this._viewMatrix = Matrix4x4.identity();\r\n this._viewProjMatrix = Matrix4x4.identity();\r\n this._invViewProjMatrix = Matrix4x4.identity();\r\n this._clipPlane = null;\r\n this._dirty = true;\r\n this._controller = null;\r\n this._viewport = null;\r\n this._scissor = null;\r\n this._clipMask = 0;\r\n this._frustum = null;\r\n this._frustumV = null;\r\n this._oit = new DRef();\r\n this._depthPrePass = false;\r\n this._HiZ = false;\r\n this._toneMap = true;\r\n this._postEffectTonemap = new DRef();\r\n this._tonemapExposure = 1;\r\n this._motionBlur = false;\r\n this._postEffectMotionBlur = new DRef();\r\n this._motionBlurStrength = 1;\r\n this._bloom = false;\r\n this._postEffectBloom = new DRef();\r\n this._bloomMaxDownsampleLevels = 4;\r\n this._bloomDownsampleLimit = 32;\r\n this._bloomThreshold = 0.8;\r\n this._bloomThresholdKnee = 0;\r\n this._bloomIntensity = 1;\r\n this._FXAA = false;\r\n this._postEffectFXAA = new DRef();\r\n this._TAA = false;\r\n this._postEffectTAA = new DRef();\r\n this._TAADebug = 0;\r\n this._SSR = false;\r\n this._postEffectSSR = new DRef();\r\n this._ssrParams = new Vector4(100, 120, 0.5, 0);\r\n this._ssrMaxRoughness = 0.8;\r\n this._ssrRoughnessFactor = 1;\r\n this._ssrStride = 2;\r\n this._ssrCalcThickness = false;\r\n this._ssrBlurriness = 0.05;\r\n this._ssrBlurDepthCutoff = 2;\r\n this._ssrBlurKernelSize = 17;\r\n this._ssrBlurStdDev = 10;\r\n this._SSAO = false;\r\n this._postEffectSSAO = new DRef();\r\n this._SSAOScale = 10;\r\n this._SSAOBias = 1;\r\n this._SSAOIntensity = 0.025;\r\n this._SSAORadius = 100;\r\n this._SSAOBlurDepthCutoff = 2;\r\n this._pickResult = null;\r\n this._commandBufferReuse = true;\r\n this._jitteredVPMatrix = new Matrix4x4();\r\n this._jitteredInvVPMatrix = new Matrix4x4();\r\n this._jitterValue = new Vector2(0, 0);\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n this._pickResultPromise = null;\r\n this._pickResultResolve = null;\r\n this._pickPosX = 0;\r\n this._pickPosY = 0;\r\n this._compositor = new Compositor();\r\n this.updatePostProcessing();\r\n }\r\n clone(method: NodeCloneMethod, recursive: boolean): Camera {\r\n const other = new Camera(this.scene);\r\n other.copyFrom(this, method, recursive);\r\n other.parent = this.parent;\r\n return other;\r\n }\r\n copyFrom(other: this, method: NodeCloneMethod, recursive: boolean): void {\r\n super.copyFrom(other, method, recursive);\r\n this.clipPlane = other.clipPlane ? new Plane(other.clipPlane) : null;\r\n this.HiZ = other.HiZ;\r\n this.toneMap = other.toneMap;\r\n this.toneMapExposure = other.toneMapExposure;\r\n this.bloom = other.bloom;\r\n this.FXAA = other.FXAA;\r\n this.TAA = other.TAA;\r\n this.TAADebug = other.TAADebug;\r\n this.SSR = other.SSR;\r\n this.ssrMaxRoughness = other.ssrMaxRoughness;\r\n this.ssrRoughnessFactor = other.ssrRoughnessFactor;\r\n this.ssrStride = other.ssrStride;\r\n this.ssrMaxDistance = other.ssrMaxDistance;\r\n this.ssrIterations = other.ssrIterations;\r\n this.ssrThickness = other.ssrThickness;\r\n this.ssrCalcThickness = other.ssrCalcThickness;\r\n this.ssrBlurScale = other.ssrBlurScale;\r\n this.ssrBlurDepthCutoff = other.ssrBlurDepthCutoff;\r\n this.ssrBlurKernelSize = other.ssrBlurKernelSize;\r\n this.depthPrePass = other.depthPrePass;\r\n this.commandBufferReuse = other.commandBufferReuse;\r\n this.oit = other.oit;\r\n this.clipMask = other.clipMask;\r\n this.viewport = other.viewport?.slice() ?? null;\r\n this.scissor = other.scissor?.slice() ?? null;\r\n this.setProjectionMatrix(other.getProjectionMatrix());\r\n }\r\n /** Compositor */\r\n get compositor() {\r\n return this._compositor;\r\n }\r\n /** Clip plane in camera space */\r\n get clipPlane(): Plane {\r\n return this._clipPlane;\r\n }\r\n set clipPlane(plane: Plane) {\r\n this._clipPlane = plane;\r\n this._invalidate(false);\r\n }\r\n /**\r\n * Gets whether Hi-Z acceleration is enabled.\r\n * When enabled, it can significantly improve SSR performance with minimal quality impact.\r\n */\r\n get HiZ(): boolean {\r\n return this._HiZ;\r\n }\r\n set HiZ(val: boolean) {\r\n this._HiZ = !!val;\r\n }\r\n /**\r\n * Gets whether Tonemap is enabled.\r\n */\r\n get toneMap(): boolean {\r\n return this._postEffectTonemap.get().enabled;\r\n }\r\n set toneMap(val: boolean) {\r\n this._postEffectTonemap.get().enabled = !!val;\r\n }\r\n /**\r\n * Gets whether motion blur is enabled\r\n */\r\n get motionBlur(): boolean {\r\n return this._postEffectMotionBlur.get().enabled;\r\n }\r\n set motionBlur(val: boolean) {\r\n this._postEffectMotionBlur.get().enabled = !!val;\r\n }\r\n /** Motion blur strength */\r\n get motionBlurStrength(): number {\r\n return this._motionBlurStrength;\r\n }\r\n set motionBlurStrength(val: number) {\r\n this._motionBlurStrength = val;\r\n if (this._postEffectMotionBlur.get()) {\r\n this._postEffectMotionBlur.get().strength = this._motionBlurStrength;\r\n }\r\n }\r\n /**\r\n * Gets whether Bloom is enabled.\r\n */\r\n get bloom(): boolean {\r\n return this._postEffectBloom.get().enabled;\r\n }\r\n set bloom(val: boolean) {\r\n this._postEffectBloom.get().enabled = !!val;\r\n }\r\n /**\r\n * Maximum bloom downsample levels\r\n */\r\n get bloomMaxDownsampleLevels() {\r\n return this._bloomMaxDownsampleLevels;\r\n }\r\n set bloomMaxDownsampleLevels(val: number) {\r\n this._bloomMaxDownsampleLevels = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().maxDownsampleLevel = val;\r\n }\r\n }\r\n /**\r\n * Bloom downsample limit\r\n */\r\n get bloomDownsampleLimit() {\r\n return this._bloomDownsampleLimit;\r\n }\r\n set bloomDownsampleLimit(val: number) {\r\n this._bloomDownsampleLimit = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().downsampleLimit = val;\r\n }\r\n }\r\n /**\r\n * Bloom threshold\r\n */\r\n get bloomThreshold() {\r\n return this._bloomThreshold;\r\n }\r\n set bloomThreshold(val: number) {\r\n this._bloomThreshold = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().threshold = val;\r\n }\r\n }\r\n /**\r\n * Bloom threshold knee\r\n */\r\n get bloomThresholdKnee() {\r\n return this._bloomThresholdKnee;\r\n }\r\n set bloomThresholdKnee(val: number) {\r\n this._bloomThresholdKnee = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().thresholdKnee = val;\r\n }\r\n }\r\n /**\r\n * Bloom intensity\r\n */\r\n get bloomIntensity() {\r\n return this._bloomIntensity;\r\n }\r\n set bloomIntensity(val: number) {\r\n this._bloomIntensity = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().intensity = val;\r\n }\r\n }\r\n /**\r\n * Gets whether FXAA is enabled.\r\n */\r\n get FXAA(): boolean {\r\n return this._postEffectFXAA.get().enabled;\r\n }\r\n set FXAA(val: boolean) {\r\n this._postEffectFXAA.get().enabled = !!val;\r\n }\r\n /**\r\n * Tonemap exposure\r\n */\r\n get toneMapExposure(): number {\r\n return this._tonemapExposure;\r\n }\r\n set toneMapExposure(val: number) {\r\n this._tonemapExposure = val;\r\n if (this._postEffectTonemap.get()) {\r\n this._postEffectTonemap.get().exposure = val;\r\n }\r\n }\r\n /**\r\n * Gets whether TAA is enabled.\r\n */\r\n get TAA(): boolean {\r\n return this._postEffectTAA.get().enabled;\r\n }\r\n set TAA(val: boolean) {\r\n this._postEffectTAA.get().enabled = !!val;\r\n }\r\n /**\r\n * Gets the debug flag for TAA\r\n */\r\n get TAADebug(): number {\r\n return this._TAADebug;\r\n }\r\n set TAADebug(val: number) {\r\n this._TAADebug = val;\r\n }\r\n /**\r\n * Gets whether Screen Space Reflections (SSR) is enabled.\r\n */\r\n get SSR(): boolean {\r\n return this._postEffectSSR.get().enabled;\r\n }\r\n set SSR(val: boolean) {\r\n this._postEffectSSR.get().enabled = !!val;\r\n }\r\n /**\r\n * Gets the maximum roughness value for screen space reflections.\r\n * Controls the cutoff point where surfaces are considered too rough for SSR.\r\n */\r\n get ssrMaxRoughness(): number {\r\n return this._ssrMaxRoughness;\r\n }\r\n set ssrMaxRoughness(val: number) {\r\n this._ssrMaxRoughness = val;\r\n }\r\n /**\r\n * Gets the roughness factor for SSR calculations.\r\n * Affects how surface roughness influences reflection clarity.\r\n */\r\n get ssrRoughnessFactor(): number {\r\n return this._ssrRoughnessFactor;\r\n }\r\n set ssrRoughnessFactor(val: number) {\r\n this._ssrRoughnessFactor = val;\r\n }\r\n /**\r\n * Gets the stride value for SSR ray marching.\r\n * Controls the step size during ray marching. Larger values improve performance but may miss details.\r\n */\r\n get ssrStride(): number {\r\n return this._ssrStride;\r\n }\r\n set ssrStride(val: number) {\r\n this._ssrStride = val;\r\n }\r\n /**\r\n * Gets the maximum distance for SSR ray marching.\r\n * Defines how far rays will travel when searching for reflection intersections.\r\n */\r\n get ssrMaxDistance(): number {\r\n return this._ssrParams.x;\r\n }\r\n set ssrMaxDistance(val: number) {\r\n this._ssrParams.x = val;\r\n }\r\n /**\r\n * Gets the number of iterations for SSR ray marching.\r\n * Higher values provide more accurate reflections but impact performance.\r\n */\r\n get ssrIterations(): number {\r\n return this._ssrParams.y;\r\n }\r\n set ssrIterations(val: number) {\r\n this._ssrParams.y = val;\r\n }\r\n /**\r\n * Gets the thickness value for SSR calculations.\r\n * Determines the thickness threshold for surfaces when calculating reflections.\r\n */\r\n get ssrThickness(): number {\r\n return this._ssrParams.z;\r\n }\r\n set ssrThickness(val: number) {\r\n this._ssrParams.z = val;\r\n }\r\n /**\r\n * Gets whether SSR should calculate thickness automatically.\r\n * When enabled, the system will dynamically compute surface thickness for reflections.\r\n */\r\n get ssrCalcThickness(): boolean {\r\n return this._ssrCalcThickness;\r\n }\r\n set ssrCalcThickness(val: boolean) {\r\n this._ssrCalcThickness = !!val;\r\n }\r\n /**\r\n * Gets the blur scale factor for SSR.\r\n * Controls the overall intensity of the blur effect applied to reflections.\r\n */\r\n get ssrBlurScale(): number {\r\n return this._ssrBlurriness;\r\n }\r\n set ssrBlurScale(val: number) {\r\n this._ssrBlurriness = val;\r\n }\r\n /**\r\n * Gets the depth cutoff value for SSR blur.\r\n * Determines at what depth difference the blur effect should be reduced or eliminated.\r\n */\r\n get ssrBlurDepthCutoff(): number {\r\n return this._ssrBlurDepthCutoff;\r\n }\r\n set ssrBlurDepthCutoff(val: number) {\r\n this._ssrBlurDepthCutoff = val;\r\n }\r\n /**\r\n * Gets the kernel size for the SSR blur effect.\r\n * Defines the size of the blur kernel. Larger values create softer, more spread-out blur.\r\n */\r\n get ssrBlurKernelSize(): number {\r\n return this._ssrBlurKernelSize;\r\n }\r\n set ssrBlurKernelSize(val: number) {\r\n this._ssrBlurKernelSize = val;\r\n }\r\n /**\r\n * Gets the standard deviation for the SSR Gaussian blur.\r\n * Controls the distribution of the blur effect. Higher values create more pronounced blur.\r\n */\r\n get ssrBlurStdDev(): number {\r\n return this._ssrBlurStdDev;\r\n }\r\n set ssrBlurStdDev(val: number) {\r\n this._ssrBlurStdDev = val;\r\n }\r\n /** @internal */\r\n get ssrParams(): Vector4 {\r\n return this._ssrParams;\r\n }\r\n /**\r\n * Gets whether SSAO is enabled.\r\n */\r\n get SSAO(): boolean {\r\n return this._postEffectSSAO.get().enabled;\r\n }\r\n set SSAO(val: boolean) {\r\n this._postEffectSSAO.get().enabled = !!val;\r\n }\r\n /** SSAO scale */\r\n get SSAOScale() {\r\n return this._SSAOScale;\r\n }\r\n set SSAOScale(val: number) {\r\n this._SSAOScale = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().scale = val;\r\n }\r\n }\r\n /** SSAO bias */\r\n get SSAOBias() {\r\n return this._SSAOBias;\r\n }\r\n set SSAOBias(val: number) {\r\n this._SSAOBias = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().bias = val;\r\n }\r\n }\r\n /** SSAO radius */\r\n get SSAORadius() {\r\n return this._SSAORadius;\r\n }\r\n set SSAORadius(val: number) {\r\n this._SSAORadius = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().radius = val;\r\n }\r\n }\r\n /** SSAO intensity */\r\n get SSAOIntensity() {\r\n return this._SSAOIntensity;\r\n }\r\n set SSAOIntensity(val: number) {\r\n this._SSAOIntensity = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().intensity = val;\r\n }\r\n }\r\n /** SSAO depth cutoff */\r\n get SSAOBlurDepthCutoff() {\r\n return this._SSAOBlurDepthCutoff;\r\n }\r\n set SSAOBlurDepthCutoff(val: number) {\r\n this._SSAOBlurDepthCutoff = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().blurDepthCutoff = val;\r\n }\r\n }\r\n /** Whether to perform a depth pass */\r\n get depthPrePass(): boolean {\r\n return this._depthPrePass;\r\n }\r\n set depthPrePass(val: boolean) {\r\n this._depthPrePass = !!val;\r\n }\r\n /** Whether to allow command buffer reuse optimization */\r\n get commandBufferReuse(): boolean {\r\n return this._commandBufferReuse;\r\n }\r\n set commandBufferReuse(val: boolean) {\r\n this._commandBufferReuse = !!val;\r\n }\r\n /** OIT */\r\n get oit(): OIT {\r\n return this._oit.get();\r\n }\r\n set oit(val: OIT) {\r\n this._oit.set(val);\r\n }\r\n /** Clip plane mask */\r\n get clipMask(): number {\r\n return this._clipMask;\r\n }\r\n set clipMask(val: number) {\r\n this._clipMask = val;\r\n }\r\n /** Viewport used for rendering, if null, use full framebuffer size */\r\n get viewport(): number[] {\r\n return this._viewport ? [...this._viewport] : null;\r\n }\r\n set viewport(rect: number[]) {\r\n this._viewport = rect?.slice() ?? null;\r\n }\r\n /** Scissor rectangle used for rendering, if null, use viewport value */\r\n get scissor(): number[] {\r\n return this._scissor ? [...this._scissor] : null;\r\n }\r\n set scissor(rect: number[]) {\r\n this._scissor = rect?.slice() ?? null;\r\n }\r\n /**\r\n * Handle input events\r\n * @param ev - input event object\r\n * @param type - event type, default to ev.type\r\n * @returns Boolean value indicates whether the event was handled.\r\n */\r\n handleEvent(ev: Event, type?: string): boolean {\r\n let handled = false;\r\n if (this._controller) {\r\n type = type ?? ev.type;\r\n if (type === 'pointerdown') {\r\n handled = this._controller.onMouseDown(ev as PointerEvent);\r\n } else if (type === 'pointerup') {\r\n handled = this._controller.onMouseUp(ev as PointerEvent);\r\n } else if (type === 'pointermove') {\r\n handled = this._controller.onMouseMove(ev as PointerEvent);\r\n } else if (type === 'wheel') {\r\n handled = this._controller.onMouseWheel(ev as WheelEvent);\r\n } else if (type === 'keydown') {\r\n handled = this._controller.onKeyDown(ev as KeyboardEvent);\r\n } else if (type === 'keyup') {\r\n handled = this._controller.onKeyUp(ev as KeyboardEvent);\r\n }\r\n if (handled) {\r\n ev.preventDefault();\r\n }\r\n }\r\n return handled;\r\n }\r\n /**\r\n * Constructs a ray based on the given screen coordinates.\r\n *\r\n * @param x - The x-component of the screen coordinates, relative to the top-left corner of the viewport.\r\n * @param y - The y-component of the screen coordinates, relative to the top-left corner of the viewport.\r\n * @returns The ray originating from the camera position and passing through the given screen coordinates.\r\n */\r\n constructRay(x: number, y: number): Ray {\r\n const width = this.viewport ? this.viewport[2] : Application.instance.device.getViewport().width;\r\n const height = this.viewport ? this.viewport[3] : Application.instance.device.getViewport().height;\r\n const ndcX = (2 * x) / width - 1;\r\n const ndcY = 1 - (2 * y) / height;\r\n const nearClip = new Vector4(ndcX, ndcY, 0, 1);\r\n const farClip = new Vector4(ndcX, ndcY, 1, 1);\r\n const nearWorld = this.invViewProjectionMatrix.transform(nearClip);\r\n const farWorld = this.invViewProjectionMatrix.transform(farClip);\r\n if (this.isPerspective()) {\r\n nearWorld.scaleBy(1 / nearWorld.w);\r\n farWorld.scaleBy(1 / farWorld.w);\r\n }\r\n const vEye = this.isPerspective() ? this.getWorldPosition() : nearWorld.xyz();\r\n const vDir = Vector3.sub(farWorld.xyz(), vEye).inplaceNormalize();\r\n return new Ray(vEye, vDir);\r\n }\r\n /**\r\n * Place the camera by specifying the camera position and the target point\r\n * @param eye - The camera position\r\n * @param target - The target point to look at\r\n * @param up - The up vector\r\n * @returns self\r\n */\r\n lookAt(eye: Vector3, target: Vector3, up: Vector3): this {\r\n return this.setLocalTransform(Matrix4x4.lookAt(eye, target, up));\r\n }\r\n /**\r\n * Place the camera to look at a given cube face at a given camera position\r\n * @param face - The cube face to look at\r\n * @param position - The camera position\r\n * @returns self\r\n */\r\n lookAtCubeFace(face: CubeFace, position?: Vector3): this {\r\n return this.setLocalTransform(Matrix4x4.lookAtCubeFace(face, position ?? this.position));\r\n }\r\n /**\r\n * Setup a perspective projection matrix for the camera\r\n * @param fovY - The vertical field of view in radians.\r\n * @param aspect - The aspect ratio\r\n * @param zNear - The near clip plane\r\n * @param zFar - The far clip plane\r\n * @returns self\r\n */\r\n setPerspective(fovY: number, aspect: number, zNear: number, zFar: number): this {\r\n this._projMatrix.perspective(fovY, aspect, zNear, zFar);\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n return this;\r\n }\r\n /**\r\n * Setup a orthogonal projection matrix for the camera\r\n * @param left - Left bound of the frustum\r\n * @param right - Right bound of the frustum\r\n * @param bottom - Bottom bound of the frustum\r\n * @param top - Top bound of the frustum\r\n * @param near - Near bound of the frustum.\r\n * @param far - Far bound of the frustum.\r\n * @returns self\r\n */\r\n setOrtho(left: number, right: number, bottom: number, top: number, near: number, far: number): this {\r\n this._projMatrix.ortho(left, right, bottom, top, near, far);\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n return this;\r\n }\r\n /**\r\n * Setup a projection matrix for the camera\r\n * @param matrix - The projection matrix\r\n */\r\n setProjectionMatrix(matrix: Matrix4x4): void {\r\n if (matrix && matrix !== this._projMatrix) {\r\n this._projMatrix = matrix;\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n }\r\n }\r\n /**\r\n * Gets the projection matrix of the camera\r\n * @returns The projection matrix\r\n */\r\n getProjectionMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._projMatrix;\r\n }\r\n /**\r\n * Gets the inverse projection matrix of the camera\r\n * @returns The projection matrix\r\n */\r\n getInvProjectionMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._invProjMatrix;\r\n }\r\n getRotationMatrix(): Matrix4x4 {\r\n const rotationMatrix = new Matrix4x4();\r\n this.worldMatrix.decompose(null, rotationMatrix, null);\r\n const xAxis = rotationMatrix.getRow(0).xyz().scaleBy(-1);\r\n const yAxis = rotationMatrix.getRow(1).xyz();\r\n const zAxis = rotationMatrix.getRow(2).xyz().scaleBy(-1);\r\n rotationMatrix.setRow(0, new Vector4(xAxis.x, xAxis.y, xAxis.z, 0));\r\n rotationMatrix.setRow(1, new Vector4(yAxis.x, yAxis.y, yAxis.z, 0));\r\n rotationMatrix.setRow(2, new Vector4(zAxis.x, zAxis.y, zAxis.z, 0));\r\n return rotationMatrix;\r\n }\r\n /**\r\n * View matrix of the camera\r\n *\r\n * @remarks\r\n * Camera's view matrix will transform a point from the world space to the camera space\r\n */\r\n get viewMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._viewMatrix;\r\n }\r\n get viewProjectionMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._viewProjMatrix;\r\n }\r\n /**\r\n * The inverse-view-projection matrix of the camera\r\n *\r\n * @remarks\r\n * The inverse-view-projection matrix transforms a point from the clip space to the camera space\r\n */\r\n get invViewProjectionMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._invViewProjMatrix;\r\n }\r\n /** Gets the frustum of the camera */\r\n get frustum(): Frustum {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._frustum;\r\n }\r\n get frustumViewSpace(): Frustum {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n if (!this._frustumV) {\r\n this._frustumV = new Frustum(this._projMatrix);\r\n }\r\n return this._frustumV;\r\n }\r\n /** The camera controller */\r\n get controller(): BaseCameraController {\r\n return this._controller || null;\r\n }\r\n set controller(controller: BaseCameraController) {\r\n this.setController(controller);\r\n }\r\n /** {@inheritDoc SceneNode.isCamera} */\r\n isCamera(): this is Camera {\r\n return true;\r\n }\r\n /** Gets the near clip plane of the camera */\r\n getNearPlane(): number {\r\n return this.getProjectionMatrix().getNearPlane();\r\n }\r\n /** Gets the far clip plane of the camera */\r\n getFarPlane(): number {\r\n return this.getProjectionMatrix().getFarPlane();\r\n }\r\n /** Gets the vertical field of view of the camera */\r\n getFOV(): number {\r\n return this.getProjectionMatrix().getFov();\r\n }\r\n /** Gets the tangent of half of the vertical field of view */\r\n getTanHalfFovy(): number {\r\n return this.getProjectionMatrix().getTanHalfFov();\r\n }\r\n /** Gets the aspect ratio */\r\n getAspect(): number {\r\n return this.getProjectionMatrix().getAspect();\r\n }\r\n /** Returns true if the camera is perspective */\r\n isPerspective(): boolean {\r\n return this.getProjectionMatrix().isPerspective();\r\n }\r\n /** Returns true if the camera is orthographic */\r\n isOrtho(): boolean {\r\n return this.getProjectionMatrix().isOrtho();\r\n }\r\n /**\r\n * Gets the camera history data which is used in temporal reprojection\r\n * @returns Camera history data\r\n */\r\n getHistoryData(): CameraHistoryData {\r\n let data = Camera._historyData.get(this);\r\n if (!data) {\r\n data = {\r\n prevColorTex: null,\r\n prevMotionVectorTex: null\r\n };\r\n Camera._historyData.set(this, data);\r\n }\r\n return data;\r\n }\r\n /**\r\n * Clears the camera history data which is used in temporal reprojection\r\n */\r\n clearHistoryData() {\r\n const data = Camera._historyData.get(this);\r\n if (data) {\r\n if (data.prevColorTex) {\r\n Application.instance.device.pool.releaseTexture(data.prevColorTex);\r\n }\r\n if (data.prevMotionVectorTex) {\r\n Application.instance.device.pool.releaseTexture(data.prevMotionVectorTex);\r\n }\r\n Camera._historyData.delete(this);\r\n }\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n }\r\n /** @internal */\r\n private updatePostProcessing() {\r\n this._compositor.clear();\r\n if (!this._postEffectSSR.get()) {\r\n const ssr = new SSR();\r\n ssr.enabled = false;\r\n this._postEffectSSR.set(ssr);\r\n this._compositor.appendPostEffect(ssr);\r\n }\r\n if (!this._postEffectSSAO.get()) {\r\n const ssao = new SAO();\r\n ssao.enabled = false;\r\n ssao.scale = this._SSAOScale;\r\n ssao.bias = this._SSAOBias;\r\n ssao.radius = this._SSAORadius;\r\n ssao.intensity = this._SSAOIntensity;\r\n ssao.blurDepthCutoff = this._SSAOBlurDepthCutoff;\r\n this._postEffectSSAO.set(ssao);\r\n this._compositor.appendPostEffect(ssao);\r\n }\r\n if (!this._postEffectTAA.get()) {\r\n const taa = new TAA();\r\n taa.enabled = false;\r\n this._postEffectTAA.set(taa);\r\n this._compositor.appendPostEffect(taa);\r\n }\r\n if (!this._postEffectMotionBlur.get()) {\r\n const motionBlur = new MotionBlur();\r\n motionBlur.enabled = false;\r\n motionBlur.strength = this._motionBlurStrength;\r\n this._postEffectMotionBlur.set(motionBlur);\r\n this._compositor.appendPostEffect(motionBlur);\r\n }\r\n if (!this._postEffectTonemap.get()) {\r\n const tonemap = new Tonemap();\r\n tonemap.enabled = true;\r\n tonemap.exposure = this._tonemapExposure;\r\n this._postEffectTonemap.set(tonemap);\r\n this._compositor.appendPostEffect(tonemap);\r\n }\r\n if (!this._postEffectFXAA.get()) {\r\n const fxaa = new FXAA();\r\n fxaa.enabled = false;\r\n this._postEffectFXAA.set(fxaa);\r\n this._compositor.appendPostEffect(fxaa);\r\n }\r\n if (!this._postEffectBloom.get()) {\r\n const bloom = new Bloom();\r\n bloom.enabled = false;\r\n bloom.maxDownsampleLevel = this._bloomMaxDownsampleLevels;\r\n bloom.downsampleLimit = this._bloomDownsampleLimit;\r\n bloom.threshold = this._bloomThreshold;\r\n bloom.thresholdKnee = this._bloomThresholdKnee;\r\n bloom.intensity = this._bloomIntensity;\r\n this._postEffectBloom.set(bloom);\r\n this._compositor.appendPostEffect(bloom);\r\n }\r\n }\r\n /**\r\n * Renders a scene\r\n * @param scene - The scene to be rendered\r\n * @param compositor - Compositor instance that will be used to apply postprocess effects\r\n */\r\n render(scene: Scene) {\r\n const device = Application.instance.device;\r\n //this.updatePostProcessing(device);\r\n const useMotionVector = (this.TAA || this.motionBlur) && device.type !== 'webgl';\r\n const useTAA = useMotionVector && this.TAA;\r\n scene.dispatchEvent('startrender', scene, this, this._compositor);\r\n if (useMotionVector) {\r\n const width = device.getDrawingBufferWidth();\r\n const height = device.getDrawingBufferHeight();\r\n if (useTAA) {\r\n const halton = Camera._halton23[device.frameInfo.frameCounter % Camera._halton23.length];\r\n this._jitterValue.setXY((halton[0] * 2) / width, (halton[1] * 2) / height);\r\n } else {\r\n this._jitterValue.setXY(0, 0);\r\n }\r\n this._jitteredVPMatrix.set(this.getProjectionMatrix());\r\n this._jitteredVPMatrix[8] += this._jitterValue.x;\r\n this._jitteredVPMatrix[9] += this._jitterValue.y;\r\n this._jitteredVPMatrix.multiplyRight(this.viewMatrix);\r\n Matrix4x4.invert(this._jitteredVPMatrix, this._jitteredInvVPMatrix);\r\n if (!this._prevJitteredVPMatrix) {\r\n this._prevJitteredVPMatrix = new Matrix4x4();\r\n this._prevJitteredVPMatrix.set(this._jitteredVPMatrix);\r\n this._prevJitterValue = new Vector2(this._jitterValue);\r\n }\r\n if (!this._prevVPMatrix) {\r\n this._prevVPMatrix = new Matrix4x4();\r\n this._prevVPMatrix.set(this.viewProjectionMatrix);\r\n this._prevPosition = this.getWorldPosition();\r\n }\r\n } else {\r\n this._jitterValue.setXY(0, 0);\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n this._jitteredInvVPMatrix.set(this.invViewProjectionMatrix);\r\n }\r\n device.pushDeviceStates();\r\n device.reverseVertexWindingOrder(false);\r\n scene.getRenderer().renderScene(scene, this);\r\n device.popDeviceStates();\r\n if (useMotionVector) {\r\n this._prevJitteredVPMatrix.set(this._jitteredVPMatrix);\r\n this._prevJitterValue.set(this._jitterValue);\r\n this._prevVPMatrix.set(this.viewProjectionMatrix);\r\n this._prevPosition = this.getWorldPosition();\r\n }\r\n scene.dispatchEvent('endrender', scene, this, this._compositor);\r\n }\r\n async pickAsync(posX: number, posY: number): Promise<PickResult> {\r\n this._pickPosX = posX;\r\n this._pickPosY = posY;\r\n if (!this._pickResultPromise) {\r\n this._pickResultPromise = new Promise<PickResult>((resolve) => {\r\n this._pickResultResolve = (result: PickResult) => {\r\n resolve(result);\r\n this._pickResultPromise = null;\r\n this._pickResultResolve = null;\r\n };\r\n });\r\n }\r\n return this._pickResultPromise;\r\n }\r\n /** @internal */\r\n getPickResultResolveFunc() {\r\n return this._pickResultResolve;\r\n }\r\n /** @internal */\r\n getPickPosX() {\r\n return this._pickPosX;\r\n }\r\n /** @internal */\r\n getPickPosY() {\r\n return this._pickPosY;\r\n }\r\n /**\r\n * Updates the controller state\r\n */\r\n updateController() {\r\n this._controller?.update();\r\n }\r\n /**\r\n * Reset the controller\r\n */\r\n resetController() {\r\n this._controller?.reset();\r\n }\r\n /** @internal */\r\n get jitteredVPMatrix() {\r\n return this._jitteredVPMatrix;\r\n }\r\n /** @internal */\r\n get jitteredInvVPMatrix() {\r\n return this._jitteredInvVPMatrix;\r\n }\r\n /** @internal */\r\n get jitterValue() {\r\n return this._jitterValue;\r\n }\r\n /** @internal */\r\n get prevJitteredVPMatrix() {\r\n return this._prevJitteredVPMatrix;\r\n }\r\n /** @internal */\r\n get prevJitterValue() {\r\n return this._prevJitterValue;\r\n }\r\n /** @internal */\r\n get prevVPMatrix() {\r\n return this._prevVPMatrix;\r\n }\r\n /** @internal */\r\n get prevPosition() {\r\n return this._prevPosition;\r\n }\r\n /** @internal */\r\n private setController(controller: BaseCameraController): this {\r\n if (this._controller !== controller) {\r\n if (controller && controller._getCamera() && controller._getCamera() !== this) {\r\n throw new Error(\r\n 'Camera.setController failed: one camera controller object cannot be assigned to multiple camera'\r\n );\r\n }\r\n this._controller?._setCamera(null);\r\n this._controller = controller;\r\n this._controller?._setCamera(this);\r\n }\r\n return this;\r\n }\r\n /** @internal */\r\n protected _invalidate(projectMatrixChanged: boolean) {\r\n this._dirty = true;\r\n if (projectMatrixChanged) {\r\n this._frustumV = null;\r\n }\r\n }\r\n /** @internal */\r\n protected _compute() {\r\n this._computeProj();\r\n Matrix4x4.invertAffine(this.worldMatrix, this._viewMatrix);\r\n Matrix4x4.multiply(this._projMatrix, this._viewMatrix, this._viewProjMatrix);\r\n Matrix4x4.invert(this._viewProjMatrix, this._invViewProjMatrix);\r\n if (!this._frustum) {\r\n this._frustum = new Frustum(this._viewProjMatrix);\r\n } else {\r\n this._frustum.initWithMatrix(this._viewProjMatrix);\r\n }\r\n }\r\n /** @internal */\r\n protected _computeProj() {}\r\n /** @internal */\r\n protected _onTransformChanged(invalidateLocal: boolean) {\r\n super._onTransformChanged(invalidateLocal);\r\n this._invalidate(false);\r\n }\r\n /** {@inheritdoc SceneNode.dispose} */\r\n dispose() {\r\n this.setController(null);\r\n this.clearHistoryData();\r\n this._projMatrix = null;\r\n this._viewMatrix = null;\r\n this._viewProjMatrix = null;\r\n this._postEffectBloom.dispose();\r\n this._postEffectFXAA.dispose();\r\n this._postEffectMotionBlur.dispose();\r\n this._postEffectSSAO.dispose();\r\n this._postEffectSSR.dispose();\r\n this._postEffectTAA.dispose();\r\n this._postEffectTonemap.dispose();\r\n this._oit.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"],"names":["Camera","SceneNode","_halton23","halton23","_historyData","WeakMap","scene","projectionMatrix","_projMatrix","Matrix4x4","identity","_invProjMatrix","invert","_viewMatrix","_viewProjMatrix","_invViewProjMatrix","_clipPlane","_dirty","_controller","_viewport","_scissor","_clipMask","_frustum","_frustumV","_oit","DRef","_depthPrePass","_HiZ","_toneMap","_postEffectTonemap","_tonemapExposure","_motionBlur","_postEffectMotionBlur","_motionBlurStrength","_bloom","_postEffectBloom","_bloomMaxDownsampleLevels","_bloomDownsampleLimit","_bloomThreshold","_bloomThresholdKnee","_bloomIntensity","_FXAA","_postEffectFXAA","_TAA","_postEffectTAA","_TAADebug","_SSR","_postEffectSSR","_ssrParams","Vector4","_ssrMaxRoughness","_ssrRoughnessFactor","_ssrStride","_ssrCalcThickness","_ssrBlurriness","_ssrBlurDepthCutoff","_ssrBlurKernelSize","_ssrBlurStdDev","_SSAO","_postEffectSSAO","_SSAOScale","_SSAOBias","_SSAOIntensity","_SSAORadius","_SSAOBlurDepthCutoff","_pickResult","_commandBufferReuse","_jitteredVPMatrix","_jitteredInvVPMatrix","_jitterValue","Vector2","_prevVPMatrix","_prevPosition","_prevJitteredVPMatrix","_prevJitterValue","_pickResultPromise","_pickResultResolve","_pickPosX","_pickPosY","_compositor","Compositor","updatePostProcessing","clone","method","recursive","other","copyFrom","parent","clipPlane","Plane","HiZ","toneMap","toneMapExposure","bloom","FXAA","TAA","TAADebug","SSR","ssrMaxRoughness","ssrRoughnessFactor","ssrStride","ssrMaxDistance","ssrIterations","ssrThickness","ssrCalcThickness","ssrBlurScale","ssrBlurDepthCutoff","ssrBlurKernelSize","depthPrePass","commandBufferReuse","oit","clipMask","viewport","slice","scissor","setProjectionMatrix","getProjectionMatrix","compositor","plane","_invalidate","val","get","enabled","motionBlur","motionBlurStrength","strength","bloomMaxDownsampleLevels","maxDownsampleLevel","bloomDownsampleLimit","downsampleLimit","bloomThreshold","threshold","bloomThresholdKnee","thresholdKnee","bloomIntensity","intensity","exposure","x","y","z","ssrBlurStdDev","ssrParams","SSAO","SSAOScale","scale","SSAOBias","bias","SSAORadius","radius","SSAOIntensity","SSAOBlurDepthCutoff","blurDepthCutoff","set","rect","handleEvent","ev","type","handled","onMouseDown","onMouseUp","onMouseMove","onMouseWheel","onKeyDown","onKeyUp","preventDefault","constructRay","width","Application","instance","device","getViewport","height","ndcX","ndcY","nearClip","farClip","nearWorld","invViewProjectionMatrix","transform","farWorld","isPerspective","scaleBy","w","vEye","getWorldPosition","xyz","vDir","Vector3","sub","inplaceNormalize","Ray","lookAt","eye","target","up","setLocalTransform","lookAtCubeFace","face","position","setPerspective","fovY","aspect","zNear","zFar","perspective","setOrtho","left","right","bottom","top","near","far","ortho","matrix","_compute","getInvProjectionMatrix","getRotationMatrix","rotationMatrix","worldMatrix","decompose","xAxis","getRow","yAxis","zAxis","setRow","viewMatrix","viewProjectionMatrix","frustum","frustumViewSpace","Frustum","controller","setController","isCamera","getNearPlane","getFarPlane","getFOV","getFov","getTanHalfFovy","getTanHalfFov","getAspect","isOrtho","getHistoryData","data","prevColorTex","prevMotionVectorTex","clearHistoryData","pool","releaseTexture","delete","clear","ssr","appendPostEffect","ssao","SAO","taa","MotionBlur","tonemap","Tonemap","fxaa","Bloom","render","useMotionVector","useTAA","dispatchEvent","getDrawingBufferWidth","getDrawingBufferHeight","halton","frameInfo","frameCounter","length","setXY","multiplyRight","pushDeviceStates","reverseVertexWindingOrder","getRenderer","renderScene","popDeviceStates","pickAsync","posX","posY","Promise","resolve","result","getPickResultResolveFunc","getPickPosX","getPickPosY","updateController","update","resetController","reset","jitteredVPMatrix","jitteredInvVPMatrix","jitterValue","prevJitteredVPMatrix","prevJitterValue","prevVPMatrix","prevPosition","_getCamera","Error","_setCamera","projectMatrixChanged","_computeProj","invertAffine","multiply","initWithMatrix","_onTransformChanged","invalidateLocal","dispose"],"mappings":";;;;;;;;;;;;AAuCA;;;IAIO,MAAMA,MAAeC,SAAAA,SAAAA,CAAAA;AAC1B,qBACA,OAAwBC,SAAYC,GAAAA,QAAAA,CAAS,EAAI,CAAA;AACjD,qBACA,OAAwBC,YAAmD,GAAA,IAAIC,OAAU,EAAA;qBAEzF,WAAiC;qBAEjC,cAAoC;qBAEpC,WAAiC;qBAEjC,eAAqC;qBAErC,eAAqC;qBAErC,kBAAwC;qBAExC,UAA4B;qBAE5B,WAA4C;qBAE5C,QAA4B;qBAE5B,SAA6B;qBAE7B,MAA0B;qBAE1B,SAA8B;qBAE9B,QAA6B;qBAE7B,SAA4B;qBAE5B,IAA0B;qBAE1B,aAAiC;qBAEjC,mBAAuC;qBAEvC,IAAwB;qBAExB,QAA4B;qBAE5B,kBAA4C;qBAE5C,gBAAmC;qBAEnC,WAA+B;qBAE/B,qBAAkD;qBAElD,mBAAsC;qBAEtC,MAA0B;qBAE1B,gBAAwC;qBAExC,yBAA4C;qBAE5C,qBAAwC;qBAExC,eAAkC;qBAElC,mBAAsC;qBAEtC,eAAkC;qBAElC,KAAyB;qBAEzB,eAAsC;qBAEtC,IAAwB;qBAExB,cAAoC;qBAEpC,SAA4B;qBAE5B,IAAwB;qBAExB,cAAoC;qBAEpC,UAA8B;qBAE9B,gBAAmC;qBAEnC,mBAAsC;qBAEtC,UAA6B;qBAE7B,iBAAqC;qBAErC,cAAiC;qBAEjC,mBAAsC;qBAEtC,kBAAqC;qBAErC,cAAiC;qBAEjC,KAAyB;qBAEzB,eAAqC;qBAErC,UAA6B;qBAE7B,SAA4B;qBAE5B,WAA8B;qBAE9B,cAAiC;qBAEjC,oBAAuC;qBAEvC,kBAAkD;qBAElD,kBAA2D;qBAE3D,SAA4B;qBAE5B,SAA4B;qBAE5B,WAAkC;qBAElC,YAAgC;qBAEhC,gBAAoC;qBAEpC,iBAAuC;qBAEvC,oBAA0C;qBAE1C,aAAmC;qBAEnC,aAAiC;qBAEjC,qBAA2C;qBAE3C,WAAkC;AAClC;;;;;AAKC,MACD,WAAYC,CAAAA,KAAY,EAAEC,gBAA4B,CAAE;AACtD,QAAA,KAAK,CAACD,KAAAA,CAAAA;AACN,QAAA,IAAI,CAACE,WAAW,GAAGD,gBAAAA,IAAoBE,UAAUC,QAAQ,EAAA;QACzD,IAAI,CAACC,cAAc,GAAGF,SAAAA,CAAUG,MAAM,CAAC,IAAI,CAACJ,WAAW,CAAA;AACvD,QAAA,IAAI,CAACK,WAAW,GAAGJ,SAAAA,CAAUC,QAAQ,EAAA;AACrC,QAAA,IAAI,CAACI,eAAe,GAAGL,SAAAA,CAAUC,QAAQ,EAAA;AACzC,QAAA,IAAI,CAACK,kBAAkB,GAAGN,SAAAA,CAAUC,QAAQ,EAAA;QAC5C,IAAI,CAACM,UAAU,GAAG,IAAA;QAClB,IAAI,CAACC,MAAM,GAAG,IAAA;QACd,IAAI,CAACC,WAAW,GAAG,IAAA;QACnB,IAAI,CAACC,SAAS,GAAG,IAAA;QACjB,IAAI,CAACC,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACC,SAAS,GAAG,CAAA;QACjB,IAAI,CAACC,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACC,SAAS,GAAG,IAAA;QACjB,IAAI,CAACC,IAAI,GAAG,IAAIC,IAAAA,EAAAA;QAChB,IAAI,CAACC,aAAa,GAAG,KAAA;QACrB,IAAI,CAACC,IAAI,GAAG,KAAA;QACZ,IAAI,CAACC,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACC,kBAAkB,GAAG,IAAIJ,IAAAA,EAAAA;QAC9B,IAAI,CAACK,gBAAgB,GAAG,CAAA;QACxB,IAAI,CAACC,WAAW,GAAG,KAAA;QACnB,IAAI,CAACC,qBAAqB,GAAG,IAAIP,IAAAA,EAAAA;QACjC,IAAI,CAACQ,mBAAmB,GAAG,CAAA;QAC3B,IAAI,CAACC,MAAM,GAAG,KAAA;QACd,IAAI,CAACC,gBAAgB,GAAG,IAAIV,IAAAA,EAAAA;QAC5B,IAAI,CAACW,yBAAyB,GAAG,CAAA;QACjC,IAAI,CAACC,qBAAqB,GAAG,EAAA;QAC7B,IAAI,CAACC,eAAe,GAAG,GAAA;QACvB,IAAI,CAACC,mBAAmB,GAAG,CAAA;QAC3B,IAAI,CAACC,eAAe,GAAG,CAAA;QACvB,IAAI,CAACC,KAAK,GAAG,KAAA;QACb,IAAI,CAACC,eAAe,GAAG,IAAIjB,IAAAA,EAAAA;QAC3B,IAAI,CAACkB,IAAI,GAAG,KAAA;QACZ,IAAI,CAACC,cAAc,GAAG,IAAInB,IAAAA,EAAAA;QAC1B,IAAI,CAACoB,SAAS,GAAG,CAAA;QACjB,IAAI,CAACC,IAAI,GAAG,KAAA;QACZ,IAAI,CAACC,cAAc,GAAG,IAAItB,IAAAA,EAAAA;AAC1B,QAAA,IAAI,CAACuB,UAAU,GAAG,IAAIC,OAAQ,CAAA,GAAA,EAAK,KAAK,GAAK,EAAA,CAAA,CAAA;QAC7C,IAAI,CAACC,gBAAgB,GAAG,GAAA;QACxB,IAAI,CAACC,mBAAmB,GAAG,CAAA;QAC3B,IAAI,CAACC,UAAU,GAAG,CAAA;QAClB,IAAI,CAACC,iBAAiB,GAAG,KAAA;QACzB,IAAI,CAACC,cAAc,GAAG,IAAA;QACtB,IAAI,CAACC,mBAAmB,GAAG,CAAA;QAC3B,IAAI,CAACC,kBAAkB,GAAG,EAAA;QAC1B,IAAI,CAACC,cAAc,GAAG,EAAA;QACtB,IAAI,CAACC,KAAK,GAAG,KAAA;QACb,IAAI,CAACC,eAAe,GAAG,IAAIlC,IAAAA,EAAAA;QAC3B,IAAI,CAACmC,UAAU,GAAG,EAAA;QAClB,IAAI,CAACC,SAAS,GAAG,CAAA;QACjB,IAAI,CAACC,cAAc,GAAG,KAAA;QACtB,IAAI,CAACC,WAAW,GAAG,GAAA;QACnB,IAAI,CAACC,oBAAoB,GAAG,CAAA;QAC5B,IAAI,CAACC,WAAW,GAAG,IAAA;QACnB,IAAI,CAACC,mBAAmB,GAAG,IAAA;QAC3B,IAAI,CAACC,iBAAiB,GAAG,IAAI1D,SAAAA,EAAAA;QAC7B,IAAI,CAAC2D,oBAAoB,GAAG,IAAI3D,SAAAA,EAAAA;AAChC,QAAA,IAAI,CAAC4D,YAAY,GAAG,IAAIC,QAAQ,CAAG,EAAA,CAAA,CAAA;QACnC,IAAI,CAACC,aAAa,GAAG,IAAA;QACrB,IAAI,CAACC,aAAa,GAAG,IAAA;QACrB,IAAI,CAACC,qBAAqB,GAAG,IAAA;QAC7B,IAAI,CAACC,gBAAgB,GAAG,IAAA;QACxB,IAAI,CAACC,kBAAkB,GAAG,IAAA;QAC1B,IAAI,CAACC,kBAAkB,GAAG,IAAA;QAC1B,IAAI,CAACC,SAAS,GAAG,CAAA;QACjB,IAAI,CAACC,SAAS,GAAG,CAAA;QACjB,IAAI,CAACC,WAAW,GAAG,IAAIC,UAAAA,EAAAA;AACvB,QAAA,IAAI,CAACC,oBAAoB,EAAA;AAC3B;IACAC,KAAMC,CAAAA,MAAuB,EAAEC,SAAkB,EAAU;AACzD,QAAA,MAAMC,KAAQ,GAAA,IAAIrF,MAAO,CAAA,IAAI,CAACM,KAAK,CAAA;AACnC+E,QAAAA,KAAAA,CAAMC,QAAQ,CAAC,IAAI,EAAEH,MAAQC,EAAAA,SAAAA,CAAAA;AAC7BC,QAAAA,KAAAA,CAAME,MAAM,GAAG,IAAI,CAACA,MAAM;QAC1B,OAAOF,KAAAA;AACT;AACAC,IAAAA,QAAAA,CAASD,KAAW,EAAEF,MAAuB,EAAEC,SAAkB,EAAQ;QACvE,KAAK,CAACE,QAASD,CAAAA,KAAAA,EAAOF,MAAQC,EAAAA,SAAAA,CAAAA;QAC9B,IAAI,CAACI,SAAS,GAAGH,KAAMG,CAAAA,SAAS,GAAG,IAAIC,KAAAA,CAAMJ,KAAMG,CAAAA,SAAS,CAAI,GAAA,IAAA;AAChE,QAAA,IAAI,CAACE,GAAG,GAAGL,KAAAA,CAAMK,GAAG;AACpB,QAAA,IAAI,CAACC,OAAO,GAAGN,KAAAA,CAAMM,OAAO;AAC5B,QAAA,IAAI,CAACC,eAAe,GAAGP,KAAAA,CAAMO,eAAe;AAC5C,QAAA,IAAI,CAACC,KAAK,GAAGR,KAAAA,CAAMQ,KAAK;AACxB,QAAA,IAAI,CAACC,IAAI,GAAGT,KAAAA,CAAMS,IAAI;AACtB,QAAA,IAAI,CAACC,GAAG,GAAGV,KAAAA,CAAMU,GAAG;AACpB,QAAA,IAAI,CAACC,QAAQ,GAAGX,KAAAA,CAAMW,QAAQ;AAC9B,QAAA,IAAI,CAACC,GAAG,GAAGZ,KAAAA,CAAMY,GAAG;AACpB,QAAA,IAAI,CAACC,eAAe,GAAGb,KAAAA,CAAMa,eAAe;AAC5C,QAAA,IAAI,CAACC,kBAAkB,GAAGd,KAAAA,CAAMc,kBAAkB;AAClD,QAAA,IAAI,CAACC,SAAS,GAAGf,KAAAA,CAAMe,SAAS;AAChC,QAAA,IAAI,CAACC,cAAc,GAAGhB,KAAAA,CAAMgB,cAAc;AAC1C,QAAA,IAAI,CAACC,aAAa,GAAGjB,KAAAA,CAAMiB,aAAa;AACxC,QAAA,IAAI,CAACC,YAAY,GAAGlB,KAAAA,CAAMkB,YAAY;AACtC,QAAA,IAAI,CAACC,gBAAgB,GAAGnB,KAAAA,CAAMmB,gBAAgB;AAC9C,QAAA,IAAI,CAACC,YAAY,GAAGpB,KAAAA,CAAMoB,YAAY;AACtC,QAAA,IAAI,CAACC,kBAAkB,GAAGrB,KAAAA,CAAMqB,kBAAkB;AAClD,QAAA,IAAI,CAACC,iBAAiB,GAAGtB,KAAAA,CAAMsB,iBAAiB;AAChD,QAAA,IAAI,CAACC,YAAY,GAAGvB,KAAAA,CAAMuB,YAAY;AACtC,QAAA,IAAI,CAACC,kBAAkB,GAAGxB,KAAAA,CAAMwB,kBAAkB;AAClD,QAAA,IAAI,CAACC,GAAG,GAAGzB,KAAAA,CAAMyB,GAAG;AACpB,QAAA,IAAI,CAACC,QAAQ,GAAG1B,KAAAA,CAAM0B,QAAQ;AAC9B,QAAA,IAAI,CAACC,QAAQ,GAAG3B,KAAM2B,CAAAA,QAAQ,EAAEC,KAAW,EAAA,IAAA,IAAA;AAC3C,QAAA,IAAI,CAACC,OAAO,GAAG7B,KAAM6B,CAAAA,OAAO,EAAED,KAAW,EAAA,IAAA,IAAA;AACzC,QAAA,IAAI,CAACE,mBAAmB,CAAC9B,KAAAA,CAAM+B,mBAAmB,EAAA,CAAA;AACpD;sBAEA,IAAIC,UAAa,GAAA;QACf,OAAO,IAAI,CAACtC,WAAW;AACzB;sCAEA,IAAIS,SAAmB,GAAA;QACrB,OAAO,IAAI,CAACxE,UAAU;AACxB;IACA,IAAIwE,SAAAA,CAAU8B,KAAY,EAAE;QAC1B,IAAI,CAACtG,UAAU,GAAGsG,KAAAA;QAClB,IAAI,CAACC,WAAW,CAAC,KAAA,CAAA;AACnB;AACA;;;AAGC,MACD,IAAI7B,GAAe,GAAA;QACjB,OAAO,IAAI,CAAC/D,IAAI;AAClB;IACA,IAAI+D,GAAAA,CAAI8B,GAAY,EAAE;AACpB,QAAA,IAAI,CAAC7F,IAAI,GAAG,CAAC,CAAC6F,GAAAA;AAChB;AACA;;AAEC,MACD,IAAI7B,OAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC9D,kBAAkB,CAAC4F,GAAG,GAAGC,OAAO;AAC9C;IACA,IAAI/B,OAAAA,CAAQ6B,GAAY,EAAE;QACxB,IAAI,CAAC3F,kBAAkB,CAAC4F,GAAG,GAAGC,OAAO,GAAG,CAAC,CAACF,GAAAA;AAC5C;AACA;;AAEC,MACD,IAAIG,UAAsB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC3F,qBAAqB,CAACyF,GAAG,GAAGC,OAAO;AACjD;IACA,IAAIC,UAAAA,CAAWH,GAAY,EAAE;QAC3B,IAAI,CAACxF,qBAAqB,CAACyF,GAAG,GAAGC,OAAO,GAAG,CAAC,CAACF,GAAAA;AAC/C;gCAEA,IAAII,kBAA6B,GAAA;QAC/B,OAAO,IAAI,CAAC3F,mBAAmB;AACjC;IACA,IAAI2F,kBAAAA,CAAmBJ,GAAW,EAAE;QAClC,IAAI,CAACvF,mBAAmB,GAAGuF,GAAAA;AAC3B,QAAA,IAAI,IAAI,CAACxF,qBAAqB,CAACyF,GAAG,EAAI,EAAA;YACpC,IAAI,CAACzF,qBAAqB,CAACyF,GAAG,GAAGI,QAAQ,GAAG,IAAI,CAAC5F,mBAAmB;AACtE;AACF;AACA;;AAEC,MACD,IAAI4D,KAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC1D,gBAAgB,CAACsF,GAAG,GAAGC,OAAO;AAC5C;IACA,IAAI7B,KAAAA,CAAM2B,GAAY,EAAE;QACtB,IAAI,CAACrF,gBAAgB,CAACsF,GAAG,GAAGC,OAAO,GAAG,CAAC,CAACF,GAAAA;AAC1C;AACA;;AAEC,MACD,IAAIM,wBAA2B,GAAA;QAC7B,OAAO,IAAI,CAAC1F,yBAAyB;AACvC;IACA,IAAI0F,wBAAAA,CAAyBN,GAAW,EAAE;QACxC,IAAI,CAACpF,yBAAyB,GAAGoF,GAAAA;AACjC,QAAA,IAAI,IAAI,CAACrF,gBAAgB,CAACsF,GAAG,EAAI,EAAA;AAC/B,YAAA,IAAI,CAACtF,gBAAgB,CAACsF,GAAG,EAAA,CAAGM,kBAAkB,GAAGP,GAAAA;AACnD;AACF;AACA;;AAEC,MACD,IAAIQ,oBAAuB,GAAA;QACzB,OAAO,IAAI,CAAC3F,qBAAqB;AACnC;IACA,IAAI2F,oBAAAA,CAAqBR,GAAW,EAAE;QACpC,IAAI,CAACnF,qBAAqB,GAAGmF,GAAAA;AAC7B,QAAA,IAAI,IAAI,CAACrF,gBAAgB,CAACsF,GAAG,EAAI,EAAA;AAC/B,YAAA,IAAI,CAACtF,gBAAgB,CAACsF,GAAG,EAAA,CAAGQ,eAAe,GAAGT,GAAAA;AAChD;AACF;AACA;;AAEC,MACD,IAAIU,cAAiB,GAAA;QACnB,OAAO,IAAI,CAAC5F,eAAe;AAC7B;IACA,IAAI4F,cAAAA,CAAeV,GAAW,EAAE;QAC9B,IAAI,CAAClF,eAAe,GAAGkF,GAAAA;AACvB,QAAA,IAAI,IAAI,CAACrF,gBAAgB,CAACsF,GAAG,EAAI,EAAA;AAC/B,YAAA,IAAI,CAACtF,gBAAgB,CAACsF,GAAG,EAAA,CAAGU,SAAS,GAAGX,GAAAA;AAC1C;AACF;AACA;;AAEC,MACD,IAAIY,kBAAqB,GAAA;QACvB,OAAO,IAAI,CAAC7F,mBAAmB;AACjC;IACA,IAAI6F,kBAAAA,CAAmBZ,GAAW,EAAE;QAClC,IAAI,CAACjF,mBAAmB,GAAGiF,GAAAA;AAC3B,QAAA,IAAI,IAAI,CAACrF,gBAAgB,CAACsF,GAAG,EAAI,EAAA;AAC/B,YAAA,IAAI,CAACtF,gBAAgB,CAACsF,GAAG,EAAA,CAAGY,aAAa,GAAGb,GAAAA;AAC9C;AACF;AACA;;AAEC,MACD,IAAIc,cAAiB,GAAA;QACnB,OAAO,IAAI,CAAC9F,eAAe;AAC7B;IACA,IAAI8F,cAAAA,CAAed,GAAW,EAAE;QAC9B,IAAI,CAAChF,eAAe,GAAGgF,GAAAA;AACvB,QAAA,IAAI,IAAI,CAACrF,gBAAgB,CAACsF,GAAG,EAAI,EAAA;AAC/B,YAAA,IAAI,CAACtF,gBAAgB,CAACsF,GAAG,EAAA,CAAGc,SAAS,GAAGf,GAAAA;AAC1C;AACF;AACA;;AAEC,MACD,IAAI1B,IAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAACpD,eAAe,CAAC+E,GAAG,GAAGC,OAAO;AAC3C;IACA,IAAI5B,IAAAA,CAAK0B,GAAY,EAAE;QACrB,IAAI,CAAC9E,eAAe,CAAC+E,GAAG,GAAGC,OAAO,GAAG,CAAC,CAACF,GAAAA;AACzC;AACA;;AAEC,MACD,IAAI5B,eAA0B,GAAA;QAC5B,OAAO,IAAI,CAAC9D,gBAAgB;AAC9B;IACA,IAAI8D,eAAAA,CAAgB4B,GAAW,EAAE;QAC/B,IAAI,CAAC1F,gBAAgB,GAAG0F,GAAAA;AACxB,QAAA,IAAI,IAAI,CAAC3F,kBAAkB,CAAC4F,GAAG,EAAI,EAAA;AACjC,YAAA,IAAI,CAAC5F,kBAAkB,CAAC4F,GAAG,EAAA,CAAGe,QAAQ,GAAGhB,GAAAA;AAC3C;AACF;AACA;;AAEC,MACD,IAAIzB,GAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAACnD,cAAc,CAAC6E,GAAG,GAAGC,OAAO;AAC1C;IACA,IAAI3B,GAAAA,CAAIyB,GAAY,EAAE;QACpB,IAAI,CAAC5E,cAAc,CAAC6E,GAAG,GAAGC,OAAO,GAAG,CAAC,CAACF,GAAAA;AACxC;AACA;;AAEC,MACD,IAAIxB,QAAmB,GAAA;QACrB,OAAO,IAAI,CAACnD,SAAS;AACvB;IACA,IAAImD,QAAAA,CAASwB,GAAW,EAAE;QACxB,IAAI,CAAC3E,SAAS,GAAG2E,GAAAA;AACnB;AACA;;AAEC,MACD,IAAIvB,GAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAClD,cAAc,CAAC0E,GAAG,GAAGC,OAAO;AAC1C;IACA,IAAIzB,GAAAA,CAAIuB,GAAY,EAAE;QACpB,IAAI,CAACzE,cAAc,CAAC0E,GAAG,GAAGC,OAAO,GAAG,CAAC,CAACF,GAAAA;AACxC;AACA;;;AAGC,MACD,IAAItB,eAA0B,GAAA;QAC5B,OAAO,IAAI,CAAChD,gBAAgB;AAC9B;IACA,IAAIgD,eAAAA,CAAgBsB,GAAW,EAAE;QAC/B,IAAI,CAACtE,gBAAgB,GAAGsE,GAAAA;AAC1B;AACA;;;AAGC,MACD,IAAIrB,kBAA6B,GAAA;QAC/B,OAAO,IAAI,CAAChD,mBAAmB;AACjC;IACA,IAAIgD,kBAAAA,CAAmBqB,GAAW,EAAE;QAClC,IAAI,CAACrE,mBAAmB,GAAGqE,GAAAA;AAC7B;AACA;;;AAGC,MACD,IAAIpB,SAAoB,GAAA;QACtB,OAAO,IAAI,CAAChD,UAAU;AACxB;IACA,IAAIgD,SAAAA,CAAUoB,GAAW,EAAE;QACzB,IAAI,CAACpE,UAAU,GAAGoE,GAAAA;AACpB;AACA;;;AAGC,MACD,IAAInB,cAAyB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAACrD,UAAU,CAACyF,CAAC;AAC1B;IACA,IAAIpC,cAAAA,CAAemB,GAAW,EAAE;AAC9B,QAAA,IAAI,CAACxE,UAAU,CAACyF,CAAC,GAAGjB,GAAAA;AACtB;AACA;;;AAGC,MACD,IAAIlB,aAAwB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAACtD,UAAU,CAAC0F,CAAC;AAC1B;IACA,IAAIpC,aAAAA,CAAckB,GAAW,EAAE;AAC7B,QAAA,IAAI,CAACxE,UAAU,CAAC0F,CAAC,GAAGlB,GAAAA;AACtB;AACA;;;AAGC,MACD,IAAIjB,YAAuB,GAAA;AACzB,QAAA,OAAO,IAAI,CAACvD,UAAU,CAAC2F,CAAC;AAC1B;IACA,IAAIpC,YAAAA,CAAaiB,GAAW,EAAE;AAC5B,QAAA,IAAI,CAACxE,UAAU,CAAC2F,CAAC,GAAGnB,GAAAA;AACtB;AACA;;;AAGC,MACD,IAAIhB,gBAA4B,GAAA;QAC9B,OAAO,IAAI,CAACnD,iBAAiB;AAC/B;IACA,IAAImD,gBAAAA,CAAiBgB,GAAY,EAAE;AACjC,QAAA,IAAI,CAACnE,iBAAiB,GAAG,CAAC,CAACmE,GAAAA;AAC7B;AACA;;;AAGC,MACD,IAAIf,YAAuB,GAAA;QACzB,OAAO,IAAI,CAACnD,cAAc;AAC5B;IACA,IAAImD,YAAAA,CAAae,GAAW,EAAE;QAC5B,IAAI,CAAClE,cAAc,GAAGkE,GAAAA;AACxB;AACA;;;AAGC,MACD,IAAId,kBAA6B,GAAA;QAC/B,OAAO,IAAI,CAACnD,mBAAmB;AACjC;IACA,IAAImD,kBAAAA,CAAmBc,GAAW,EAAE;QAClC,IAAI,CAACjE,mBAAmB,GAAGiE,GAAAA;AAC7B;AACA;;;AAGC,MACD,IAAIb,iBAA4B,GAAA;QAC9B,OAAO,IAAI,CAACnD,kBAAkB;AAChC;IACA,IAAImD,iBAAAA,CAAkBa,GAAW,EAAE;QACjC,IAAI,CAAChE,kBAAkB,GAAGgE,GAAAA;AAC5B;AACA;;;AAGC,MACD,IAAIoB,aAAwB,GAAA;QAC1B,OAAO,IAAI,CAACnF,cAAc;AAC5B;IACA,IAAImF,aAAAA,CAAcpB,GAAW,EAAE;QAC7B,IAAI,CAAC/D,cAAc,GAAG+D,GAAAA;AACxB;qBAEA,IAAIqB,SAAqB,GAAA;QACvB,OAAO,IAAI,CAAC7F,UAAU;AACxB;AACA;;AAEC,MACD,IAAI8F,IAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAACnF,eAAe,CAAC8D,GAAG,GAAGC,OAAO;AAC3C;IACA,IAAIoB,IAAAA,CAAKtB,GAAY,EAAE;QACrB,IAAI,CAAC7D,eAAe,CAAC8D,GAAG,GAAGC,OAAO,GAAG,CAAC,CAACF,GAAAA;AACzC;sBAEA,IAAIuB,SAAY,GAAA;QACd,OAAO,IAAI,CAACnF,UAAU;AACxB;IACA,IAAImF,SAAAA,CAAUvB,GAAW,EAAE;QACzB,IAAI,CAAC5D,UAAU,GAAG4D,GAAAA;AAClB,QAAA,IAAI,IAAI,CAAC7D,eAAe,CAAC8D,GAAG,EAAI,EAAA;AAC9B,YAAA,IAAI,CAAC9D,eAAe,CAAC8D,GAAG,EAAA,CAAGuB,KAAK,GAAGxB,GAAAA;AACrC;AACF;qBAEA,IAAIyB,QAAW,GAAA;QACb,OAAO,IAAI,CAACpF,SAAS;AACvB;IACA,IAAIoF,QAAAA,CAASzB,GAAW,EAAE;QACxB,IAAI,CAAC3D,SAAS,GAAG2D,GAAAA;AACjB,QAAA,IAAI,IAAI,CAAC7D,eAAe,CAAC8D,GAAG,EAAI,EAAA;AAC9B,YAAA,IAAI,CAAC9D,eAAe,CAAC8D,GAAG,EAAA,CAAGyB,IAAI,GAAG1B,GAAAA;AACpC;AACF;uBAEA,IAAI2B,UAAa,GAAA;QACf,OAAO,IAAI,CAACpF,WAAW;AACzB;IACA,IAAIoF,UAAAA,CAAW3B,GAAW,EAAE;QAC1B,IAAI,CAACzD,WAAW,GAAGyD,GAAAA;AACnB,QAAA,IAAI,IAAI,CAAC7D,eAAe,CAAC8D,GAAG,EAAI,EAAA;AAC9B,YAAA,IAAI,CAAC9D,eAAe,CAAC8D,GAAG,EAAA,CAAG2B,MAAM,GAAG5B,GAAAA;AACtC;AACF;0BAEA,IAAI6B,aAAgB,GAAA;QAClB,OAAO,IAAI,CAACvF,cAAc;AAC5B;IACA,IAAIuF,aAAAA,CAAc7B,GAAW,EAAE;QAC7B,IAAI,CAAC1D,cAAc,GAAG0D,GAAAA;AACtB,QAAA,IAAI,IAAI,CAAC7D,eAAe,CAAC8D,GAAG,EAAI,EAAA;AAC9B,YAAA,IAAI,CAAC9D,eAAe,CAAC8D,GAAG,EAAA,CAAGc,SAAS,GAAGf,GAAAA;AACzC;AACF;6BAEA,IAAI8B,mBAAsB,GAAA;QACxB,OAAO,IAAI,CAACtF,oBAAoB;AAClC;IACA,IAAIsF,mBAAAA,CAAoB9B,GAAW,EAAE;QACnC,IAAI,CAACxD,oBAAoB,GAAGwD,GAAAA;AAC5B,QAAA,IAAI,IAAI,CAAC7D,eAAe,CAAC8D,GAAG,EAAI,EAAA;AAC9B,YAAA,IAAI,CAAC9D,eAAe,CAAC8D,GAAG,EAAA,CAAG8B,eAAe,GAAG/B,GAAAA;AAC/C;AACF;2CAEA,IAAIZ,YAAwB,GAAA;QAC1B,OAAO,IAAI,CAAClF,aAAa;AAC3B;IACA,IAAIkF,YAAAA,CAAaY,GAAY,EAAE;AAC7B,QAAA,IAAI,CAAC9F,aAAa,GAAG,CAAC,CAAC8F,GAAAA;AACzB;8DAEA,IAAIX,kBAA8B,GAAA;QAChC,OAAO,IAAI,CAAC3C,mBAAmB;AACjC;IACA,IAAI2C,kBAAAA,CAAmBW,GAAY,EAAE;AACnC,QAAA,IAAI,CAACtD,mBAAmB,GAAG,CAAC,CAACsD,GAAAA;AAC/B;eAEA,IAAIV,GAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAACtF,IAAI,CAACiG,GAAG,EAAA;AACtB;IACA,IAAIX,GAAAA,CAAIU,GAAQ,EAAE;AAChB,QAAA,IAAI,CAAChG,IAAI,CAACgI,GAAG,CAAChC,GAAAA,CAAAA;AAChB;2BAEA,IAAIT,QAAmB,GAAA;QACrB,OAAO,IAAI,CAAC1F,SAAS;AACvB;IACA,IAAI0F,QAAAA,CAASS,GAAW,EAAE;QACxB,IAAI,CAACnG,SAAS,GAAGmG,GAAAA;AACnB;2EAEA,IAAIR,QAAqB,GAAA;QACvB,OAAO,IAAI,CAAC7F,SAAS,GAAG;AAAI,YAAA,GAAA,IAAI,CAACA;SAAU,GAAG,IAAA;AAChD;IACA,IAAI6F,QAAAA,CAASyC,IAAc,EAAE;AAC3B,QAAA,IAAI,CAACtI,SAAS,GAAGsI,IAAAA,EAAMxC,KAAW,EAAA,IAAA,IAAA;AACpC;6EAEA,IAAIC,OAAoB,GAAA;QACtB,OAAO,IAAI,CAAC9F,QAAQ,GAAG;AAAI,YAAA,GAAA,IAAI,CAACA;SAAS,GAAG,IAAA;AAC9C;IACA,IAAI8F,OAAAA,CAAQuC,IAAc,EAAE;AAC1B,QAAA,IAAI,CAACrI,QAAQ,GAAGqI,IAAAA,EAAMxC,KAAW,EAAA,IAAA,IAAA;AACnC;AACA;;;;;AAKC,MACDyC,WAAYC,CAAAA,EAAS,EAAEC,IAAa,EAAW;AAC7C,QAAA,IAAIC,OAAU,GAAA,KAAA;QACd,IAAI,IAAI,CAAC3I,WAAW,EAAE;YACpB0I,IAAOA,GAAAA,IAAAA,IAAQD,GAAGC,IAAI;AACtB,YAAA,IAAIA,SAAS,aAAe,EAAA;AAC1BC,gBAAAA,OAAAA,GAAU,IAAI,CAAC3I,WAAW,CAAC4I,WAAW,CAACH,EAAAA,CAAAA;aAClC,MAAA,IAAIC,SAAS,WAAa,EAAA;AAC/BC,gBAAAA,OAAAA,GAAU,IAAI,CAAC3I,WAAW,CAAC6I,SAAS,CAACJ,EAAAA,CAAAA;aAChC,MAAA,IAAIC,SAAS,aAAe,EAAA;AACjCC,gBAAAA,OAAAA,GAAU,IAAI,CAAC3I,WAAW,CAAC8I,WAAW,CAACL,EAAAA,CAAAA;aAClC,MAAA,IAAIC,SAAS,OAAS,EAAA;AAC3BC,gBAAAA,OAAAA,GAAU,IAAI,CAAC3I,WAAW,CAAC+I,YAAY,CAACN,EAAAA,CAAAA;aACnC,MAAA,IAAIC,SAAS,SAAW,EAAA;AAC7BC,gBAAAA,OAAAA,GAAU,IAAI,CAAC3I,WAAW,CAACgJ,SAAS,CAACP,EAAAA,CAAAA;aAChC,MAAA,IAAIC,SAAS,OAAS,EAAA;AAC3BC,gBAAAA,OAAAA,GAAU,IAAI,CAAC3I,WAAW,CAACiJ,OAAO,CAACR,EAAAA,CAAAA;AACrC;AACA,YAAA,IAAIE,OAAS,EAAA;AACXF,gBAAAA,EAAAA,CAAGS,cAAc,EAAA;AACnB;AACF;QACA,OAAOP,OAAAA;AACT;AACA;;;;;;AAMC,MACDQ,YAAa5B,CAAAA,CAAS,EAAEC,CAAS,EAAO;AACtC,QAAA,MAAM4B,QAAQ,IAAI,CAACtD,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAAC,CAAE,CAAA,GAAGuD,YAAYC,QAAQ,CAACC,MAAM,CAACC,WAAW,GAAGJ,KAAK;AAChG,QAAA,MAAMK,SAAS,IAAI,CAAC3D,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAAC,CAAE,CAAA,GAAGuD,YAAYC,QAAQ,CAACC,MAAM,CAACC,WAAW,GAAGC,MAAM;AAClG,QAAA,MAAMC,IAAO,GAAC,CAAInC,GAAAA,CAAAA,GAAK6B,KAAQ,GAAA,CAAA;AAC/B,QAAA,MAAMO,IAAO,GAAA,CAAA,GAAI,CAAC,GAAInC,CAAKiC,GAAAA,MAAAA;AAC3B,QAAA,MAAMG,QAAW,GAAA,IAAI7H,OAAQ2H,CAAAA,IAAAA,EAAMC,MAAM,CAAG,EAAA,CAAA,CAAA;AAC5C,QAAA,MAAME,OAAU,GAAA,IAAI9H,OAAQ2H,CAAAA,IAAAA,EAAMC,MAAM,CAAG,EAAA,CAAA,CAAA;AAC3C,QAAA,MAAMG,YAAY,IAAI,CAACC,uBAAuB,CAACC,SAAS,CAACJ,QAAAA,CAAAA;AACzD,QAAA,MAAMK,WAAW,IAAI,CAACF,uBAAuB,CAACC,SAAS,CAACH,OAAAA,CAAAA;QACxD,IAAI,IAAI,CAACK,aAAa,EAAI,EAAA;AACxBJ,YAAAA,SAAAA,CAAUK,OAAO,CAAC,CAAIL,GAAAA,SAAAA,CAAUM,CAAC,CAAA;AACjCH,YAAAA,QAAAA,CAASE,OAAO,CAAC,CAAIF,GAAAA,QAAAA,CAASG,CAAC,CAAA;AACjC;QACA,MAAMC,IAAAA,GAAO,IAAI,CAACH,aAAa,EAAA,GAAK,IAAI,CAACI,gBAAgB,EAAKR,GAAAA,SAAAA,CAAUS,GAAG,EAAA;QAC3E,MAAMC,IAAAA,GAAOC,QAAQC,GAAG,CAACT,SAASM,GAAG,EAAA,EAAIF,MAAMM,gBAAgB,EAAA;QAC/D,OAAO,IAAIC,IAAIP,IAAMG,EAAAA,IAAAA,CAAAA;AACvB;AACA;;;;;;AAMC,MACDK,OAAOC,GAAY,EAAEC,MAAe,EAAEC,EAAW,EAAQ;QACvD,OAAO,IAAI,CAACC,iBAAiB,CAAC1L,UAAUsL,MAAM,CAACC,KAAKC,MAAQC,EAAAA,EAAAA,CAAAA,CAAAA;AAC9D;AACA;;;;;AAKC,MACDE,cAAeC,CAAAA,IAAc,EAAEC,QAAkB,EAAQ;QACvD,OAAO,IAAI,CAACH,iBAAiB,CAAC1L,SAAAA,CAAU2L,cAAc,CAACC,IAAMC,EAAAA,QAAAA,IAAY,IAAI,CAACA,QAAQ,CAAA,CAAA;AACxF;AACA;;;;;;;MAQAC,cAAAA,CAAeC,IAAY,EAAEC,MAAc,EAAEC,KAAa,EAAEC,IAAY,EAAQ;AAC9E,QAAA,IAAI,CAACnM,WAAW,CAACoM,WAAW,CAACJ,IAAAA,EAAMC,QAAQC,KAAOC,EAAAA,IAAAA,CAAAA;QAClDlM,SAAUG,CAAAA,MAAM,CAAC,IAAI,CAACJ,WAAW,EAAE,IAAI,CAACG,cAAc,CAAA;QACtD,IAAI,CAAC4G,WAAW,CAAC,IAAA,CAAA;AACjB,QAAA,OAAO,IAAI;AACb;AACA;;;;;;;;;AASC,MACDsF,QAASC,CAAAA,IAAY,EAAEC,KAAa,EAAEC,MAAc,EAAEC,GAAW,EAAEC,IAAY,EAAEC,GAAW,EAAQ;QAClG,IAAI,CAAC3M,WAAW,CAAC4M,KAAK,CAACN,IAAMC,EAAAA,KAAAA,EAAOC,MAAQC,EAAAA,GAAAA,EAAKC,IAAMC,EAAAA,GAAAA,CAAAA;QACvD1M,SAAUG,CAAAA,MAAM,CAAC,IAAI,CAACJ,WAAW,EAAE,IAAI,CAACG,cAAc,CAAA;QACtD,IAAI,CAAC4G,WAAW,CAAC,IAAA,CAAA;AACjB,QAAA,OAAO,IAAI;AACb;AACA;;;MAIAJ,mBAAAA,CAAoBkG,MAAiB,EAAQ;AAC3C,QAAA,IAAIA,MAAUA,IAAAA,MAAAA,KAAW,IAAI,CAAC7M,WAAW,EAAE;YACzC,IAAI,CAACA,WAAW,GAAG6M,MAAAA;YACnB5M,SAAUG,CAAAA,MAAM,CAAC,IAAI,CAACJ,WAAW,EAAE,IAAI,CAACG,cAAc,CAAA;YACtD,IAAI,CAAC4G,WAAW,CAAC,IAAA,CAAA;AACnB;AACF;AACA;;;AAGC,MACDH,mBAAiC,GAAA;QAC/B,IAAI,IAAI,CAACnG,MAAM,EAAE;YACf,IAAI,CAACA,MAAM,GAAG,KAAA;AACd,YAAA,IAAI,CAACqM,QAAQ,EAAA;AACf;QACA,OAAO,IAAI,CAAC9M,WAAW;AACzB;AACA;;;AAGC,MACD+M,sBAAoC,GAAA;QAClC,IAAI,IAAI,CAACtM,MAAM,EAAE;YACf,IAAI,CAACA,MAAM,GAAG,KAAA;AACd,YAAA,IAAI,CAACqM,QAAQ,EAAA;AACf;QACA,OAAO,IAAI,CAAC3M,cAAc;AAC5B;IACA6M,iBAA+B,GAAA;AAC7B,QAAA,MAAMC,iBAAiB,IAAIhN,SAAAA,EAAAA;AAC3B,QAAA,IAAI,CAACiN,WAAW,CAACC,SAAS,CAAC,MAAMF,cAAgB,EAAA,IAAA,CAAA;QACjD,MAAMG,KAAAA,GAAQH,eAAeI,MAAM,CAAC,GAAGpC,GAAG,EAAA,CAAGJ,OAAO,CAAC,EAAC,CAAA;AACtD,QAAA,MAAMyC,KAAQL,GAAAA,cAAAA,CAAeI,MAAM,CAAC,GAAGpC,GAAG,EAAA;QAC1C,MAAMsC,KAAAA,GAAQN,eAAeI,MAAM,CAAC,GAAGpC,GAAG,EAAA,CAAGJ,OAAO,CAAC,EAAC,CAAA;AACtDoC,QAAAA,cAAAA,CAAeO,MAAM,CAAC,CAAG,EAAA,IAAI/K,OAAQ2K,CAAAA,KAAAA,CAAMnF,CAAC,EAAEmF,KAAMlF,CAAAA,CAAC,EAAEkF,KAAAA,CAAMjF,CAAC,EAAE,CAAA,CAAA,CAAA;AAChE8E,QAAAA,cAAAA,CAAeO,MAAM,CAAC,CAAG,EAAA,IAAI/K,OAAQ6K,CAAAA,KAAAA,CAAMrF,CAAC,EAAEqF,KAAMpF,CAAAA,CAAC,EAAEoF,KAAAA,CAAMnF,CAAC,EAAE,CAAA,CAAA,CAAA;AAChE8E,QAAAA,cAAAA,CAAeO,MAAM,CAAC,CAAG,EAAA,IAAI/K,OAAQ8K,CAAAA,KAAAA,CAAMtF,CAAC,EAAEsF,KAAMrF,CAAAA,CAAC,EAAEqF,KAAAA,CAAMpF,CAAC,EAAE,CAAA,CAAA,CAAA;QAChE,OAAO8E,cAAAA;AACT;AACA;;;;;AAKC,MACD,IAAIQ,UAAwB,GAAA;QAC1B,IAAI,IAAI,CAAChN,MAAM,EAAE;YACf,IAAI,CAACA,MAAM,GAAG,KAAA;AACd,YAAA,IAAI,CAACqM,QAAQ,EAAA;AACf;QACA,OAAO,IAAI,CAACzM,WAAW;AACzB;AACA,IAAA,IAAIqN,oBAAkC,GAAA;QACpC,IAAI,IAAI,CAACjN,MAAM,EAAE;YACf,IAAI,CAACA,MAAM,GAAG,KAAA;AACd,YAAA,IAAI,CAACqM,QAAQ,EAAA;AACf;QACA,OAAO,IAAI,CAACxM,eAAe;AAC7B;AACA;;;;;AAKC,MACD,IAAImK,uBAAqC,GAAA;QACvC,IAAI,IAAI,CAAChK,MAAM,EAAE;YACf,IAAI,CAACA,MAAM,GAAG,KAAA;AACd,YAAA,IAAI,CAACqM,QAAQ,EAAA;AACf;QACA,OAAO,IAAI,CAACvM,kBAAkB;AAChC;0CAEA,IAAIoN,OAAmB,GAAA;QACrB,IAAI,IAAI,CAAClN,MAAM,EAAE;YACf,IAAI,CAACA,MAAM,GAAG,KAAA;AACd,YAAA,IAAI,CAACqM,QAAQ,EAAA;AACf;QACA,OAAO,IAAI,CAAChM,QAAQ;AACtB;AACA,IAAA,IAAI8M,gBAA4B,GAAA;QAC9B,IAAI,IAAI,CAACnN,MAAM,EAAE;YACf,IAAI,CAACA,MAAM,GAAG,KAAA;AACd,YAAA,IAAI,CAACqM,QAAQ,EAAA;AACf;AACA,QAAA,IAAI,CAAC,IAAI,CAAC/L,SAAS,EAAE;AACnB,YAAA,IAAI,CAACA,SAAS,GAAG,IAAI8M,OAAQ,CAAA,IAAI,CAAC7N,WAAW,CAAA;AAC/C;QACA,OAAO,IAAI,CAACe,SAAS;AACvB;kCAEA,IAAI+M,UAAmC,GAAA;QACrC,OAAO,IAAI,CAACpN,WAAW,IAAI,IAAA;AAC7B;IACA,IAAIoN,UAAAA,CAAWA,UAAgC,EAAE;QAC/C,IAAI,CAACC,aAAa,CAACD,UAAAA,CAAAA;AACrB;AACA,4CACAE,QAA2B,GAAA;QACzB,OAAO,IAAA;AACT;AACA,kDACAC,YAAuB,GAAA;AACrB,QAAA,OAAO,IAAI,CAACrH,mBAAmB,EAAA,CAAGqH,YAAY,EAAA;AAChD;AACA,iDACAC,WAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAACtH,mBAAmB,EAAA,CAAGsH,WAAW,EAAA;AAC/C;AACA,yDACAC,MAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAACvH,mBAAmB,EAAA,CAAGwH,MAAM,EAAA;AAC1C;AACA,kEACAC,cAAyB,GAAA;AACvB,QAAA,OAAO,IAAI,CAACzH,mBAAmB,EAAA,CAAG0H,aAAa,EAAA;AACjD;AACA,iCACAC,SAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC3H,mBAAmB,EAAA,CAAG2H,SAAS,EAAA;AAC7C;AACA,qDACA3D,aAAyB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAChE,mBAAmB,EAAA,CAAGgE,aAAa,EAAA;AACjD;AACA,sDACA4D,OAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC5H,mBAAmB,EAAA,CAAG4H,OAAO,EAAA;AAC3C;AACA;;;AAGC,MACDC,cAAoC,GAAA;AAClC,QAAA,IAAIC,OAAOlP,MAAOI,CAAAA,YAAY,CAACqH,GAAG,CAAC,IAAI,CAAA;AACvC,QAAA,IAAI,CAACyH,IAAM,EAAA;YACTA,IAAO,GAAA;gBACLC,YAAc,EAAA,IAAA;gBACdC,mBAAqB,EAAA;AACvB,aAAA;AACApP,YAAAA,MAAAA,CAAOI,YAAY,CAACoJ,GAAG,CAAC,IAAI,EAAE0F,IAAAA,CAAAA;AAChC;QACA,OAAOA,IAAAA;AACT;AACA;;AAEC,MACDG,gBAAmB,GAAA;AACjB,QAAA,MAAMH,OAAOlP,MAAOI,CAAAA,YAAY,CAACqH,GAAG,CAAC,IAAI,CAAA;AACzC,QAAA,IAAIyH,IAAM,EAAA;YACR,IAAIA,IAAAA,CAAKC,YAAY,EAAE;gBACrB5E,WAAYC,CAAAA,QAAQ,CAACC,MAAM,CAAC6E,IAAI,CAACC,cAAc,CAACL,IAAAA,CAAKC,YAAY,CAAA;AACnE;YACA,IAAID,IAAAA,CAAKE,mBAAmB,EAAE;gBAC5B7E,WAAYC,CAAAA,QAAQ,CAACC,MAAM,CAAC6E,IAAI,CAACC,cAAc,CAACL,IAAAA,CAAKE,mBAAmB,CAAA;AAC1E;AACApP,YAAAA,MAAAA,CAAOI,YAAY,CAACoP,MAAM,CAAC,IAAI,CAAA;AACjC;QACA,IAAI,CAACjL,aAAa,GAAG,IAAA;QACrB,IAAI,CAACC,aAAa,GAAG,IAAA;QACrB,IAAI,CAACC,qBAAqB,GAAG,IAAA;QAC7B,IAAI,CAACC,gBAAgB,GAAG,IAAA;AAC1B;qBAEA,oBAA+B,GAAA;QAC7B,IAAI,CAACK,WAAW,CAAC0K,KAAK,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC1M,cAAc,CAAC0E,GAAG,EAAI,EAAA;AAC9B,YAAA,MAAMiI,MAAM,IAAIzJ,GAAAA,EAAAA;AAChByJ,YAAAA,GAAAA,CAAIhI,OAAO,GAAG,KAAA;AACd,YAAA,IAAI,CAAC3E,cAAc,CAACyG,GAAG,CAACkG,GAAAA,CAAAA;AACxB,YAAA,IAAI,CAAC3K,WAAW,CAAC4K,gBAAgB,CAACD,GAAAA,CAAAA;AACpC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC/L,eAAe,CAAC8D,GAAG,EAAI,EAAA;AAC/B,YAAA,MAAMmI,OAAO,IAAIC,GAAAA,EAAAA;AACjBD,YAAAA,IAAAA,CAAKlI,OAAO,GAAG,KAAA;AACfkI,YAAAA,IAAAA,CAAK5G,KAAK,GAAG,IAAI,CAACpF,UAAU;AAC5BgM,YAAAA,IAAAA,CAAK1G,IAAI,GAAG,IAAI,CAACrF,SAAS;AAC1B+L,YAAAA,IAAAA,CAAKxG,MAAM,GAAG,IAAI,CAACrF,WAAW;AAC9B6L,YAAAA,IAAAA,CAAKrH,SAAS,GAAG,IAAI,CAACzE,cAAc;AACpC8L,YAAAA,IAAAA,CAAKrG,eAAe,GAAG,IAAI,CAACvF,oBAAoB;AAChD,YAAA,IAAI,CAACL,eAAe,CAAC6F,GAAG,CAACoG,IAAAA,CAAAA;AACzB,YAAA,IAAI,CAAC7K,WAAW,CAAC4K,gBAAgB,CAACC,IAAAA,CAAAA;AACpC;AACA,QAAA,IAAI,CAAC,IAAI,CAAChN,cAAc,CAAC6E,GAAG,EAAI,EAAA;AAC9B,YAAA,MAAMqI,MAAM,IAAI/J,GAAAA,EAAAA;AAChB+J,YAAAA,GAAAA,CAAIpI,OAAO,GAAG,KAAA;AACd,YAAA,IAAI,CAAC9E,cAAc,CAAC4G,GAAG,CAACsG,GAAAA,CAAAA;AACxB,YAAA,IAAI,CAAC/K,WAAW,CAAC4K,gBAAgB,CAACG,GAAAA,CAAAA;AACpC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC9N,qBAAqB,CAACyF,GAAG,EAAI,EAAA;AACrC,YAAA,MAAME,aAAa,IAAIoI,UAAAA,EAAAA;AACvBpI,YAAAA,UAAAA,CAAWD,OAAO,GAAG,KAAA;AACrBC,YAAAA,UAAAA,CAAWE,QAAQ,GAAG,IAAI,CAAC5F,mBAAmB;AAC9C,YAAA,IAAI,CAACD,qBAAqB,CAACwH,GAAG,CAAC7B,UAAAA,CAAAA;AAC/B,YAAA,IAAI,CAAC5C,WAAW,CAAC4K,gBAAgB,CAAChI,UAAAA,CAAAA;AACpC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC9F,kBAAkB,CAAC4F,GAAG,EAAI,EAAA;AAClC,YAAA,MAAMuI,UAAU,IAAIC,OAAAA,EAAAA;AACpBD,YAAAA,OAAAA,CAAQtI,OAAO,GAAG,IAAA;AAClBsI,YAAAA,OAAAA,CAAQxH,QAAQ,GAAG,IAAI,CAAC1G,gBAAgB;AACxC,YAAA,IAAI,CAACD,kBAAkB,CAAC2H,GAAG,CAACwG,OAAAA,CAAAA;AAC5B,YAAA,IAAI,CAACjL,WAAW,CAAC4K,gBAAgB,CAACK,OAAAA,CAAAA;AACpC;AACA,QAAA,IAAI,CAAC,IAAI,CAACtN,eAAe,CAAC+E,GAAG,EAAI,EAAA;AAC/B,YAAA,MAAMyI,OAAO,IAAIpK,IAAAA,EAAAA;AACjBoK,YAAAA,IAAAA,CAAKxI,OAAO,GAAG,KAAA;AACf,YAAA,IAAI,CAAChF,eAAe,CAAC8G,GAAG,CAAC0G,IAAAA,CAAAA;AACzB,YAAA,IAAI,CAACnL,WAAW,CAAC4K,gBAAgB,CAACO,IAAAA,CAAAA;AACpC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC/N,gBAAgB,CAACsF,GAAG,EAAI,EAAA;AAChC,YAAA,MAAM5B,QAAQ,IAAIsK,KAAAA,EAAAA;AAClBtK,YAAAA,KAAAA,CAAM6B,OAAO,GAAG,KAAA;AAChB7B,YAAAA,KAAAA,CAAMkC,kBAAkB,GAAG,IAAI,CAAC3F,yBAAyB;AACzDyD,YAAAA,KAAAA,CAAMoC,eAAe,GAAG,IAAI,CAAC5F,qBAAqB;AAClDwD,YAAAA,KAAAA,CAAMsC,SAAS,GAAG,IAAI,CAAC7F,eAAe;AACtCuD,YAAAA,KAAAA,CAAMwC,aAAa,GAAG,IAAI,CAAC9F,mBAAmB;AAC9CsD,YAAAA,KAAAA,CAAM0C,SAAS,GAAG,IAAI,CAAC/F,eAAe;AACtC,YAAA,IAAI,CAACL,gBAAgB,CAACqH,GAAG,CAAC3D,KAAAA,CAAAA;AAC1B,YAAA,IAAI,CAACd,WAAW,CAAC4K,gBAAgB,CAAC9J,KAAAA,CAAAA;AACpC;AACF;AACA;;;;MAKAuK,MAAAA,CAAO9P,KAAY,EAAE;AACnB,QAAA,MAAMmK,MAASF,GAAAA,WAAAA,CAAYC,QAAQ,CAACC,MAAM;;AAE1C,QAAA,MAAM4F,eAAkB,GAAC,CAAA,IAAI,CAACtK,GAAG,IAAI,IAAI,CAAC4B,UAAS,KAAM8C,MAAAA,CAAOb,IAAI,KAAK,OAAA;AACzE,QAAA,MAAM0G,MAASD,GAAAA,eAAAA,IAAmB,IAAI,CAACtK,GAAG;QAC1CzF,KAAMiQ,CAAAA,aAAa,CAAC,aAAejQ,EAAAA,KAAAA,EAAO,IAAI,EAAE,IAAI,CAACyE,WAAW,CAAA;AAChE,QAAA,IAAIsL,eAAiB,EAAA;YACnB,MAAM/F,KAAAA,GAAQG,OAAO+F,qBAAqB,EAAA;YAC1C,MAAM7F,MAAAA,GAASF,OAAOgG,sBAAsB,EAAA;AAC5C,YAAA,IAAIH,MAAQ,EAAA;AACV,gBAAA,MAAMI,MAAS1Q,GAAAA,MAAAA,CAAOE,SAAS,CAACuK,MAAOkG,CAAAA,SAAS,CAACC,YAAY,GAAG5Q,MAAAA,CAAOE,SAAS,CAAC2Q,MAAM,CAAC;AACxF,gBAAA,IAAI,CAACxM,YAAY,CAACyM,KAAK,CAAC,MAAO,CAAC,CAAE,CAAA,GAAG,IAAKxG,KAAO,EAACoG,MAAM,CAAC,CAAA,CAAE,GAAG,CAAK/F,GAAAA,MAAAA,CAAAA;aAC9D,MAAA;AACL,gBAAA,IAAI,CAACtG,YAAY,CAACyM,KAAK,CAAC,CAAG,EAAA,CAAA,CAAA;AAC7B;AACA,YAAA,IAAI,CAAC3M,iBAAiB,CAACqF,GAAG,CAAC,IAAI,CAACpC,mBAAmB,EAAA,CAAA;YACnD,IAAI,CAACjD,iBAAiB,CAAC,CAAA,CAAE,IAAI,IAAI,CAACE,YAAY,CAACoE,CAAC;YAChD,IAAI,CAACtE,iBAAiB,CAAC,CAAA,CAAE,IAAI,IAAI,CAACE,YAAY,CAACqE,CAAC;AAChD,YAAA,IAAI,CAACvE,iBAAiB,CAAC4M,aAAa,CAAC,IAAI,CAAC9C,UAAU,CAAA;YACpDxN,SAAUG,CAAAA,MAAM,CAAC,IAAI,CAACuD,iBAAiB,EAAE,IAAI,CAACC,oBAAoB,CAAA;AAClE,YAAA,IAAI,CAAC,IAAI,CAACK,qBAAqB,EAAE;gBAC/B,IAAI,CAACA,qBAAqB,GAAG,IAAIhE,SAAAA,EAAAA;AACjC,gBAAA,IAAI,CAACgE,qBAAqB,CAAC+E,GAAG,CAAC,IAAI,CAACrF,iBAAiB,CAAA;AACrD,gBAAA,IAAI,CAACO,gBAAgB,GAAG,IAAIJ,OAAQ,CAAA,IAAI,CAACD,YAAY,CAAA;AACvD;AACA,YAAA,IAAI,CAAC,IAAI,CAACE,aAAa,EAAE;gBACvB,IAAI,CAACA,aAAa,GAAG,IAAI9D,SAAAA,EAAAA;AACzB,gBAAA,IAAI,CAAC8D,aAAa,CAACiF,GAAG,CAAC,IAAI,CAAC0E,oBAAoB,CAAA;AAChD,gBAAA,IAAI,CAAC1J,aAAa,GAAG,IAAI,CAACgH,gBAAgB,EAAA;AAC5C;SACK,MAAA;AACL,YAAA,IAAI,CAACnH,YAAY,CAACyM,KAAK,CAAC,CAAG,EAAA,CAAA,CAAA;YAC3B,IAAI,CAACvM,aAAa,GAAG,IAAA;YACrB,IAAI,CAACC,aAAa,GAAG,IAAA;YACrB,IAAI,CAACC,qBAAqB,GAAG,IAAA;YAC7B,IAAI,CAACC,gBAAgB,GAAG,IAAA;AACxB,YAAA,IAAI,CAACN,oBAAoB,CAACoF,GAAG,CAAC,IAAI,CAACyB,uBAAuB,CAAA;AAC5D;AACAR,QAAAA,MAAAA,CAAOuG,gBAAgB,EAAA;AACvBvG,QAAAA,MAAAA,CAAOwG,yBAAyB,CAAC,KAAA,CAAA;AACjC3Q,QAAAA,KAAAA,CAAM4Q,WAAW,EAAA,CAAGC,WAAW,CAAC7Q,OAAO,IAAI,CAAA;AAC3CmK,QAAAA,MAAAA,CAAO2G,eAAe,EAAA;AACtB,QAAA,IAAIf,eAAiB,EAAA;AACnB,YAAA,IAAI,CAAC5L,qBAAqB,CAAC+E,GAAG,CAAC,IAAI,CAACrF,iBAAiB,CAAA;AACrD,YAAA,IAAI,CAACO,gBAAgB,CAAC8E,GAAG,CAAC,IAAI,CAACnF,YAAY,CAAA;AAC3C,YAAA,IAAI,CAACE,aAAa,CAACiF,GAAG,CAAC,IAAI,CAAC0E,oBAAoB,CAAA;AAChD,YAAA,IAAI,CAAC1J,aAAa,GAAG,IAAI,CAACgH,gBAAgB,EAAA;AAC5C;QACAlL,KAAMiQ,CAAAA,aAAa,CAAC,WAAajQ,EAAAA,KAAAA,EAAO,IAAI,EAAE,IAAI,CAACyE,WAAW,CAAA;AAChE;AACA,IAAA,MAAMsM,SAAUC,CAAAA,IAAY,EAAEC,IAAY,EAAuB;QAC/D,IAAI,CAAC1M,SAAS,GAAGyM,IAAAA;QACjB,IAAI,CAACxM,SAAS,GAAGyM,IAAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC5M,kBAAkB,EAAE;AAC5B,YAAA,IAAI,CAACA,kBAAkB,GAAG,IAAI6M,QAAoB,CAACC,OAAAA,GAAAA;gBACjD,IAAI,CAAC7M,kBAAkB,GAAG,CAAC8M,MAAAA,GAAAA;oBACzBD,OAAQC,CAAAA,MAAAA,CAAAA;oBACR,IAAI,CAAC/M,kBAAkB,GAAG,IAAA;oBAC1B,IAAI,CAACC,kBAAkB,GAAG,IAAA;AAC5B,iBAAA;AACF,aAAA,CAAA;AACF;QACA,OAAO,IAAI,CAACD,kBAAkB;AAChC;AACA,qBACAgN,wBAA2B,GAAA;QACzB,OAAO,IAAI,CAAC/M,kBAAkB;AAChC;AACA,qBACAgN,WAAc,GAAA;QACZ,OAAO,IAAI,CAAC/M,SAAS;AACvB;AACA,qBACAgN,WAAc,GAAA;QACZ,OAAO,IAAI,CAAC/M,SAAS;AACvB;AACA;;AAEC,MACDgN,gBAAmB,GAAA;QACjB,IAAI,CAAC5Q,WAAW,EAAE6Q,MAAAA,EAAAA;AACpB;AACA;;AAEC,MACDC,eAAkB,GAAA;QAChB,IAAI,CAAC9Q,WAAW,EAAE+Q,KAAAA,EAAAA;AACpB;qBAEA,IAAIC,gBAAmB,GAAA;QACrB,OAAO,IAAI,CAAC/N,iBAAiB;AAC/B;qBAEA,IAAIgO,mBAAsB,GAAA;QACxB,OAAO,IAAI,CAAC/N,oBAAoB;AAClC;qBAEA,IAAIgO,WAAc,GAAA;QAChB,OAAO,IAAI,CAAC/N,YAAY;AAC1B;qBAEA,IAAIgO,oBAAuB,GAAA;QACzB,OAAO,IAAI,CAAC5N,qBAAqB;AACnC;qBAEA,IAAI6N,eAAkB,GAAA;QACpB,OAAO,IAAI,CAAC5N,gBAAgB;AAC9B;qBAEA,IAAI6N,YAAe,GAAA;QACjB,OAAO,IAAI,CAAChO,aAAa;AAC3B;qBAEA,IAAIiO,YAAe,GAAA;QACjB,OAAO,IAAI,CAAChO,aAAa;AAC3B;AACA,qBACQ+J,aAAcD,CAAAA,UAAgC,EAAQ;AAC5D,QAAA,IAAI,IAAI,CAACpN,WAAW,KAAKoN,UAAY,EAAA;YACnC,IAAIA,UAAAA,IAAcA,WAAWmE,UAAU,EAAA,IAAMnE,WAAWmE,UAAU,EAAA,KAAO,IAAI,EAAE;AAC7E,gBAAA,MAAM,IAAIC,KACR,CAAA,iGAAA,CAAA;AAEJ;YACA,IAAI,CAACxR,WAAW,EAAEyR,UAAW,CAAA,IAAA,CAAA;YAC7B,IAAI,CAACzR,WAAW,GAAGoN,UAAAA;AACnB,YAAA,IAAI,CAACpN,WAAW,EAAEyR,UAAAA,CAAW,IAAI,CAAA;AACnC;AACA,QAAA,OAAO,IAAI;AACb;AACA,qBACUpL,WAAYqL,CAAAA,oBAA6B,EAAE;QACnD,IAAI,CAAC3R,MAAM,GAAG,IAAA;AACd,QAAA,IAAI2R,oBAAsB,EAAA;YACxB,IAAI,CAACrR,SAAS,GAAG,IAAA;AACnB;AACF;qBAEA,QAAqB,GAAA;AACnB,QAAA,IAAI,CAACsR,YAAY,EAAA;QACjBpS,SAAUqS,CAAAA,YAAY,CAAC,IAAI,CAACpF,WAAW,EAAE,IAAI,CAAC7M,WAAW,CAAA;AACzDJ,QAAAA,SAAAA,CAAUsS,QAAQ,CAAC,IAAI,CAACvS,WAAW,EAAE,IAAI,CAACK,WAAW,EAAE,IAAI,CAACC,eAAe,CAAA;QAC3EL,SAAUG,CAAAA,MAAM,CAAC,IAAI,CAACE,eAAe,EAAE,IAAI,CAACC,kBAAkB,CAAA;AAC9D,QAAA,IAAI,CAAC,IAAI,CAACO,QAAQ,EAAE;AAClB,YAAA,IAAI,CAACA,QAAQ,GAAG,IAAI+M,OAAQ,CAAA,IAAI,CAACvN,eAAe,CAAA;SAC3C,MAAA;AACL,YAAA,IAAI,CAACQ,QAAQ,CAAC0R,cAAc,CAAC,IAAI,CAAClS,eAAe,CAAA;AACnD;AACF;qBAEA,YAAU+R,GAAe;AACzB,qBACUI,mBAAoBC,CAAAA,eAAwB,EAAE;AACtD,QAAA,KAAK,CAACD,mBAAoBC,CAAAA,eAAAA,CAAAA;QAC1B,IAAI,CAAC3L,WAAW,CAAC,KAAA,CAAA;AACnB;AACA,2CACA4L,OAAU,GAAA;QACR,IAAI,CAAC5E,aAAa,CAAC,IAAA,CAAA;AACnB,QAAA,IAAI,CAACc,gBAAgB,EAAA;QACrB,IAAI,CAAC7O,WAAW,GAAG,IAAA;QACnB,IAAI,CAACK,WAAW,GAAG,IAAA;QACnB,IAAI,CAACC,eAAe,GAAG,IAAA;QACvB,IAAI,CAACqB,gBAAgB,CAACgR,OAAO,EAAA;QAC7B,IAAI,CAACzQ,eAAe,CAACyQ,OAAO,EAAA;QAC5B,IAAI,CAACnR,qBAAqB,CAACmR,OAAO,EAAA;QAClC,IAAI,CAACxP,eAAe,CAACwP,OAAO,EAAA;QAC5B,IAAI,CAACpQ,cAAc,CAACoQ,OAAO,EAAA;QAC3B,IAAI,CAACvQ,cAAc,CAACuQ,OAAO,EAAA;QAC3B,IAAI,CAACtR,kBAAkB,CAACsR,OAAO,EAAA;QAC/B,IAAI,CAAC3R,IAAI,CAAC2R,OAAO,EAAA;AACjB,QAAA,KAAK,CAACA,OAAAA,EAAAA;AACR;AACF;;;;"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { Vector3, Quaternion, Matrix3x3, Matrix4x4 } from '@zephyr3d/base';
|
|
2
|
+
import { BaseCameraController } from './base.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* FPS camera controller
|
|
6
|
+
* @public
|
|
7
|
+
*/ class FPSCameraController extends BaseCameraController {
|
|
8
|
+
/** @internal */ options;
|
|
9
|
+
/** @internal */ mouseDown;
|
|
10
|
+
/** @internal */ lastMouseX;
|
|
11
|
+
/** @internal */ lastMouseY;
|
|
12
|
+
/** @internal */ keyUp;
|
|
13
|
+
/** @internal */ keyDown;
|
|
14
|
+
/** @internal */ keyLeft;
|
|
15
|
+
/** @internal */ keyRight;
|
|
16
|
+
/** @internal */ keyForward;
|
|
17
|
+
/** @internal */ keyBackward;
|
|
18
|
+
/**
|
|
19
|
+
* Creates an instance of FPSCameraController
|
|
20
|
+
* @param options - The creation options
|
|
21
|
+
*/ constructor(options){
|
|
22
|
+
super();
|
|
23
|
+
this.options = Object.assign({
|
|
24
|
+
controlKeys: {
|
|
25
|
+
up: 'KeyQ',
|
|
26
|
+
down: 'KeyE',
|
|
27
|
+
forward: 'KeyW',
|
|
28
|
+
backward: 'KeyS',
|
|
29
|
+
left: 'KeyA',
|
|
30
|
+
right: 'KeyD'
|
|
31
|
+
},
|
|
32
|
+
moveSpeed: 0.2,
|
|
33
|
+
rotateSpeed: 0.01
|
|
34
|
+
}, options || {});
|
|
35
|
+
this.reset();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* {@inheritDoc BaseCameraController.reset}
|
|
39
|
+
* @override
|
|
40
|
+
*/ reset() {
|
|
41
|
+
this.mouseDown = false;
|
|
42
|
+
this.lastMouseX = 0;
|
|
43
|
+
this.lastMouseY = 0;
|
|
44
|
+
this.keyUp = false;
|
|
45
|
+
this.keyDown = false;
|
|
46
|
+
this.keyLeft = false;
|
|
47
|
+
this.keyRight = false;
|
|
48
|
+
this.keyForward = false;
|
|
49
|
+
this.keyBackward = false;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* {@inheritDoc BaseCameraController._onMouseDown}
|
|
53
|
+
* @override
|
|
54
|
+
*/ _onMouseDown(evt) {
|
|
55
|
+
if (evt.button === 0) {
|
|
56
|
+
this.mouseDown = true;
|
|
57
|
+
this.lastMouseX = evt.offsetX;
|
|
58
|
+
this.lastMouseY = evt.offsetY;
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* {@inheritDoc BaseCameraController._onMouseUp}
|
|
65
|
+
* @override
|
|
66
|
+
*/ _onMouseUp(evt) {
|
|
67
|
+
if (evt.button === 0 && this.mouseDown) {
|
|
68
|
+
this.mouseDown = false;
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* {@inheritDoc BaseCameraController._onMouseMove}
|
|
75
|
+
* @override
|
|
76
|
+
*/ _onMouseMove(evt) {
|
|
77
|
+
if (this.mouseDown) {
|
|
78
|
+
const dx = evt.offsetX - this.lastMouseX;
|
|
79
|
+
const dy = evt.offsetY - this.lastMouseY;
|
|
80
|
+
this.lastMouseX = evt.offsetX;
|
|
81
|
+
this.lastMouseY = evt.offsetY;
|
|
82
|
+
const zAxis = this._getCamera().worldMatrix.getRow(2).xyz();
|
|
83
|
+
const alpha = Math.atan2(zAxis.z, zAxis.x) + dx * this.options.rotateSpeed;
|
|
84
|
+
const beta = Math.min(Math.PI / 2.1, Math.max(-Math.PI / 2.1, Math.asin(zAxis.y) + dy * this.options.rotateSpeed));
|
|
85
|
+
const newY = Math.sin(beta);
|
|
86
|
+
const r = Math.sqrt(Math.max(0, 1 - newY * newY));
|
|
87
|
+
const newZ = Math.sin(alpha) * r;
|
|
88
|
+
const newX = Math.cos(alpha) * r;
|
|
89
|
+
zAxis.setXYZ(newX, newY, newZ).inplaceNormalize();
|
|
90
|
+
const XAxis = Vector3.cross(Vector3.axisPY(), zAxis).inplaceNormalize();
|
|
91
|
+
const YAxis = Vector3.cross(zAxis, XAxis).inplaceNormalize();
|
|
92
|
+
const rotation = Quaternion.fromRotationMatrix(new Matrix3x3([
|
|
93
|
+
XAxis.x,
|
|
94
|
+
XAxis.y,
|
|
95
|
+
XAxis.z,
|
|
96
|
+
YAxis.x,
|
|
97
|
+
YAxis.y,
|
|
98
|
+
YAxis.z,
|
|
99
|
+
zAxis.x,
|
|
100
|
+
zAxis.y,
|
|
101
|
+
zAxis.z
|
|
102
|
+
]));
|
|
103
|
+
if (!this._getCamera().parent) {
|
|
104
|
+
this._getCamera().rotation.set(rotation);
|
|
105
|
+
} else {
|
|
106
|
+
const pos = new Vector3();
|
|
107
|
+
const scale = new Vector3();
|
|
108
|
+
this._getCamera().worldMatrix.decompose(scale, null, pos);
|
|
109
|
+
const newWorldMatrix = Matrix4x4.scaling(scale).rotateLeft(rotation).translateLeft(pos);
|
|
110
|
+
const newLocalMatrix = this._getCamera().parent ? newWorldMatrix.multiplyLeftAffine(Matrix4x4.invertAffine(this._getCamera().parent.worldMatrix)) : newWorldMatrix;
|
|
111
|
+
newLocalMatrix.decompose(scale, rotation, pos);
|
|
112
|
+
this._getCamera().position.set(pos);
|
|
113
|
+
this._getCamera().scale.set(scale);
|
|
114
|
+
this._getCamera().rotation.set(rotation);
|
|
115
|
+
}
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* {@inheritDoc BaseCameraController._onKeyDown}
|
|
122
|
+
* @override
|
|
123
|
+
*/ _onKeyDown(evt) {
|
|
124
|
+
switch(evt.code){
|
|
125
|
+
case this.options.controlKeys.up:
|
|
126
|
+
this.keyUp = true;
|
|
127
|
+
break;
|
|
128
|
+
case this.options.controlKeys.down:
|
|
129
|
+
this.keyDown = true;
|
|
130
|
+
break;
|
|
131
|
+
case this.options.controlKeys.left:
|
|
132
|
+
this.keyLeft = true;
|
|
133
|
+
break;
|
|
134
|
+
case this.options.controlKeys.right:
|
|
135
|
+
this.keyRight = true;
|
|
136
|
+
break;
|
|
137
|
+
case this.options.controlKeys.forward:
|
|
138
|
+
this.keyForward = true;
|
|
139
|
+
break;
|
|
140
|
+
case this.options.controlKeys.backward:
|
|
141
|
+
this.keyBackward = true;
|
|
142
|
+
break;
|
|
143
|
+
default:
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* {@inheritDoc BaseCameraController._onKeyUp}
|
|
150
|
+
* @override
|
|
151
|
+
*/ _onKeyUp(evt) {
|
|
152
|
+
switch(evt.code){
|
|
153
|
+
case this.options.controlKeys.up:
|
|
154
|
+
this.keyUp = false;
|
|
155
|
+
break;
|
|
156
|
+
case this.options.controlKeys.down:
|
|
157
|
+
this.keyDown = false;
|
|
158
|
+
break;
|
|
159
|
+
case this.options.controlKeys.left:
|
|
160
|
+
this.keyLeft = false;
|
|
161
|
+
break;
|
|
162
|
+
case this.options.controlKeys.right:
|
|
163
|
+
this.keyRight = false;
|
|
164
|
+
break;
|
|
165
|
+
case this.options.controlKeys.forward:
|
|
166
|
+
this.keyForward = false;
|
|
167
|
+
break;
|
|
168
|
+
case this.options.controlKeys.backward:
|
|
169
|
+
this.keyBackward = false;
|
|
170
|
+
break;
|
|
171
|
+
default:
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Set options
|
|
178
|
+
* @param opt - options
|
|
179
|
+
*/ setOptions(opt) {
|
|
180
|
+
Object.assign(this.options, opt ?? {});
|
|
181
|
+
this.reset();
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* {@inheritDoc BaseCameraController.update}
|
|
185
|
+
* @override
|
|
186
|
+
*/ update() {
|
|
187
|
+
const x = this._getCamera().worldMatrix.getRow(0).xyz();
|
|
188
|
+
x.y = 0;
|
|
189
|
+
x.inplaceNormalize();
|
|
190
|
+
const z = this._getCamera().worldMatrix.getRow(2).xyz().inplaceNormalize();
|
|
191
|
+
const move = new Vector3(0, 0, 0);
|
|
192
|
+
let changed = false;
|
|
193
|
+
if (this.keyForward) {
|
|
194
|
+
changed = true;
|
|
195
|
+
move.subBy(Vector3.scale(z, this.options.moveSpeed));
|
|
196
|
+
}
|
|
197
|
+
if (this.keyBackward) {
|
|
198
|
+
changed = true;
|
|
199
|
+
move.addBy(Vector3.scale(z, this.options.moveSpeed));
|
|
200
|
+
}
|
|
201
|
+
if (this.keyUp) {
|
|
202
|
+
changed = true;
|
|
203
|
+
move.y += this.options.moveSpeed;
|
|
204
|
+
}
|
|
205
|
+
if (this.keyDown) {
|
|
206
|
+
changed = true;
|
|
207
|
+
move.y -= this.options.moveSpeed;
|
|
208
|
+
}
|
|
209
|
+
if (this.keyLeft) {
|
|
210
|
+
changed = true;
|
|
211
|
+
move.subBy(Vector3.scale(x, this.options.moveSpeed));
|
|
212
|
+
}
|
|
213
|
+
if (this.keyRight) {
|
|
214
|
+
changed = true;
|
|
215
|
+
move.addBy(Vector3.scale(x, this.options.moveSpeed));
|
|
216
|
+
}
|
|
217
|
+
if (changed) {
|
|
218
|
+
if (this._getCamera().parent) {
|
|
219
|
+
const pos = new Vector3();
|
|
220
|
+
const scale = new Vector3();
|
|
221
|
+
const rotation = new Quaternion();
|
|
222
|
+
this._getCamera().worldMatrix.decompose(scale, rotation, pos);
|
|
223
|
+
pos.addBy(move);
|
|
224
|
+
const newWorldMatrix = Matrix4x4.scaling(scale).rotateLeft(rotation).translateLeft(pos);
|
|
225
|
+
const newLocalMatrix = newWorldMatrix.multiplyLeftAffine(Matrix4x4.invertAffine(this._getCamera().parent.worldMatrix));
|
|
226
|
+
newLocalMatrix.decompose(scale, rotation, pos);
|
|
227
|
+
this._getCamera().position.set(pos);
|
|
228
|
+
this._getCamera().scale.set(scale);
|
|
229
|
+
this._getCamera().rotation.set(rotation);
|
|
230
|
+
} else {
|
|
231
|
+
this._getCamera().moveBy(move);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export { FPSCameraController };
|
|
238
|
+
//# sourceMappingURL=fps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fps.js","sources":["../../../src/camera/fps.ts"],"sourcesContent":["import { Vector3, Quaternion, Matrix3x3, Matrix4x4 } from '@zephyr3d/base';\r\nimport { BaseCameraController } from './base';\r\n\r\n/**\r\n * Creation options for FPSCameraController\r\n * @public\r\n */\r\nexport interface FPSCameraControllerOptions {\r\n /** The control keys */\r\n controlKeys?: {\r\n up: string;\r\n down: string;\r\n forward: string;\r\n backward: string;\r\n left: string;\r\n right: string;\r\n };\r\n /** Moving speed */\r\n moveSpeed?: number;\r\n /** Rotating speed */\r\n rotateSpeed?: number;\r\n}\r\n\r\n/**\r\n * FPS camera controller\r\n * @public\r\n */\r\nexport class FPSCameraController extends BaseCameraController {\r\n /** @internal */\r\n private readonly options: FPSCameraControllerOptions;\r\n /** @internal */\r\n private mouseDown: boolean;\r\n /** @internal */\r\n private lastMouseX: number;\r\n /** @internal */\r\n private lastMouseY: number;\r\n /** @internal */\r\n private keyUp: boolean;\r\n /** @internal */\r\n private keyDown: boolean;\r\n /** @internal */\r\n private keyLeft: boolean;\r\n /** @internal */\r\n private keyRight: boolean;\r\n /** @internal */\r\n private keyForward: boolean;\r\n /** @internal */\r\n private keyBackward: boolean;\r\n /**\r\n * Creates an instance of FPSCameraController\r\n * @param options - The creation options\r\n */\r\n constructor(options?: FPSCameraControllerOptions) {\r\n super();\r\n this.options = Object.assign(\r\n {\r\n controlKeys: {\r\n up: 'KeyQ',\r\n down: 'KeyE',\r\n forward: 'KeyW',\r\n backward: 'KeyS',\r\n left: 'KeyA',\r\n right: 'KeyD'\r\n },\r\n moveSpeed: 0.2,\r\n rotateSpeed: 0.01\r\n },\r\n options || {}\r\n );\r\n this.reset();\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController.reset}\r\n * @override\r\n */\r\n reset() {\r\n this.mouseDown = false;\r\n this.lastMouseX = 0;\r\n this.lastMouseY = 0;\r\n this.keyUp = false;\r\n this.keyDown = false;\r\n this.keyLeft = false;\r\n this.keyRight = false;\r\n this.keyForward = false;\r\n this.keyBackward = false;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onMouseDown}\r\n * @override\r\n */\r\n protected _onMouseDown(evt: PointerEvent): boolean {\r\n if (evt.button === 0) {\r\n this.mouseDown = true;\r\n this.lastMouseX = evt.offsetX;\r\n this.lastMouseY = evt.offsetY;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onMouseUp}\r\n * @override\r\n */\r\n protected _onMouseUp(evt: PointerEvent): boolean {\r\n if (evt.button === 0 && this.mouseDown) {\r\n this.mouseDown = false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onMouseMove}\r\n * @override\r\n */\r\n protected _onMouseMove(evt: PointerEvent): boolean {\r\n if (this.mouseDown) {\r\n const dx = evt.offsetX - this.lastMouseX;\r\n const dy = evt.offsetY - this.lastMouseY;\r\n this.lastMouseX = evt.offsetX;\r\n this.lastMouseY = evt.offsetY;\r\n const zAxis = this._getCamera().worldMatrix.getRow(2).xyz();\r\n const alpha = Math.atan2(zAxis.z, zAxis.x) + dx * this.options.rotateSpeed;\r\n const beta = Math.min(\r\n Math.PI / 2.1,\r\n Math.max(-Math.PI / 2.1, Math.asin(zAxis.y) + dy * this.options.rotateSpeed)\r\n );\r\n const newY = Math.sin(beta);\r\n const r = Math.sqrt(Math.max(0, 1 - newY * newY));\r\n const newZ = Math.sin(alpha) * r;\r\n const newX = Math.cos(alpha) * r;\r\n zAxis.setXYZ(newX, newY, newZ).inplaceNormalize();\r\n const XAxis = Vector3.cross(Vector3.axisPY(), zAxis).inplaceNormalize();\r\n const YAxis = Vector3.cross(zAxis, XAxis).inplaceNormalize();\r\n const rotation = Quaternion.fromRotationMatrix(\r\n new Matrix3x3([XAxis.x, XAxis.y, XAxis.z, YAxis.x, YAxis.y, YAxis.z, zAxis.x, zAxis.y, zAxis.z])\r\n );\r\n if (!this._getCamera().parent) {\r\n this._getCamera().rotation.set(rotation);\r\n } else {\r\n const pos = new Vector3();\r\n const scale = new Vector3();\r\n this._getCamera().worldMatrix.decompose(scale, null, pos);\r\n const newWorldMatrix = Matrix4x4.scaling(scale).rotateLeft(rotation).translateLeft(pos);\r\n const newLocalMatrix = this._getCamera().parent\r\n ? newWorldMatrix.multiplyLeftAffine(Matrix4x4.invertAffine(this._getCamera().parent.worldMatrix))\r\n : newWorldMatrix;\r\n newLocalMatrix.decompose(scale, rotation, pos);\r\n this._getCamera().position.set(pos);\r\n this._getCamera().scale.set(scale);\r\n this._getCamera().rotation.set(rotation);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onKeyDown}\r\n * @override\r\n */\r\n protected _onKeyDown(evt: KeyboardEvent): boolean {\r\n switch (evt.code) {\r\n case this.options.controlKeys.up:\r\n this.keyUp = true;\r\n break;\r\n case this.options.controlKeys.down:\r\n this.keyDown = true;\r\n break;\r\n case this.options.controlKeys.left:\r\n this.keyLeft = true;\r\n break;\r\n case this.options.controlKeys.right:\r\n this.keyRight = true;\r\n break;\r\n case this.options.controlKeys.forward:\r\n this.keyForward = true;\r\n break;\r\n case this.options.controlKeys.backward:\r\n this.keyBackward = true;\r\n break;\r\n default:\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onKeyUp}\r\n * @override\r\n */\r\n protected _onKeyUp(evt: KeyboardEvent): boolean {\r\n switch (evt.code) {\r\n case this.options.controlKeys.up:\r\n this.keyUp = false;\r\n break;\r\n case this.options.controlKeys.down:\r\n this.keyDown = false;\r\n break;\r\n case this.options.controlKeys.left:\r\n this.keyLeft = false;\r\n break;\r\n case this.options.controlKeys.right:\r\n this.keyRight = false;\r\n break;\r\n case this.options.controlKeys.forward:\r\n this.keyForward = false;\r\n break;\r\n case this.options.controlKeys.backward:\r\n this.keyBackward = false;\r\n break;\r\n default:\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Set options\r\n * @param opt - options\r\n */\r\n setOptions(opt?: FPSCameraControllerOptions) {\r\n Object.assign(this.options, opt ?? {});\r\n this.reset();\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController.update}\r\n * @override\r\n */\r\n update() {\r\n const x = this._getCamera().worldMatrix.getRow(0).xyz();\r\n x.y = 0;\r\n x.inplaceNormalize();\r\n const z = this._getCamera().worldMatrix.getRow(2).xyz().inplaceNormalize();\r\n const move = new Vector3(0, 0, 0);\r\n let changed = false;\r\n if (this.keyForward) {\r\n changed = true;\r\n move.subBy(Vector3.scale(z, this.options.moveSpeed));\r\n }\r\n if (this.keyBackward) {\r\n changed = true;\r\n move.addBy(Vector3.scale(z, this.options.moveSpeed));\r\n }\r\n if (this.keyUp) {\r\n changed = true;\r\n move.y += this.options.moveSpeed;\r\n }\r\n if (this.keyDown) {\r\n changed = true;\r\n move.y -= this.options.moveSpeed;\r\n }\r\n if (this.keyLeft) {\r\n changed = true;\r\n move.subBy(Vector3.scale(x, this.options.moveSpeed));\r\n }\r\n if (this.keyRight) {\r\n changed = true;\r\n move.addBy(Vector3.scale(x, this.options.moveSpeed));\r\n }\r\n if (changed) {\r\n if (this._getCamera().parent) {\r\n const pos = new Vector3();\r\n const scale = new Vector3();\r\n const rotation = new Quaternion();\r\n this._getCamera().worldMatrix.decompose(scale, rotation, pos);\r\n pos.addBy(move);\r\n const newWorldMatrix = Matrix4x4.scaling(scale).rotateLeft(rotation).translateLeft(pos);\r\n const newLocalMatrix = newWorldMatrix.multiplyLeftAffine(\r\n Matrix4x4.invertAffine(this._getCamera().parent.worldMatrix)\r\n );\r\n newLocalMatrix.decompose(scale, rotation, pos);\r\n this._getCamera().position.set(pos);\r\n this._getCamera().scale.set(scale);\r\n this._getCamera().rotation.set(rotation);\r\n } else {\r\n this._getCamera().moveBy(move);\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["FPSCameraController","BaseCameraController","options","Object","assign","controlKeys","up","down","forward","backward","left","right","moveSpeed","rotateSpeed","reset","mouseDown","lastMouseX","lastMouseY","keyUp","keyDown","keyLeft","keyRight","keyForward","keyBackward","_onMouseDown","evt","button","offsetX","offsetY","_onMouseUp","_onMouseMove","dx","dy","zAxis","_getCamera","worldMatrix","getRow","xyz","alpha","Math","atan2","z","x","beta","min","PI","max","asin","y","newY","sin","r","sqrt","newZ","newX","cos","setXYZ","inplaceNormalize","XAxis","Vector3","cross","axisPY","YAxis","rotation","Quaternion","fromRotationMatrix","Matrix3x3","parent","set","pos","scale","decompose","newWorldMatrix","Matrix4x4","scaling","rotateLeft","translateLeft","newLocalMatrix","multiplyLeftAffine","invertAffine","position","_onKeyDown","code","_onKeyUp","setOptions","opt","update","move","changed","subBy","addBy","moveBy"],"mappings":"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"}
|