@zephyr3d/scene 0.9.26 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -27
- package/dist/animation/animation_bank.js +634 -0
- package/dist/animation/animation_bank.js.map +1 -0
- package/dist/animation/animation_bank_gpu.js +256 -0
- package/dist/animation/animation_bank_gpu.js.map +1 -0
- package/dist/animation/animationset.js +146 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_component.js +406 -0
- package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
- package/dist/animation/cloth/gpu_cloth_system.js +332 -202
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/gpu_animation_driver.js +289 -0
- package/dist/animation/gpu_animation_driver.js.map +1 -0
- package/dist/animation/joint_dynamics/collision.js +112 -1
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +6 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +50 -12
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/skeleton.js +300 -56
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skin_palette_atlas.js +252 -0
- package/dist/animation/skin_palette_atlas.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +298 -38
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +2 -0
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +159 -21
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_solver.js +173 -0
- package/dist/animation/spring/spring_solver.js.map +1 -0
- package/dist/animation/spring/spring_system.js +249 -24
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +32 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/app.js +26 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +86 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/gamepad.js +191 -0
- package/dist/app/gamepad.js.map +1 -0
- package/dist/app/inputactions.js +271 -0
- package/dist/app/inputactions.js.map +1 -0
- package/dist/app/inputmgr.js +331 -22
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/loading.js +138 -0
- package/dist/app/loading.js.map +1 -0
- package/dist/app/pipelinecache.js +209 -0
- package/dist/app/pipelinecache.js.map +1 -0
- package/dist/app/runtimescript.js +25 -0
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/scriptingsystem.js +54 -0
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +7 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/asset_manifest.js +59 -0
- package/dist/asset/asset_manifest.js.map +1 -0
- package/dist/asset/asset_preload.js +258 -0
- package/dist/asset/asset_preload.js.map +1 -0
- package/dist/asset/assetmanager.js +117 -65
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/dist/asset/loaders/ktx2/basis_location.js +17 -0
- package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
- package/dist/asset/mesh_lod_builder.js +104 -0
- package/dist/asset/mesh_lod_builder.js.map +1 -0
- package/dist/asset/mesh_settings.js +111 -0
- package/dist/asset/mesh_settings.js.map +1 -0
- package/dist/asset/meshopt_decoder.js +18 -0
- package/dist/asset/meshopt_decoder.js.map +1 -0
- package/dist/asset/meshopt_simplifier.js +26 -0
- package/dist/asset/meshopt_simplifier.js.map +1 -0
- package/dist/asset/model.js +177 -3
- package/dist/asset/model.js.map +1 -1
- package/dist/asset/texture_settings.js +231 -0
- package/dist/asset/texture_settings.js.map +1 -0
- package/dist/asset/zmsh_binary.js +131 -0
- package/dist/asset/zmsh_binary.js.map +1 -0
- package/dist/asset/zsdf_binary.js +111 -0
- package/dist/asset/zsdf_binary.js.map +1 -0
- package/dist/blitter/bilateralblur.js +1 -2
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/gaussianblur.js +1 -6
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +31 -10
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +178 -200
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/follow.js +342 -0
- package/dist/camera/follow.js.map +1 -0
- package/dist/camera/fps.js +9 -7
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +46 -19
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +30475 -19865
- package/dist/index.js +67 -12
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +3 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/eye.js +1 -1
- package/dist/material/eye.js.map +1 -1
- package/dist/material/hair.js +2 -3
- package/dist/material/hair.js.map +1 -1
- package/dist/material/hairstrand.js +235 -235
- package/dist/material/hairstrand.js.map +1 -1
- package/dist/material/lambert.js +4 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +362 -300
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +118 -45
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +223 -83
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +31 -206
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +1 -1
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrmr.js +3 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +3 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/sdf_debug.js +78 -0
- package/dist/material/sdf_debug.js.map +1 -0
- package/dist/material/shader/helper.js +733 -190
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +204 -43
- package/dist/material/shader/terrain_blend.js.map +1 -1
- package/dist/material/skin.js +331 -297
- package/dist/material/skin.js.map +1 -1
- package/dist/material/skinprofile.js +1058 -0
- package/dist/material/skinprofile.js.map +1 -0
- package/dist/material/sss.js +353 -0
- package/dist/material/sss.js.map +1 -0
- package/dist/material/sss_kernel.js +265 -0
- package/dist/material/sss_kernel.js.map +1 -0
- package/dist/material/sssprofile.js +879 -0
- package/dist/material/sssprofile.js.map +1 -0
- package/dist/material/subsurfaceprofile.js +4 -8
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/terrain-cm.js +464 -188
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js +3 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +2009 -201
- package/dist/material/water.js.map +1 -1
- package/dist/node_modules/meshoptimizer/LICENSE +21 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
- package/dist/physics/character.js +226 -0
- package/dist/physics/character.js.map +1 -0
- package/dist/physics/collider.js +209 -0
- package/dist/physics/collider.js.map +1 -0
- package/dist/physics/events.js +79 -0
- package/dist/physics/events.js.map +1 -0
- package/dist/physics/joint.js +272 -0
- package/dist/physics/joint.js.map +1 -0
- package/dist/physics/node_physics.js +234 -0
- package/dist/physics/node_physics.js.map +1 -0
- package/dist/physics/part.js +91 -0
- package/dist/physics/part.js.map +1 -0
- package/dist/physics/rigid_body.js +379 -0
- package/dist/physics/rigid_body.js.map +1 -0
- package/dist/physics/vehicle.js +335 -0
- package/dist/physics/vehicle.js.map +1 -0
- package/dist/physics/world.js +25 -0
- package/dist/physics/world.js.map +1 -0
- package/dist/posteffect/bloom.js +49 -14
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/motionblur.js +668 -63
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/postsss.js +572 -0
- package/dist/posteffect/postsss.js.map +1 -0
- package/dist/posteffect/sao.js +48 -50
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +605 -355
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +91 -162
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -11
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +34 -15
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +1 -0
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +40 -39
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +328 -62
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +958 -224
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +26 -5
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/debug_views.js +37 -0
- package/dist/render/debug_views.js.map +1 -0
- package/dist/render/depthpass.js +5 -1
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +53 -6
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +53 -53
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +196 -113
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +8 -13
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +268 -136
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +113 -28
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/gi/probe_volume.js +1334 -0
- package/dist/render/gi/probe_volume.js.map +1 -0
- package/dist/render/gi/scene_gi.js +282 -0
- package/dist/render/gi/scene_gi.js.map +1 -0
- package/dist/render/gi/voxel_atlas.js +198 -0
- package/dist/render/gi/voxel_atlas.js.map +1 -0
- package/dist/render/gi/voxel_lighting.js +652 -0
- package/dist/render/gi/voxel_lighting.js.map +1 -0
- package/dist/render/gi/voxel_scene.js +642 -0
- package/dist/render/gi/voxel_scene.js.map +1 -0
- package/dist/render/gi/voxelize_pass.js +223 -0
- package/dist/render/gi/voxelize_pass.js.map +1 -0
- package/dist/render/globalbindgroup_allocator.js +3 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/gpu_picking.js +9 -36
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/instance_culling.js +499 -0
- package/dist/render/instance_culling.js.map +1 -0
- package/dist/render/lightpass.js +23 -9
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/lod.js +46 -0
- package/dist/render/lod.js.map +1 -0
- package/dist/render/oit.js +11 -11
- package/dist/render/oit.js.map +1 -1
- package/dist/render/primitive.js +301 -9
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/primitive_readback.js +209 -0
- package/dist/render/primitive_readback.js.map +1 -0
- package/dist/render/render_queue.js +198 -11
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +14 -7
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +15 -1
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/executor.js +136 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +585 -59
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/scene_render_context.js +31 -2
- package/dist/render/rendergraph/scene_render_context.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +28 -5
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sdf/box_allocator.js +98 -0
- package/dist/render/sdf/box_allocator.js.map +1 -0
- package/dist/render/sdf/global_sdf.js +865 -0
- package/dist/render/sdf/global_sdf.js.map +1 -0
- package/dist/render/sdf/scene_sdf.js +562 -0
- package/dist/render/sdf/scene_sdf.js.map +1 -0
- package/dist/render/sdf/sdf_atlas.js +227 -0
- package/dist/render/sdf/sdf_atlas.js.map +1 -0
- package/dist/render/sdf/sdf_programs.js +42 -0
- package/dist/render/sdf/sdf_programs.js.map +1 -0
- package/dist/render/sdf/sdf_view.js +199 -0
- package/dist/render/sdf/sdf_view.js.map +1 -0
- package/dist/render/sdf/waterline.js +610 -0
- package/dist/render/sdf/waterline.js.map +1 -0
- package/dist/render/shadow_mask_pass.js +142 -25
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/shore_wave_generator.js +1193 -0
- package/dist/render/shore_wave_generator.js.map +1 -0
- package/dist/render/sky.js +516 -86
- package/dist/render/sky.js.map +1 -1
- package/dist/render/transmission_thickness_pass.js +477 -0
- package/dist/render/transmission_thickness_pass.js.map +1 -0
- package/dist/render/underwater.js +524 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/virtualtexture/virtual_texture.js +1214 -0
- package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_common.js +472 -0
- package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
- package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
- package/dist/render/volumetric_cloud/debug_view.js +131 -0
- package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
- package/dist/render/volumetric_cloud/resources.js +380 -0
- package/dist/render/volumetric_cloud/resources.js.map +1 -0
- package/dist/render/volumetric_cloud/sky_cache.js +380 -0
- package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
- package/dist/render/water_caustics.js +1195 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/water_foam.js +627 -0
- package/dist/render/water_foam.js.map +1 -0
- package/dist/render/water_interaction.js +1795 -0
- package/dist/render/water_interaction.js.map +1 -0
- package/dist/render/weightedblended_oit.js +36 -36
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +9 -4
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +108 -12
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +28 -7
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/foliage.js +1020 -0
- package/dist/scene/foliage.js.map +1 -0
- package/dist/scene/foliage_buckets.js +147 -0
- package/dist/scene/foliage_buckets.js.map +1 -0
- package/dist/scene/foliage_mask.js +358 -0
- package/dist/scene/foliage_mask.js.map +1 -0
- package/dist/scene/hair.js +15 -4
- package/dist/scene/hair.js.map +1 -1
- package/dist/scene/light.js +179 -13
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +327 -45
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +9 -3
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +9 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +8 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/physics_settings.js +157 -0
- package/dist/scene/physics_settings.js.map +1 -0
- package/dist/scene/scene.js +190 -44
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +147 -6
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
- package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +881 -42
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grass_gpu.js +929 -0
- package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +180 -9
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +465 -36
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
- package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
- package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
- package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
- package/dist/scene/update_queue.js +54 -0
- package/dist/scene/update_queue.js.map +1 -0
- package/dist/scene/water.js +997 -96
- package/dist/scene/water.js.map +1 -1
- package/dist/scene/water_surface_sampler.js +324 -0
- package/dist/scene/water_surface_sampler.js.map +1 -0
- package/dist/scene/wind.js +317 -0
- package/dist/scene/wind.js.map +1 -0
- package/dist/shaders/atmosphere.js +388 -166
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +100 -32
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/gi.js +365 -0
- package/dist/shaders/gi.js.map +1 -0
- package/dist/shaders/ltc_rect.js +202 -0
- package/dist/shaders/ltc_rect.js.map +1 -0
- package/dist/shaders/misc.js +1 -10
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +5 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/probes.js +309 -0
- package/dist/shaders/probes.js.map +1 -0
- package/dist/shaders/sdf.js +537 -0
- package/dist/shaders/sdf.js.map +1 -0
- package/dist/shaders/shadow.js +104 -70
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/skin_brdf.js +243 -0
- package/dist/shaders/skin_brdf.js.map +1 -0
- package/dist/shaders/ssr.js +6 -159
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +38 -27
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +40 -87
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +42 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/dom.js +110 -19
- package/dist/shadow/dom.js.map +1 -1
- package/dist/shadow/esm.js +3 -3
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +15 -48
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +15 -53
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +34 -9
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +3 -8
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +87 -49
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +93 -53
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +18 -72
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +3 -3
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/shape.js +44 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/utility/buoyancy.js +287 -0
- package/dist/utility/buoyancy.js.map +1 -0
- package/dist/utility/physical.js +10 -1
- package/dist/utility/physical.js.map +1 -1
- package/dist/utility/pmrem.js +17 -43
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/sdf/bake.js +435 -0
- package/dist/utility/sdf/bake.js.map +1 -0
- package/dist/utility/sdf/bvh.js +576 -0
- package/dist/utility/sdf/bvh.js.map +1 -0
- package/dist/utility/serialization/manager.js +36 -6
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +77 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +11 -4
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +140 -279
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth.js +25 -0
- package/dist/utility/serialization/scene/cloth.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +14 -6
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/foliage.js +821 -0
- package/dist/utility/serialization/scene/foliage.js.map +1 -0
- package/dist/utility/serialization/scene/hair.js +11 -4
- package/dist/utility/serialization/scene/hair.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +115 -7
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +388 -220
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +69 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +140 -5
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/node_physics.js +1318 -0
- package/dist/utility/serialization/scene/node_physics.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +11 -4
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/physics.js +120 -0
- package/dist/utility/serialization/scene/physics.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +124 -10
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +1687 -51
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +11 -4
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +163 -33
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +11 -4
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +2473 -114
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +97 -109
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/foam.js +170 -0
- package/dist/utility/textures/foam.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +17 -43
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +4 -4
- package/dist/utility/textures/ltcdata.js.map +1 -1
- package/dist/utility/textures/ltclut.js +16 -6
- package/dist/utility/textures/ltclut.js.map +1 -1
- package/dist/utility/unsupported.js +24 -0
- package/dist/utility/unsupported.js.map +1 -0
- package/dist/values.js +13 -1
- package/dist/values.js.map +1 -1
- package/package.json +25 -12
- package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/src/asset/meshoptimizer/LICENSE +21 -0
|
@@ -0,0 +1,1318 @@
|
|
|
1
|
+
import { Vector3 } from '@zephyr3d/base';
|
|
2
|
+
import { defineProps } from '../types.js';
|
|
3
|
+
import { RigidBody } from '../../../physics/rigid_body.js';
|
|
4
|
+
import { Collider } from '../../../physics/collider.js';
|
|
5
|
+
import { Joint } from '../../../physics/joint.js';
|
|
6
|
+
import { CharacterController } from '../../../physics/character.js';
|
|
7
|
+
import { Vehicle, Wheel } from '../../../physics/vehicle.js';
|
|
8
|
+
import { NodePhysics } from '../../../physics/node_physics.js';
|
|
9
|
+
|
|
10
|
+
/** @internal */ function getRigidBodyClass() {
|
|
11
|
+
return {
|
|
12
|
+
ctor: RigidBody,
|
|
13
|
+
name: 'RigidBody',
|
|
14
|
+
getProps () {
|
|
15
|
+
return defineProps([
|
|
16
|
+
{
|
|
17
|
+
name: 'MotionType',
|
|
18
|
+
description: 'Dynamic: falls and gets pushed around. Kinematic: follows its node and pushes others aside. Static: never moves',
|
|
19
|
+
type: 'string',
|
|
20
|
+
default: 'dynamic',
|
|
21
|
+
options: {
|
|
22
|
+
enum: {
|
|
23
|
+
labels: [
|
|
24
|
+
'Dynamic',
|
|
25
|
+
'Kinematic',
|
|
26
|
+
'Static'
|
|
27
|
+
],
|
|
28
|
+
values: [
|
|
29
|
+
'dynamic',
|
|
30
|
+
'kinematic',
|
|
31
|
+
'static'
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
get (value) {
|
|
36
|
+
value.str[0] = this.motionType;
|
|
37
|
+
},
|
|
38
|
+
set (value) {
|
|
39
|
+
this.motionType = value.str[0];
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Mass',
|
|
44
|
+
description: 'Weight in kilograms; heavier bodies push lighter ones aside and are harder to stop',
|
|
45
|
+
type: 'float',
|
|
46
|
+
default: 1,
|
|
47
|
+
options: {
|
|
48
|
+
minValue: 0.001,
|
|
49
|
+
maxValue: 10000
|
|
50
|
+
},
|
|
51
|
+
get (value) {
|
|
52
|
+
value.num[0] = this.mass;
|
|
53
|
+
},
|
|
54
|
+
set (value) {
|
|
55
|
+
this.mass = value.num[0];
|
|
56
|
+
},
|
|
57
|
+
isHidden () {
|
|
58
|
+
return this.motionType !== 'dynamic';
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'LinearDamping',
|
|
63
|
+
description: 'Slows the body down as if moving through air or water; 0 keeps it going',
|
|
64
|
+
type: 'float',
|
|
65
|
+
default: 0,
|
|
66
|
+
options: {
|
|
67
|
+
minValue: 0,
|
|
68
|
+
maxValue: 10
|
|
69
|
+
},
|
|
70
|
+
get (value) {
|
|
71
|
+
value.num[0] = this.linearDamping;
|
|
72
|
+
},
|
|
73
|
+
set (value) {
|
|
74
|
+
this.linearDamping = value.num[0];
|
|
75
|
+
},
|
|
76
|
+
isHidden () {
|
|
77
|
+
return this.motionType !== 'dynamic';
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'AngularDamping',
|
|
82
|
+
description: 'Makes spinning die down; higher values stop rolling objects sooner',
|
|
83
|
+
type: 'float',
|
|
84
|
+
default: 0.05,
|
|
85
|
+
options: {
|
|
86
|
+
minValue: 0,
|
|
87
|
+
maxValue: 10
|
|
88
|
+
},
|
|
89
|
+
get (value) {
|
|
90
|
+
value.num[0] = this.angularDamping;
|
|
91
|
+
},
|
|
92
|
+
set (value) {
|
|
93
|
+
this.angularDamping = value.num[0];
|
|
94
|
+
},
|
|
95
|
+
isHidden () {
|
|
96
|
+
return this.motionType !== 'dynamic';
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'GravityScale',
|
|
101
|
+
description: 'How strongly gravity pulls this body: 0 floats, 1 falls normally, negative rises',
|
|
102
|
+
type: 'float',
|
|
103
|
+
default: 1,
|
|
104
|
+
options: {
|
|
105
|
+
minValue: -10,
|
|
106
|
+
maxValue: 10
|
|
107
|
+
},
|
|
108
|
+
get (value) {
|
|
109
|
+
value.num[0] = this.gravityScale;
|
|
110
|
+
},
|
|
111
|
+
set (value) {
|
|
112
|
+
this.gravityScale = value.num[0];
|
|
113
|
+
},
|
|
114
|
+
isHidden () {
|
|
115
|
+
return this.motionType !== 'dynamic';
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'CCD',
|
|
120
|
+
description: 'Stops small, fast objects from passing through thin walls, at some cost',
|
|
121
|
+
type: 'bool',
|
|
122
|
+
default: false,
|
|
123
|
+
get (value) {
|
|
124
|
+
value.bool[0] = this.ccd;
|
|
125
|
+
},
|
|
126
|
+
set (value) {
|
|
127
|
+
this.ccd = value.bool[0];
|
|
128
|
+
},
|
|
129
|
+
isHidden () {
|
|
130
|
+
return this.motionType !== 'dynamic';
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: 'CanSleep',
|
|
135
|
+
description: 'Lets the body stop being simulated once it comes to rest, saving time',
|
|
136
|
+
type: 'bool',
|
|
137
|
+
default: true,
|
|
138
|
+
get (value) {
|
|
139
|
+
value.bool[0] = this.canSleep;
|
|
140
|
+
},
|
|
141
|
+
set (value) {
|
|
142
|
+
this.canSleep = value.bool[0];
|
|
143
|
+
},
|
|
144
|
+
isHidden () {
|
|
145
|
+
return this.motionType !== 'dynamic';
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: 'InitialLinearVelocity',
|
|
150
|
+
description: 'Speed and direction it is already moving in when the game starts, in m/s; e.g. a thrown ball',
|
|
151
|
+
type: 'vec3',
|
|
152
|
+
default: [
|
|
153
|
+
0,
|
|
154
|
+
0,
|
|
155
|
+
0
|
|
156
|
+
],
|
|
157
|
+
get (value) {
|
|
158
|
+
const v = this.initialLinearVelocity;
|
|
159
|
+
value.num[0] = v.x;
|
|
160
|
+
value.num[1] = v.y;
|
|
161
|
+
value.num[2] = v.z;
|
|
162
|
+
},
|
|
163
|
+
set (value) {
|
|
164
|
+
this.initialLinearVelocity = new Vector3(value.num[0], value.num[1], value.num[2]);
|
|
165
|
+
},
|
|
166
|
+
isHidden () {
|
|
167
|
+
return this.motionType !== 'dynamic';
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: 'InitialAngularVelocity',
|
|
172
|
+
description: 'Spin it already has when the game starts, in radians per second about each world axis; 6.28 is one turn a second',
|
|
173
|
+
type: 'vec3',
|
|
174
|
+
default: [
|
|
175
|
+
0,
|
|
176
|
+
0,
|
|
177
|
+
0
|
|
178
|
+
],
|
|
179
|
+
get (value) {
|
|
180
|
+
const v = this.initialAngularVelocity;
|
|
181
|
+
value.num[0] = v.x;
|
|
182
|
+
value.num[1] = v.y;
|
|
183
|
+
value.num[2] = v.z;
|
|
184
|
+
},
|
|
185
|
+
set (value) {
|
|
186
|
+
this.initialAngularVelocity = new Vector3(value.num[0], value.num[1], value.num[2]);
|
|
187
|
+
},
|
|
188
|
+
isHidden () {
|
|
189
|
+
return this.motionType !== 'dynamic';
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
name: 'LockTranslationX',
|
|
194
|
+
description: 'Stops the body sliding along the world X axis, e.g. to keep a 2.5D game on its plane',
|
|
195
|
+
type: 'bool',
|
|
196
|
+
default: false,
|
|
197
|
+
get (value) {
|
|
198
|
+
value.bool[0] = this.lockTranslationX;
|
|
199
|
+
},
|
|
200
|
+
set (value) {
|
|
201
|
+
this.lockTranslationX = value.bool[0];
|
|
202
|
+
},
|
|
203
|
+
isHidden () {
|
|
204
|
+
return this.motionType !== 'dynamic';
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
name: 'LockTranslationY',
|
|
209
|
+
description: 'Stops the body sliding along the world Y axis, e.g. to keep a 2.5D game on its plane',
|
|
210
|
+
type: 'bool',
|
|
211
|
+
default: false,
|
|
212
|
+
get (value) {
|
|
213
|
+
value.bool[0] = this.lockTranslationY;
|
|
214
|
+
},
|
|
215
|
+
set (value) {
|
|
216
|
+
this.lockTranslationY = value.bool[0];
|
|
217
|
+
},
|
|
218
|
+
isHidden () {
|
|
219
|
+
return this.motionType !== 'dynamic';
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
name: 'LockTranslationZ',
|
|
224
|
+
description: 'Stops the body sliding along the world Z axis, e.g. to keep a 2.5D game on its plane',
|
|
225
|
+
type: 'bool',
|
|
226
|
+
default: false,
|
|
227
|
+
get (value) {
|
|
228
|
+
value.bool[0] = this.lockTranslationZ;
|
|
229
|
+
},
|
|
230
|
+
set (value) {
|
|
231
|
+
this.lockTranslationZ = value.bool[0];
|
|
232
|
+
},
|
|
233
|
+
isHidden () {
|
|
234
|
+
return this.motionType !== 'dynamic';
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
name: 'LockRotationX',
|
|
239
|
+
description: 'Stops the body tipping or spinning about the world X axis, e.g. to keep a character upright',
|
|
240
|
+
type: 'bool',
|
|
241
|
+
default: false,
|
|
242
|
+
get (value) {
|
|
243
|
+
value.bool[0] = this.lockRotationX;
|
|
244
|
+
},
|
|
245
|
+
set (value) {
|
|
246
|
+
this.lockRotationX = value.bool[0];
|
|
247
|
+
},
|
|
248
|
+
isHidden () {
|
|
249
|
+
return this.motionType !== 'dynamic';
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
name: 'LockRotationY',
|
|
254
|
+
description: 'Stops the body tipping or spinning about the world Y axis, e.g. to keep a character upright',
|
|
255
|
+
type: 'bool',
|
|
256
|
+
default: false,
|
|
257
|
+
get (value) {
|
|
258
|
+
value.bool[0] = this.lockRotationY;
|
|
259
|
+
},
|
|
260
|
+
set (value) {
|
|
261
|
+
this.lockRotationY = value.bool[0];
|
|
262
|
+
},
|
|
263
|
+
isHidden () {
|
|
264
|
+
return this.motionType !== 'dynamic';
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
name: 'LockRotationZ',
|
|
269
|
+
description: 'Stops the body tipping or spinning about the world Z axis, e.g. to keep a character upright',
|
|
270
|
+
type: 'bool',
|
|
271
|
+
default: false,
|
|
272
|
+
get (value) {
|
|
273
|
+
value.bool[0] = this.lockRotationZ;
|
|
274
|
+
},
|
|
275
|
+
set (value) {
|
|
276
|
+
this.lockRotationZ = value.bool[0];
|
|
277
|
+
},
|
|
278
|
+
isHidden () {
|
|
279
|
+
return this.motionType !== 'dynamic';
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
]);
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
/** @internal */ function getColliderClass() {
|
|
287
|
+
const usesRadius = (c)=>c.shape === 'sphere' || c.shape === 'capsule' || c.shape === 'cylinder';
|
|
288
|
+
const usesMesh = (c)=>c.shape === 'mesh' || c.shape === 'convex';
|
|
289
|
+
const usesHeight = (c)=>c.shape === 'capsule' || c.shape === 'cylinder';
|
|
290
|
+
return {
|
|
291
|
+
ctor: Collider,
|
|
292
|
+
name: 'Collider',
|
|
293
|
+
getProps () {
|
|
294
|
+
return defineProps([
|
|
295
|
+
{
|
|
296
|
+
name: 'Shape',
|
|
297
|
+
description: 'Outline used for collisions; pick the simplest one that fits the object',
|
|
298
|
+
type: 'string',
|
|
299
|
+
default: 'box',
|
|
300
|
+
options: {
|
|
301
|
+
enum: {
|
|
302
|
+
labels: [
|
|
303
|
+
'Box',
|
|
304
|
+
'Sphere',
|
|
305
|
+
'Capsule',
|
|
306
|
+
'Cylinder',
|
|
307
|
+
'Mesh',
|
|
308
|
+
'Convex hull',
|
|
309
|
+
'Terrain'
|
|
310
|
+
],
|
|
311
|
+
values: [
|
|
312
|
+
'box',
|
|
313
|
+
'sphere',
|
|
314
|
+
'capsule',
|
|
315
|
+
'cylinder',
|
|
316
|
+
'mesh',
|
|
317
|
+
'convex',
|
|
318
|
+
'terrain'
|
|
319
|
+
]
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
get (value) {
|
|
323
|
+
value.str[0] = this.shape;
|
|
324
|
+
},
|
|
325
|
+
set (value) {
|
|
326
|
+
this.shape = value.str[0];
|
|
327
|
+
}
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
name: 'Size',
|
|
331
|
+
description: 'Width, height and depth of the box',
|
|
332
|
+
type: 'vec3',
|
|
333
|
+
default: [
|
|
334
|
+
1,
|
|
335
|
+
1,
|
|
336
|
+
1
|
|
337
|
+
],
|
|
338
|
+
options: {
|
|
339
|
+
minValue: 0
|
|
340
|
+
},
|
|
341
|
+
get (value) {
|
|
342
|
+
value.num[0] = this.size.x;
|
|
343
|
+
value.num[1] = this.size.y;
|
|
344
|
+
value.num[2] = this.size.z;
|
|
345
|
+
},
|
|
346
|
+
set (value) {
|
|
347
|
+
this.size = new Vector3(value.num[0], value.num[1], value.num[2]);
|
|
348
|
+
},
|
|
349
|
+
isHidden () {
|
|
350
|
+
return this.shape !== 'box';
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
name: 'Radius',
|
|
355
|
+
description: 'Radius of the sphere, capsule or cylinder',
|
|
356
|
+
type: 'float',
|
|
357
|
+
default: 0.5,
|
|
358
|
+
options: {
|
|
359
|
+
minValue: 0
|
|
360
|
+
},
|
|
361
|
+
get (value) {
|
|
362
|
+
value.num[0] = this.radius;
|
|
363
|
+
},
|
|
364
|
+
set (value) {
|
|
365
|
+
this.radius = value.num[0];
|
|
366
|
+
},
|
|
367
|
+
isHidden () {
|
|
368
|
+
return !usesRadius(this);
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
name: 'Height',
|
|
373
|
+
description: "Total height of the capsule or cylinder along the object's up axis",
|
|
374
|
+
type: 'float',
|
|
375
|
+
default: 2,
|
|
376
|
+
options: {
|
|
377
|
+
minValue: 0
|
|
378
|
+
},
|
|
379
|
+
get (value) {
|
|
380
|
+
value.num[0] = this.height;
|
|
381
|
+
},
|
|
382
|
+
set (value) {
|
|
383
|
+
this.height = value.num[0];
|
|
384
|
+
},
|
|
385
|
+
isHidden () {
|
|
386
|
+
return !usesHeight(this);
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
name: 'MeshLod',
|
|
391
|
+
description: 'Which level of detail of the mesh to collide with; higher levels are rougher but cheaper. 0 is the full mesh',
|
|
392
|
+
type: 'int',
|
|
393
|
+
default: 0,
|
|
394
|
+
options: {
|
|
395
|
+
minValue: 0,
|
|
396
|
+
maxValue: 16
|
|
397
|
+
},
|
|
398
|
+
get (value) {
|
|
399
|
+
value.num[0] = this.meshLod;
|
|
400
|
+
},
|
|
401
|
+
set (value) {
|
|
402
|
+
this.meshLod = value.num[0];
|
|
403
|
+
},
|
|
404
|
+
isHidden () {
|
|
405
|
+
return !usesMesh(this);
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
name: 'TerrainResolution',
|
|
410
|
+
description: 'Spacing of the ground samples in height map texels; larger values follow bumps less closely but use less memory',
|
|
411
|
+
type: 'int',
|
|
412
|
+
default: 1,
|
|
413
|
+
options: {
|
|
414
|
+
minValue: 1,
|
|
415
|
+
maxValue: 16
|
|
416
|
+
},
|
|
417
|
+
get (value) {
|
|
418
|
+
value.num[0] = this.terrainResolution;
|
|
419
|
+
},
|
|
420
|
+
set (value) {
|
|
421
|
+
this.terrainResolution = value.num[0];
|
|
422
|
+
},
|
|
423
|
+
isHidden () {
|
|
424
|
+
return this.shape !== 'terrain';
|
|
425
|
+
}
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
name: 'Offset',
|
|
429
|
+
description: "Moves the shape away from the object's origin, to line it up with the visible mesh",
|
|
430
|
+
type: 'vec3',
|
|
431
|
+
default: [
|
|
432
|
+
0,
|
|
433
|
+
0,
|
|
434
|
+
0
|
|
435
|
+
],
|
|
436
|
+
get (value) {
|
|
437
|
+
value.num[0] = this.offset.x;
|
|
438
|
+
value.num[1] = this.offset.y;
|
|
439
|
+
value.num[2] = this.offset.z;
|
|
440
|
+
},
|
|
441
|
+
set (value) {
|
|
442
|
+
this.offset = new Vector3(value.num[0], value.num[1], value.num[2]);
|
|
443
|
+
},
|
|
444
|
+
isHidden () {
|
|
445
|
+
return this.shape === 'terrain';
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
name: 'Friction',
|
|
450
|
+
description: 'Grip against sliding: 0 is ice, around 1 is rubber',
|
|
451
|
+
type: 'float',
|
|
452
|
+
default: 0.5,
|
|
453
|
+
options: {
|
|
454
|
+
minValue: 0,
|
|
455
|
+
maxValue: 2
|
|
456
|
+
},
|
|
457
|
+
get (value) {
|
|
458
|
+
value.num[0] = this.friction;
|
|
459
|
+
},
|
|
460
|
+
set (value) {
|
|
461
|
+
this.friction = value.num[0];
|
|
462
|
+
}
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
name: 'Restitution',
|
|
466
|
+
description: 'Bounciness: 0 lands dead, 1 bounces back to the height it fell from',
|
|
467
|
+
type: 'float',
|
|
468
|
+
default: 0,
|
|
469
|
+
options: {
|
|
470
|
+
minValue: 0,
|
|
471
|
+
maxValue: 1
|
|
472
|
+
},
|
|
473
|
+
get (value) {
|
|
474
|
+
value.num[0] = this.restitution;
|
|
475
|
+
},
|
|
476
|
+
set (value) {
|
|
477
|
+
this.restitution = value.num[0];
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
name: 'IsTrigger',
|
|
482
|
+
description: 'Detects things entering it without blocking them, e.g. for pickup or alarm zones',
|
|
483
|
+
type: 'bool',
|
|
484
|
+
default: false,
|
|
485
|
+
get (value) {
|
|
486
|
+
value.bool[0] = this.isTrigger;
|
|
487
|
+
},
|
|
488
|
+
set (value) {
|
|
489
|
+
this.isTrigger = value.bool[0];
|
|
490
|
+
}
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
name: 'Layer',
|
|
494
|
+
description: 'Collision layer 0-15; the world decides which layers pass through each other, and queries can skip layers',
|
|
495
|
+
type: 'int',
|
|
496
|
+
default: 0,
|
|
497
|
+
options: {
|
|
498
|
+
minValue: 0,
|
|
499
|
+
maxValue: 15
|
|
500
|
+
},
|
|
501
|
+
get (value) {
|
|
502
|
+
value.num[0] = this.layer;
|
|
503
|
+
},
|
|
504
|
+
set (value) {
|
|
505
|
+
this.layer = value.num[0];
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
]);
|
|
509
|
+
}
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
/** @internal */ function getJointClass() {
|
|
513
|
+
return {
|
|
514
|
+
ctor: Joint,
|
|
515
|
+
name: 'Joint',
|
|
516
|
+
getProps () {
|
|
517
|
+
return defineProps([
|
|
518
|
+
{
|
|
519
|
+
name: 'Type',
|
|
520
|
+
description: 'What the two bodies may do: stay together, swing like a door, slide like a drawer, swivel like a shoulder, hang on a rope, or bounce on a spring',
|
|
521
|
+
type: 'string',
|
|
522
|
+
default: 'hinge',
|
|
523
|
+
options: {
|
|
524
|
+
enum: {
|
|
525
|
+
labels: [
|
|
526
|
+
'Fixed',
|
|
527
|
+
'Hinge',
|
|
528
|
+
'Slider',
|
|
529
|
+
'Ball',
|
|
530
|
+
'Rope',
|
|
531
|
+
'Spring'
|
|
532
|
+
],
|
|
533
|
+
values: [
|
|
534
|
+
'fixed',
|
|
535
|
+
'hinge',
|
|
536
|
+
'slider',
|
|
537
|
+
'ball',
|
|
538
|
+
'rope',
|
|
539
|
+
'spring'
|
|
540
|
+
]
|
|
541
|
+
}
|
|
542
|
+
},
|
|
543
|
+
get (value) {
|
|
544
|
+
value.str[0] = this.type;
|
|
545
|
+
},
|
|
546
|
+
set (value) {
|
|
547
|
+
this.type = value.str[0];
|
|
548
|
+
}
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
name: 'ConnectedBody',
|
|
552
|
+
description: 'The object at the other end of the joint; leave empty to fix it to a point in the world',
|
|
553
|
+
type: 'string',
|
|
554
|
+
default: '',
|
|
555
|
+
options: {
|
|
556
|
+
sceneNode: {
|
|
557
|
+
kind: 'node'
|
|
558
|
+
}
|
|
559
|
+
},
|
|
560
|
+
get (value) {
|
|
561
|
+
value.str[0] = this.connectedBodyId;
|
|
562
|
+
},
|
|
563
|
+
set (value) {
|
|
564
|
+
this.connectedBodyId = value.str[0] ?? '';
|
|
565
|
+
}
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
name: 'Anchor',
|
|
569
|
+
description: 'Moves the pivot away from this node, to where the two objects meet',
|
|
570
|
+
type: 'vec3',
|
|
571
|
+
default: [
|
|
572
|
+
0,
|
|
573
|
+
0,
|
|
574
|
+
0
|
|
575
|
+
],
|
|
576
|
+
get (value) {
|
|
577
|
+
value.num[0] = this.anchor.x;
|
|
578
|
+
value.num[1] = this.anchor.y;
|
|
579
|
+
value.num[2] = this.anchor.z;
|
|
580
|
+
},
|
|
581
|
+
set (value) {
|
|
582
|
+
this.anchor = new Vector3(value.num[0], value.num[1], value.num[2]);
|
|
583
|
+
}
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
name: 'ConnectedAnchor',
|
|
587
|
+
description: 'Where a rope or spring is tied at the other end: a point on the connected object, or in the world when there is none',
|
|
588
|
+
type: 'vec3',
|
|
589
|
+
default: [
|
|
590
|
+
0,
|
|
591
|
+
0,
|
|
592
|
+
0
|
|
593
|
+
],
|
|
594
|
+
get (value) {
|
|
595
|
+
value.num[0] = this.connectedAnchor.x;
|
|
596
|
+
value.num[1] = this.connectedAnchor.y;
|
|
597
|
+
value.num[2] = this.connectedAnchor.z;
|
|
598
|
+
},
|
|
599
|
+
set (value) {
|
|
600
|
+
this.connectedAnchor = new Vector3(value.num[0], value.num[1], value.num[2]);
|
|
601
|
+
},
|
|
602
|
+
isHidden () {
|
|
603
|
+
return this.type !== 'rope' && this.type !== 'spring';
|
|
604
|
+
}
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
name: 'Axis',
|
|
608
|
+
description: "Direction, in this node's space, a hinge turns about or a slider moves along",
|
|
609
|
+
type: 'vec3',
|
|
610
|
+
default: [
|
|
611
|
+
0,
|
|
612
|
+
1,
|
|
613
|
+
0
|
|
614
|
+
],
|
|
615
|
+
get (value) {
|
|
616
|
+
value.num[0] = this.axis.x;
|
|
617
|
+
value.num[1] = this.axis.y;
|
|
618
|
+
value.num[2] = this.axis.z;
|
|
619
|
+
},
|
|
620
|
+
set (value) {
|
|
621
|
+
this.axis = new Vector3(value.num[0], value.num[1], value.num[2]);
|
|
622
|
+
},
|
|
623
|
+
isHidden () {
|
|
624
|
+
return this.type !== 'hinge' && this.type !== 'slider';
|
|
625
|
+
}
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
name: 'CollideConnected',
|
|
629
|
+
description: 'Lets the two joined objects bump into each other; off so a door does not catch on its frame',
|
|
630
|
+
type: 'bool',
|
|
631
|
+
default: false,
|
|
632
|
+
get (value) {
|
|
633
|
+
value.bool[0] = this.collideConnected;
|
|
634
|
+
},
|
|
635
|
+
set (value) {
|
|
636
|
+
this.collideConnected = value.bool[0];
|
|
637
|
+
}
|
|
638
|
+
},
|
|
639
|
+
{
|
|
640
|
+
name: 'LimitsEnabled',
|
|
641
|
+
description: 'Stops the joint turning or sliding past set limits',
|
|
642
|
+
type: 'bool',
|
|
643
|
+
default: false,
|
|
644
|
+
get (value) {
|
|
645
|
+
value.bool[0] = this.limitsEnabled;
|
|
646
|
+
},
|
|
647
|
+
set (value) {
|
|
648
|
+
this.limitsEnabled = value.bool[0];
|
|
649
|
+
},
|
|
650
|
+
isHidden () {
|
|
651
|
+
return this.type !== 'hinge' && this.type !== 'slider' && this.type !== 'ball';
|
|
652
|
+
}
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
name: 'LowerLimit',
|
|
656
|
+
description: 'How far a hinge may turn one way (degrees) or a slider move back (metres)',
|
|
657
|
+
type: 'float',
|
|
658
|
+
default: -45,
|
|
659
|
+
get (value) {
|
|
660
|
+
value.num[0] = this.lowerLimit;
|
|
661
|
+
},
|
|
662
|
+
set (value) {
|
|
663
|
+
this.lowerLimit = value.num[0];
|
|
664
|
+
},
|
|
665
|
+
isHidden () {
|
|
666
|
+
return this.type !== 'hinge' && this.type !== 'slider' || !this.limitsEnabled;
|
|
667
|
+
}
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
name: 'UpperLimit',
|
|
671
|
+
description: 'How far a hinge may turn the other way (degrees) or a slider move forward (metres)',
|
|
672
|
+
type: 'float',
|
|
673
|
+
default: 45,
|
|
674
|
+
get (value) {
|
|
675
|
+
value.num[0] = this.upperLimit;
|
|
676
|
+
},
|
|
677
|
+
set (value) {
|
|
678
|
+
this.upperLimit = value.num[0];
|
|
679
|
+
},
|
|
680
|
+
isHidden () {
|
|
681
|
+
return this.type !== 'hinge' && this.type !== 'slider' || !this.limitsEnabled;
|
|
682
|
+
}
|
|
683
|
+
},
|
|
684
|
+
{
|
|
685
|
+
name: 'SwingLimit',
|
|
686
|
+
description: 'How far a ball joint may tilt away from its axis, in degrees',
|
|
687
|
+
type: 'float',
|
|
688
|
+
default: 45,
|
|
689
|
+
options: {
|
|
690
|
+
minValue: 0,
|
|
691
|
+
maxValue: 180
|
|
692
|
+
},
|
|
693
|
+
get (value) {
|
|
694
|
+
value.num[0] = this.swingLimit;
|
|
695
|
+
},
|
|
696
|
+
set (value) {
|
|
697
|
+
this.swingLimit = value.num[0];
|
|
698
|
+
},
|
|
699
|
+
isHidden () {
|
|
700
|
+
return this.type !== 'ball' || !this.limitsEnabled;
|
|
701
|
+
}
|
|
702
|
+
},
|
|
703
|
+
{
|
|
704
|
+
name: 'TwistLimit',
|
|
705
|
+
description: 'How far a ball joint may twist about its axis, in degrees',
|
|
706
|
+
type: 'float',
|
|
707
|
+
default: 45,
|
|
708
|
+
options: {
|
|
709
|
+
minValue: 0,
|
|
710
|
+
maxValue: 180
|
|
711
|
+
},
|
|
712
|
+
get (value) {
|
|
713
|
+
value.num[0] = this.twistLimit;
|
|
714
|
+
},
|
|
715
|
+
set (value) {
|
|
716
|
+
this.twistLimit = value.num[0];
|
|
717
|
+
},
|
|
718
|
+
isHidden () {
|
|
719
|
+
return this.type !== 'ball' || !this.limitsEnabled;
|
|
720
|
+
}
|
|
721
|
+
},
|
|
722
|
+
{
|
|
723
|
+
name: 'MotorMode',
|
|
724
|
+
description: 'Drives a hinge or slider: to a steady speed, or to a set angle or position',
|
|
725
|
+
type: 'string',
|
|
726
|
+
default: 'off',
|
|
727
|
+
options: {
|
|
728
|
+
enum: {
|
|
729
|
+
labels: [
|
|
730
|
+
'Off',
|
|
731
|
+
'Speed',
|
|
732
|
+
'Position'
|
|
733
|
+
],
|
|
734
|
+
values: [
|
|
735
|
+
'off',
|
|
736
|
+
'velocity',
|
|
737
|
+
'position'
|
|
738
|
+
]
|
|
739
|
+
}
|
|
740
|
+
},
|
|
741
|
+
get (value) {
|
|
742
|
+
value.str[0] = this.motorMode;
|
|
743
|
+
},
|
|
744
|
+
set (value) {
|
|
745
|
+
this.motorMode = value.str[0];
|
|
746
|
+
},
|
|
747
|
+
isHidden () {
|
|
748
|
+
return this.type !== 'hinge' && this.type !== 'slider';
|
|
749
|
+
}
|
|
750
|
+
},
|
|
751
|
+
{
|
|
752
|
+
name: 'MotorTarget',
|
|
753
|
+
description: 'Speed to turn or slide at, or angle or position to reach (degrees for hinges, metres for sliders)',
|
|
754
|
+
type: 'float',
|
|
755
|
+
default: 0,
|
|
756
|
+
get (value) {
|
|
757
|
+
value.num[0] = this.motorTarget;
|
|
758
|
+
},
|
|
759
|
+
set (value) {
|
|
760
|
+
this.motorTarget = value.num[0];
|
|
761
|
+
},
|
|
762
|
+
isHidden () {
|
|
763
|
+
return this.type !== 'hinge' && this.type !== 'slider' || this.motorMode === 'off';
|
|
764
|
+
}
|
|
765
|
+
},
|
|
766
|
+
{
|
|
767
|
+
name: 'MotorStiffness',
|
|
768
|
+
description: 'How firmly a position motor pulls to its target',
|
|
769
|
+
type: 'float',
|
|
770
|
+
default: 1000,
|
|
771
|
+
options: {
|
|
772
|
+
minValue: 0
|
|
773
|
+
},
|
|
774
|
+
get (value) {
|
|
775
|
+
value.num[0] = this.motorStiffness;
|
|
776
|
+
},
|
|
777
|
+
set (value) {
|
|
778
|
+
this.motorStiffness = value.num[0];
|
|
779
|
+
},
|
|
780
|
+
isHidden () {
|
|
781
|
+
return this.type !== 'hinge' && this.type !== 'slider' || this.motorMode !== 'position';
|
|
782
|
+
}
|
|
783
|
+
},
|
|
784
|
+
{
|
|
785
|
+
name: 'MotorDamping',
|
|
786
|
+
description: 'How smoothly a motor settles; for a speed motor, how quickly it gets up to speed',
|
|
787
|
+
type: 'float',
|
|
788
|
+
default: 100,
|
|
789
|
+
options: {
|
|
790
|
+
minValue: 0
|
|
791
|
+
},
|
|
792
|
+
get (value) {
|
|
793
|
+
value.num[0] = this.motorDamping;
|
|
794
|
+
},
|
|
795
|
+
set (value) {
|
|
796
|
+
this.motorDamping = value.num[0];
|
|
797
|
+
},
|
|
798
|
+
isHidden () {
|
|
799
|
+
return this.type !== 'hinge' && this.type !== 'slider' || this.motorMode === 'off';
|
|
800
|
+
}
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
name: 'MotorMaxForce',
|
|
804
|
+
description: 'Strongest push the motor can give; 0 for no limit',
|
|
805
|
+
type: 'float',
|
|
806
|
+
default: 0,
|
|
807
|
+
options: {
|
|
808
|
+
minValue: 0
|
|
809
|
+
},
|
|
810
|
+
get (value) {
|
|
811
|
+
value.num[0] = this.motorMaxForce;
|
|
812
|
+
},
|
|
813
|
+
set (value) {
|
|
814
|
+
this.motorMaxForce = value.num[0];
|
|
815
|
+
},
|
|
816
|
+
isHidden () {
|
|
817
|
+
return this.type !== 'hinge' && this.type !== 'slider' || this.motorMode === 'off';
|
|
818
|
+
}
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
name: 'Length',
|
|
822
|
+
description: 'Longest a rope gets, or the length a spring settles at, in metres',
|
|
823
|
+
type: 'float',
|
|
824
|
+
default: 1,
|
|
825
|
+
options: {
|
|
826
|
+
minValue: 0
|
|
827
|
+
},
|
|
828
|
+
get (value) {
|
|
829
|
+
value.num[0] = this.length;
|
|
830
|
+
},
|
|
831
|
+
set (value) {
|
|
832
|
+
this.length = value.num[0];
|
|
833
|
+
},
|
|
834
|
+
isHidden () {
|
|
835
|
+
return this.type !== 'rope' && this.type !== 'spring';
|
|
836
|
+
}
|
|
837
|
+
},
|
|
838
|
+
{
|
|
839
|
+
name: 'Stiffness',
|
|
840
|
+
description: 'How hard the spring pulls back when stretched',
|
|
841
|
+
type: 'float',
|
|
842
|
+
default: 100,
|
|
843
|
+
options: {
|
|
844
|
+
minValue: 0
|
|
845
|
+
},
|
|
846
|
+
get (value) {
|
|
847
|
+
value.num[0] = this.stiffness;
|
|
848
|
+
},
|
|
849
|
+
set (value) {
|
|
850
|
+
this.stiffness = value.num[0];
|
|
851
|
+
},
|
|
852
|
+
isHidden () {
|
|
853
|
+
return this.type !== 'spring';
|
|
854
|
+
}
|
|
855
|
+
},
|
|
856
|
+
{
|
|
857
|
+
name: 'Damping',
|
|
858
|
+
description: 'How quickly the spring stops bouncing',
|
|
859
|
+
type: 'float',
|
|
860
|
+
default: 5,
|
|
861
|
+
options: {
|
|
862
|
+
minValue: 0
|
|
863
|
+
},
|
|
864
|
+
get (value) {
|
|
865
|
+
value.num[0] = this.damping;
|
|
866
|
+
},
|
|
867
|
+
set (value) {
|
|
868
|
+
this.damping = value.num[0];
|
|
869
|
+
},
|
|
870
|
+
isHidden () {
|
|
871
|
+
return this.type !== 'spring';
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
]);
|
|
875
|
+
}
|
|
876
|
+
};
|
|
877
|
+
}
|
|
878
|
+
/** @internal */ function getCharacterControllerClass() {
|
|
879
|
+
return {
|
|
880
|
+
ctor: CharacterController,
|
|
881
|
+
name: 'CharacterController',
|
|
882
|
+
getProps () {
|
|
883
|
+
return defineProps([
|
|
884
|
+
{
|
|
885
|
+
name: 'Height',
|
|
886
|
+
description: 'Height of the character, from its feet at this node',
|
|
887
|
+
type: 'float',
|
|
888
|
+
default: 1.8,
|
|
889
|
+
options: {
|
|
890
|
+
minValue: 0
|
|
891
|
+
},
|
|
892
|
+
get (value) {
|
|
893
|
+
value.num[0] = this.height;
|
|
894
|
+
},
|
|
895
|
+
set (value) {
|
|
896
|
+
this.height = value.num[0];
|
|
897
|
+
}
|
|
898
|
+
},
|
|
899
|
+
{
|
|
900
|
+
name: 'Radius',
|
|
901
|
+
description: 'How wide the character is: radius of its body',
|
|
902
|
+
type: 'float',
|
|
903
|
+
default: 0.3,
|
|
904
|
+
options: {
|
|
905
|
+
minValue: 0
|
|
906
|
+
},
|
|
907
|
+
get (value) {
|
|
908
|
+
value.num[0] = this.radius;
|
|
909
|
+
},
|
|
910
|
+
set (value) {
|
|
911
|
+
this.radius = value.num[0];
|
|
912
|
+
}
|
|
913
|
+
},
|
|
914
|
+
{
|
|
915
|
+
name: 'SkinWidth',
|
|
916
|
+
description: 'Small gap kept around the character; too small and it snags in corners, too large and it floats',
|
|
917
|
+
type: 'float',
|
|
918
|
+
default: 0.02,
|
|
919
|
+
options: {
|
|
920
|
+
minValue: 0,
|
|
921
|
+
maxValue: 0.5
|
|
922
|
+
},
|
|
923
|
+
get (value) {
|
|
924
|
+
value.num[0] = this.skinWidth;
|
|
925
|
+
},
|
|
926
|
+
set (value) {
|
|
927
|
+
this.skinWidth = value.num[0];
|
|
928
|
+
}
|
|
929
|
+
},
|
|
930
|
+
{
|
|
931
|
+
name: 'SlopeLimit',
|
|
932
|
+
description: 'Steepest slope it can walk up, in degrees',
|
|
933
|
+
type: 'float',
|
|
934
|
+
default: 45,
|
|
935
|
+
options: {
|
|
936
|
+
minValue: 0,
|
|
937
|
+
maxValue: 90
|
|
938
|
+
},
|
|
939
|
+
get (value) {
|
|
940
|
+
value.num[0] = this.slopeLimit;
|
|
941
|
+
},
|
|
942
|
+
set (value) {
|
|
943
|
+
this.slopeLimit = value.num[0];
|
|
944
|
+
}
|
|
945
|
+
},
|
|
946
|
+
{
|
|
947
|
+
name: 'SlideSlope',
|
|
948
|
+
description: 'Slopes steeper than this, in degrees, make it slide down',
|
|
949
|
+
type: 'float',
|
|
950
|
+
default: 30,
|
|
951
|
+
options: {
|
|
952
|
+
minValue: 0,
|
|
953
|
+
maxValue: 90
|
|
954
|
+
},
|
|
955
|
+
get (value) {
|
|
956
|
+
value.num[0] = this.slideSlope;
|
|
957
|
+
},
|
|
958
|
+
set (value) {
|
|
959
|
+
this.slideSlope = value.num[0];
|
|
960
|
+
}
|
|
961
|
+
},
|
|
962
|
+
{
|
|
963
|
+
name: 'StepHeight',
|
|
964
|
+
description: 'Highest step it walks up without jumping; 0 to never step up',
|
|
965
|
+
type: 'float',
|
|
966
|
+
default: 0.3,
|
|
967
|
+
options: {
|
|
968
|
+
minValue: 0
|
|
969
|
+
},
|
|
970
|
+
get (value) {
|
|
971
|
+
value.num[0] = this.stepHeight;
|
|
972
|
+
},
|
|
973
|
+
set (value) {
|
|
974
|
+
this.stepHeight = value.num[0];
|
|
975
|
+
}
|
|
976
|
+
},
|
|
977
|
+
{
|
|
978
|
+
name: 'StepMinWidth',
|
|
979
|
+
description: 'Narrowest ledge it will step onto',
|
|
980
|
+
type: 'float',
|
|
981
|
+
default: 0.2,
|
|
982
|
+
options: {
|
|
983
|
+
minValue: 0
|
|
984
|
+
},
|
|
985
|
+
get (value) {
|
|
986
|
+
value.num[0] = this.stepMinWidth;
|
|
987
|
+
},
|
|
988
|
+
set (value) {
|
|
989
|
+
this.stepMinWidth = value.num[0];
|
|
990
|
+
}
|
|
991
|
+
},
|
|
992
|
+
{
|
|
993
|
+
name: 'SnapToGround',
|
|
994
|
+
description: 'Keeps it on the ground walking down slopes and steps, up to this drop; 0 to let it leave the ground',
|
|
995
|
+
type: 'float',
|
|
996
|
+
default: 0.2,
|
|
997
|
+
options: {
|
|
998
|
+
minValue: 0
|
|
999
|
+
},
|
|
1000
|
+
get (value) {
|
|
1001
|
+
value.num[0] = this.snapToGround;
|
|
1002
|
+
},
|
|
1003
|
+
set (value) {
|
|
1004
|
+
this.snapToGround = value.num[0];
|
|
1005
|
+
}
|
|
1006
|
+
},
|
|
1007
|
+
{
|
|
1008
|
+
name: 'PushBodies',
|
|
1009
|
+
description: 'Lets the character shove loose objects it walks into',
|
|
1010
|
+
type: 'bool',
|
|
1011
|
+
default: true,
|
|
1012
|
+
get (value) {
|
|
1013
|
+
value.bool[0] = this.pushBodies;
|
|
1014
|
+
},
|
|
1015
|
+
set (value) {
|
|
1016
|
+
this.pushBodies = value.bool[0];
|
|
1017
|
+
}
|
|
1018
|
+
},
|
|
1019
|
+
{
|
|
1020
|
+
name: 'CharacterMass',
|
|
1021
|
+
description: 'How heavy the character is when shoving objects, in kilograms',
|
|
1022
|
+
type: 'float',
|
|
1023
|
+
default: 70,
|
|
1024
|
+
options: {
|
|
1025
|
+
minValue: 0
|
|
1026
|
+
},
|
|
1027
|
+
get (value) {
|
|
1028
|
+
value.num[0] = this.characterMass;
|
|
1029
|
+
},
|
|
1030
|
+
set (value) {
|
|
1031
|
+
this.characterMass = value.num[0];
|
|
1032
|
+
}
|
|
1033
|
+
},
|
|
1034
|
+
{
|
|
1035
|
+
name: 'Layer',
|
|
1036
|
+
description: 'Collision layer 0-15 of the character',
|
|
1037
|
+
type: 'int',
|
|
1038
|
+
default: 0,
|
|
1039
|
+
options: {
|
|
1040
|
+
minValue: 0,
|
|
1041
|
+
maxValue: 15
|
|
1042
|
+
},
|
|
1043
|
+
get (value) {
|
|
1044
|
+
value.num[0] = this.layer;
|
|
1045
|
+
},
|
|
1046
|
+
set (value) {
|
|
1047
|
+
this.layer = value.num[0];
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
]);
|
|
1051
|
+
}
|
|
1052
|
+
};
|
|
1053
|
+
}
|
|
1054
|
+
/** A number property backed by a same-named accessor. */ function numberProp(name, key, description, defaultValue, options = {}, type = 'float') {
|
|
1055
|
+
return {
|
|
1056
|
+
name,
|
|
1057
|
+
description,
|
|
1058
|
+
type,
|
|
1059
|
+
default: defaultValue,
|
|
1060
|
+
options,
|
|
1061
|
+
get (value) {
|
|
1062
|
+
value.num[0] = this[key];
|
|
1063
|
+
},
|
|
1064
|
+
set (value) {
|
|
1065
|
+
this[key] = value.num[0];
|
|
1066
|
+
}
|
|
1067
|
+
};
|
|
1068
|
+
}
|
|
1069
|
+
/** @internal */ function getVehicleClass() {
|
|
1070
|
+
return {
|
|
1071
|
+
ctor: Vehicle,
|
|
1072
|
+
name: 'Vehicle',
|
|
1073
|
+
getProps () {
|
|
1074
|
+
return defineProps([
|
|
1075
|
+
{
|
|
1076
|
+
name: 'Forward',
|
|
1077
|
+
description: 'Which way the front of the vehicle points in this node; wheels roll and steer accordingly',
|
|
1078
|
+
type: 'string',
|
|
1079
|
+
default: '+z',
|
|
1080
|
+
options: {
|
|
1081
|
+
enum: {
|
|
1082
|
+
labels: [
|
|
1083
|
+
'+Z',
|
|
1084
|
+
'-Z',
|
|
1085
|
+
'+X',
|
|
1086
|
+
'-X'
|
|
1087
|
+
],
|
|
1088
|
+
values: [
|
|
1089
|
+
'+z',
|
|
1090
|
+
'-z',
|
|
1091
|
+
'+x',
|
|
1092
|
+
'-x'
|
|
1093
|
+
]
|
|
1094
|
+
}
|
|
1095
|
+
},
|
|
1096
|
+
get (value) {
|
|
1097
|
+
value.str[0] = this.forward;
|
|
1098
|
+
},
|
|
1099
|
+
set (value) {
|
|
1100
|
+
this.forward = value.str[0];
|
|
1101
|
+
}
|
|
1102
|
+
},
|
|
1103
|
+
numberProp('MaxEngineForce', 'maxEngineForce', "Push at full throttle in newtons; higher accelerates harder. Shared out by the wheels' Drive", 4000, {
|
|
1104
|
+
minValue: 0
|
|
1105
|
+
}),
|
|
1106
|
+
numberProp('MaxBrakeForce', 'maxBrakeForce', 'Braking force of each wheel at full brake, in newtons; higher stops sooner, too high locks the wheels', 3000, {
|
|
1107
|
+
minValue: 0
|
|
1108
|
+
}),
|
|
1109
|
+
numberProp('MaxHandbrakeForce', 'maxHandbrakeForce', 'Braking force of each wheel with the handbrake on, in newtons', 6000, {
|
|
1110
|
+
minValue: 0
|
|
1111
|
+
}),
|
|
1112
|
+
numberProp('MaxSteerAngle', 'maxSteerAngle', 'How far the wheels turn at full lock, in degrees; larger turns tighter', 30, {
|
|
1113
|
+
minValue: 0,
|
|
1114
|
+
maxValue: 89
|
|
1115
|
+
}),
|
|
1116
|
+
numberProp('Layer', 'layer', 'Collision layer of the wheels: they only find ground on layers this one collides with', 0, {
|
|
1117
|
+
minValue: 0,
|
|
1118
|
+
maxValue: 15
|
|
1119
|
+
}, 'int')
|
|
1120
|
+
]);
|
|
1121
|
+
}
|
|
1122
|
+
};
|
|
1123
|
+
}
|
|
1124
|
+
/** @internal */ function getWheelClass() {
|
|
1125
|
+
return {
|
|
1126
|
+
ctor: Wheel,
|
|
1127
|
+
name: 'Wheel',
|
|
1128
|
+
getProps () {
|
|
1129
|
+
return defineProps([
|
|
1130
|
+
numberProp('Radius', 'radius', 'Radius of the wheel in metres', 0.4, {
|
|
1131
|
+
minValue: 0.01
|
|
1132
|
+
}),
|
|
1133
|
+
numberProp('SuspensionRestLength', 'suspensionRestLength', 'Length of the suspension at rest, in metres; the wheel is placed at its end', 0.3, {
|
|
1134
|
+
minValue: 0
|
|
1135
|
+
}),
|
|
1136
|
+
numberProp('SuspensionStiffness', 'suspensionStiffness', 'Spring strength, per kilogram of vehicle; higher is firmer and sinks less under its weight', 30, {
|
|
1137
|
+
minValue: 0
|
|
1138
|
+
}),
|
|
1139
|
+
numberProp('SuspensionCompression', 'suspensionCompression', 'Damping as the suspension compresses; higher absorbs bumps more stiffly', 2.2, {
|
|
1140
|
+
minValue: 0
|
|
1141
|
+
}),
|
|
1142
|
+
numberProp('SuspensionRelaxation', 'suspensionRelaxation', 'Damping as the suspension extends again; higher stops the body bouncing sooner', 3.3, {
|
|
1143
|
+
minValue: 0
|
|
1144
|
+
}),
|
|
1145
|
+
numberProp('MaxSuspensionTravel', 'maxSuspensionTravel', 'How far the wheel moves up or down from rest, in metres', 0.3, {
|
|
1146
|
+
minValue: 0
|
|
1147
|
+
}),
|
|
1148
|
+
numberProp('MaxSuspensionForce', 'maxSuspensionForce', 'Strongest push of the suspension in newtons; too low and a heavy vehicle sags to the ground', 1e6, {
|
|
1149
|
+
minValue: 0
|
|
1150
|
+
}),
|
|
1151
|
+
numberProp('FrictionSlip', 'frictionSlip', 'Grip of the tyre, like a friction coefficient; lower makes it spin and slide more easily', 1.5, {
|
|
1152
|
+
minValue: 0
|
|
1153
|
+
}),
|
|
1154
|
+
numberProp('SideFriction', 'sideFriction', 'Scales the sideways grip; below 1 the vehicle drifts out in corners', 1, {
|
|
1155
|
+
minValue: 0
|
|
1156
|
+
}),
|
|
1157
|
+
numberProp('Steer', 'steer', 'How much this wheel follows the steering: 1 for front wheels, -1 to steer against it, 0 fixed', 0, {
|
|
1158
|
+
minValue: -1,
|
|
1159
|
+
maxValue: 1
|
|
1160
|
+
}),
|
|
1161
|
+
numberProp('Drive', 'drive', 'Share of the engine force this wheel gets, e.g. 0.5 on each rear wheel for rear wheel drive', 0, {
|
|
1162
|
+
minValue: 0,
|
|
1163
|
+
maxValue: 1
|
|
1164
|
+
}),
|
|
1165
|
+
numberProp('Brake', 'brake', 'How much the brake pedal brakes this wheel', 1, {
|
|
1166
|
+
minValue: 0,
|
|
1167
|
+
maxValue: 1
|
|
1168
|
+
}),
|
|
1169
|
+
numberProp('Handbrake', 'handbrake', 'How much the handbrake brakes this wheel, usually 1 on rear wheels', 0, {
|
|
1170
|
+
minValue: 0,
|
|
1171
|
+
maxValue: 1
|
|
1172
|
+
})
|
|
1173
|
+
]);
|
|
1174
|
+
}
|
|
1175
|
+
};
|
|
1176
|
+
}
|
|
1177
|
+
/** @internal */ function getNodePhysicsClass() {
|
|
1178
|
+
return {
|
|
1179
|
+
ctor: NodePhysics,
|
|
1180
|
+
name: 'NodePhysics',
|
|
1181
|
+
getProps () {
|
|
1182
|
+
return defineProps([
|
|
1183
|
+
{
|
|
1184
|
+
name: 'Body',
|
|
1185
|
+
description: 'Makes the object move physically: a rigid body that falls and collides, or a character controller that walks',
|
|
1186
|
+
type: 'object',
|
|
1187
|
+
default: null,
|
|
1188
|
+
options: {
|
|
1189
|
+
objectTypes: [
|
|
1190
|
+
RigidBody,
|
|
1191
|
+
CharacterController
|
|
1192
|
+
]
|
|
1193
|
+
},
|
|
1194
|
+
isNullable () {
|
|
1195
|
+
return true;
|
|
1196
|
+
},
|
|
1197
|
+
// One saved property for both slots, told apart by class name.
|
|
1198
|
+
get (value) {
|
|
1199
|
+
value.object[0] = this.body ?? this.character;
|
|
1200
|
+
},
|
|
1201
|
+
set (value) {
|
|
1202
|
+
const body = value?.object[0];
|
|
1203
|
+
if (body instanceof CharacterController) {
|
|
1204
|
+
this.character = body;
|
|
1205
|
+
} else {
|
|
1206
|
+
this.body = body instanceof RigidBody ? body : null;
|
|
1207
|
+
this.character = null;
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
},
|
|
1211
|
+
{
|
|
1212
|
+
name: 'Colliders',
|
|
1213
|
+
description: 'Shapes the object collides with; without a rigid body above them they never move',
|
|
1214
|
+
type: 'object_array',
|
|
1215
|
+
readonly: true,
|
|
1216
|
+
options: {
|
|
1217
|
+
objectTypes: [
|
|
1218
|
+
Collider
|
|
1219
|
+
]
|
|
1220
|
+
},
|
|
1221
|
+
getDefaultValue () {
|
|
1222
|
+
return this.colliders;
|
|
1223
|
+
},
|
|
1224
|
+
get (value) {
|
|
1225
|
+
value.object = [
|
|
1226
|
+
...this.colliders
|
|
1227
|
+
];
|
|
1228
|
+
},
|
|
1229
|
+
set (value) {
|
|
1230
|
+
this.colliders = (value.object ?? []).filter((c)=>c instanceof Collider);
|
|
1231
|
+
},
|
|
1232
|
+
add (value, index) {
|
|
1233
|
+
const collider = value.object?.[0];
|
|
1234
|
+
if (collider instanceof Collider) {
|
|
1235
|
+
const colliders = [
|
|
1236
|
+
...this.colliders
|
|
1237
|
+
];
|
|
1238
|
+
colliders.splice(index ?? colliders.length, 0, collider);
|
|
1239
|
+
this.colliders = colliders;
|
|
1240
|
+
}
|
|
1241
|
+
},
|
|
1242
|
+
delete (index) {
|
|
1243
|
+
const collider = this.colliders[index];
|
|
1244
|
+
if (collider) {
|
|
1245
|
+
this.removeCollider(collider);
|
|
1246
|
+
}
|
|
1247
|
+
}
|
|
1248
|
+
},
|
|
1249
|
+
{
|
|
1250
|
+
name: 'Joint',
|
|
1251
|
+
description: 'Links this object to another one, or to a point in the world, like a hinge or a rope',
|
|
1252
|
+
type: 'object',
|
|
1253
|
+
default: null,
|
|
1254
|
+
options: {
|
|
1255
|
+
objectTypes: [
|
|
1256
|
+
Joint
|
|
1257
|
+
]
|
|
1258
|
+
},
|
|
1259
|
+
isNullable () {
|
|
1260
|
+
return true;
|
|
1261
|
+
},
|
|
1262
|
+
get (value) {
|
|
1263
|
+
value.object[0] = this.joint;
|
|
1264
|
+
},
|
|
1265
|
+
set (value) {
|
|
1266
|
+
const joint = value?.object[0];
|
|
1267
|
+
this.joint = joint instanceof Joint ? joint : null;
|
|
1268
|
+
}
|
|
1269
|
+
},
|
|
1270
|
+
{
|
|
1271
|
+
name: 'Vehicle',
|
|
1272
|
+
description: 'Drives the object as a wheeled vehicle; needs a dynamic rigid body and wheels below it',
|
|
1273
|
+
type: 'object',
|
|
1274
|
+
default: null,
|
|
1275
|
+
options: {
|
|
1276
|
+
objectTypes: [
|
|
1277
|
+
Vehicle
|
|
1278
|
+
]
|
|
1279
|
+
},
|
|
1280
|
+
isNullable () {
|
|
1281
|
+
return true;
|
|
1282
|
+
},
|
|
1283
|
+
get (value) {
|
|
1284
|
+
value.object[0] = this.vehicle;
|
|
1285
|
+
},
|
|
1286
|
+
set (value) {
|
|
1287
|
+
const vehicle = value?.object[0];
|
|
1288
|
+
this.vehicle = vehicle instanceof Vehicle ? vehicle : null;
|
|
1289
|
+
}
|
|
1290
|
+
},
|
|
1291
|
+
{
|
|
1292
|
+
name: 'Wheel',
|
|
1293
|
+
description: 'Makes the object a wheel of the vehicle above it',
|
|
1294
|
+
type: 'object',
|
|
1295
|
+
default: null,
|
|
1296
|
+
options: {
|
|
1297
|
+
objectTypes: [
|
|
1298
|
+
Wheel
|
|
1299
|
+
]
|
|
1300
|
+
},
|
|
1301
|
+
isNullable () {
|
|
1302
|
+
return true;
|
|
1303
|
+
},
|
|
1304
|
+
get (value) {
|
|
1305
|
+
value.object[0] = this.wheel;
|
|
1306
|
+
},
|
|
1307
|
+
set (value) {
|
|
1308
|
+
const wheel = value?.object[0];
|
|
1309
|
+
this.wheel = wheel instanceof Wheel ? wheel : null;
|
|
1310
|
+
}
|
|
1311
|
+
}
|
|
1312
|
+
]);
|
|
1313
|
+
}
|
|
1314
|
+
};
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
export { getCharacterControllerClass, getColliderClass, getJointClass, getNodePhysicsClass, getRigidBodyClass, getVehicleClass, getWheelClass };
|
|
1318
|
+
//# sourceMappingURL=node_physics.js.map
|