@zephyr3d/scene 0.9.27 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +54 -0
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +279 -55
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +171 -1
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +104 -178
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +25436 -15990
  109. package/dist/index.js +65 -11
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -0,0 +1,379 @@
1
+ import { Vector3, Quaternion } from '@zephyr3d/base';
2
+ import { PhysicsPart } from './part.js';
3
+
4
+ const zero = Vector3.zero();
5
+ const tmpForce = new Vector3();
6
+ const tmpTorque = new Vector3();
7
+ /**
8
+ * Makes its node a rigid body: moved by the simulation, by its node, or not at
9
+ * all, depending on {@link RigidBody.motionType}.
10
+ *
11
+ * @remarks
12
+ * The body's shape comes from the colliders ({@link NodePhysics.colliders}) of
13
+ * the same node and of descendant nodes that have no rigid body of their own; together they
14
+ * form one compound body. A body with no collider does not collide.
15
+ *
16
+ * The body turns about its node's origin, and the node's scale only affects the
17
+ * colliders' sizes, not the body.
18
+ *
19
+ * Collision and trigger events of all its colliders are raised on the body; see
20
+ * {@link PhysicsEventMap}.
21
+ *
22
+ * @public
23
+ */ class RigidBody extends PhysicsPart {
24
+ _motionType;
25
+ _mass;
26
+ _linearDamping;
27
+ _angularDamping;
28
+ _gravityScale;
29
+ _ccd;
30
+ _canSleep;
31
+ _lockTranslation;
32
+ _lockRotation;
33
+ /** Applied during every step of the frame, from outside the fixed update. */ _force;
34
+ _torque;
35
+ /** Applied during the current step only, from the fixed update. */ _stepForce;
36
+ _stepTorque;
37
+ _impulse;
38
+ _torqueImpulse;
39
+ /** Whether the backend body currently has a non-zero force set. */ _forceSet;
40
+ _pendingLinearVelocity;
41
+ _pendingAngularVelocity;
42
+ _initialLinearVelocity;
43
+ _initialAngularVelocity;
44
+ /** Whether the initial velocities were given to the body since it joined its world. */ _initialApplied;
45
+ constructor(){
46
+ super();
47
+ this._motionType = 'dynamic';
48
+ this._mass = 1;
49
+ this._linearDamping = 0;
50
+ this._angularDamping = 0.05;
51
+ this._gravityScale = 1;
52
+ this._ccd = false;
53
+ this._canSleep = true;
54
+ this._lockTranslation = [
55
+ false,
56
+ false,
57
+ false
58
+ ];
59
+ this._lockRotation = [
60
+ false,
61
+ false,
62
+ false
63
+ ];
64
+ this._force = new Vector3();
65
+ this._torque = new Vector3();
66
+ this._stepForce = new Vector3();
67
+ this._stepTorque = new Vector3();
68
+ this._impulse = new Vector3();
69
+ this._torqueImpulse = new Vector3();
70
+ this._forceSet = false;
71
+ this._pendingLinearVelocity = null;
72
+ this._pendingAngularVelocity = null;
73
+ this._initialLinearVelocity = new Vector3();
74
+ this._initialAngularVelocity = new Vector3();
75
+ this._initialApplied = false;
76
+ }
77
+ /** How the body moves. Default `'dynamic'`. */ get motionType() {
78
+ return this._motionType;
79
+ }
80
+ set motionType(value) {
81
+ if (value !== this._motionType) {
82
+ this._motionType = value;
83
+ this.world?._markBodyDirty(this);
84
+ }
85
+ }
86
+ /** Mass in kilograms, for dynamic bodies. Default 1. */ get mass() {
87
+ return this._mass;
88
+ }
89
+ set mass(value) {
90
+ this._mass = Math.max(1e-6, value);
91
+ this._backend()?.setMass(this._mass);
92
+ }
93
+ /** How quickly linear motion dies down without contact, per second. Default 0. */ get linearDamping() {
94
+ return this._linearDamping;
95
+ }
96
+ set linearDamping(value) {
97
+ this._linearDamping = Math.max(0, value);
98
+ this._backend()?.setDamping(this._linearDamping, this._angularDamping);
99
+ }
100
+ /** How quickly spinning dies down, per second. Default 0.05. */ get angularDamping() {
101
+ return this._angularDamping;
102
+ }
103
+ set angularDamping(value) {
104
+ this._angularDamping = Math.max(0, value);
105
+ this._backend()?.setDamping(this._linearDamping, this._angularDamping);
106
+ }
107
+ /** Multiplier on the world's gravity for this body. Default 1. */ get gravityScale() {
108
+ return this._gravityScale;
109
+ }
110
+ set gravityScale(value) {
111
+ this._gravityScale = value;
112
+ this._backend()?.setGravityScale(value);
113
+ }
114
+ /**
115
+ * Continuous collision detection: keeps fast, small bodies from passing
116
+ * through thin colliders between two steps, at some cost. Default false.
117
+ */ get ccd() {
118
+ return this._ccd;
119
+ }
120
+ set ccd(value) {
121
+ this._ccd = !!value;
122
+ this._backend()?.setCcd(this._ccd);
123
+ }
124
+ /** Whether the body may stop being simulated once it comes to rest. Default true. */ get canSleep() {
125
+ return this._canSleep;
126
+ }
127
+ set canSleep(value) {
128
+ if (!!value !== this._canSleep) {
129
+ this._canSleep = !!value;
130
+ this.world?._markBodyDirty(this);
131
+ }
132
+ }
133
+ /** Keeps the body from moving along the world X axis. Default false. */ get lockTranslationX() {
134
+ return this._lockTranslation[0];
135
+ }
136
+ set lockTranslationX(value) {
137
+ this._setLock(this._lockTranslation, 0, value);
138
+ }
139
+ /** Keeps the body from moving along the world Y axis. Default false. */ get lockTranslationY() {
140
+ return this._lockTranslation[1];
141
+ }
142
+ set lockTranslationY(value) {
143
+ this._setLock(this._lockTranslation, 1, value);
144
+ }
145
+ /** Keeps the body from moving along the world Z axis. Default false. */ get lockTranslationZ() {
146
+ return this._lockTranslation[2];
147
+ }
148
+ set lockTranslationZ(value) {
149
+ this._setLock(this._lockTranslation, 2, value);
150
+ }
151
+ /** Keeps the body from turning about the world X axis. Default false. */ get lockRotationX() {
152
+ return this._lockRotation[0];
153
+ }
154
+ set lockRotationX(value) {
155
+ this._setLock(this._lockRotation, 0, value);
156
+ }
157
+ /** Keeps the body from turning about the world Y axis. Default false. */ get lockRotationY() {
158
+ return this._lockRotation[1];
159
+ }
160
+ set lockRotationY(value) {
161
+ this._setLock(this._lockRotation, 1, value);
162
+ }
163
+ /** Keeps the body from turning about the world Z axis. Default false. */ get lockRotationZ() {
164
+ return this._lockRotation[2];
165
+ }
166
+ set lockRotationZ(value) {
167
+ this._setLock(this._lockRotation, 2, value);
168
+ }
169
+ /**
170
+ * Velocity in m/s, world space, a dynamic body starts with when its node
171
+ * enters a simulated scene. Rebuilding the body later (changing its settings)
172
+ * does not apply it again; leaving and re-entering the scene does. A velocity
173
+ * set from a script before the body starts wins. Default (0, 0, 0).
174
+ */ get initialLinearVelocity() {
175
+ return this._initialLinearVelocity;
176
+ }
177
+ set initialLinearVelocity(value) {
178
+ this._initialLinearVelocity.set(value);
179
+ }
180
+ /**
181
+ * Spin in rad/s a dynamic body starts with, as an axis scaled by speed in
182
+ * world space; see {@link RigidBody.initialLinearVelocity}. Default (0, 0, 0).
183
+ */ get initialAngularVelocity() {
184
+ return this._initialAngularVelocity;
185
+ }
186
+ set initialAngularVelocity(value) {
187
+ this._initialAngularVelocity.set(value);
188
+ }
189
+ /**
190
+ * World position of the body's origin after the latest simulation step.
191
+ *
192
+ * @remarks
193
+ * The node shows the body interpolated between the last two steps, and does
194
+ * not move between the steps of one frame. Forces that depend on where the
195
+ * body is (buoyancy, springs) should read this in a fixed update instead.
196
+ * Before the body is simulated, the node's world position.
197
+ */ getSimulatedPosition(out = new Vector3()) {
198
+ const body = this._backend();
199
+ if (body) {
200
+ return body.getPosition(out);
201
+ }
202
+ return this.node ? this.node.getWorldPosition(out) : out.setXYZ(0, 0, 0);
203
+ }
204
+ /**
205
+ * World orientation of the body after the latest simulation step; see
206
+ * {@link RigidBody.getSimulatedPosition}.
207
+ */ getSimulatedRotation(out = new Quaternion()) {
208
+ const body = this._backend();
209
+ if (body) {
210
+ return body.getRotation(out);
211
+ }
212
+ if (this.node) {
213
+ this.node.worldMatrix.decompose(null, out, null);
214
+ return out;
215
+ }
216
+ return out.identity();
217
+ }
218
+ /** Linear velocity in m/s. Returns zero before the body exists in a simulation. */ getLinearVelocity(out = new Vector3()) {
219
+ const body = this._backend();
220
+ if (body) {
221
+ return body.getLinearVelocity(out);
222
+ }
223
+ out.set(this._pendingLinearVelocity ?? zero);
224
+ return out;
225
+ }
226
+ /** Sets the linear velocity; components along locked axes are ignored. */ setLinearVelocity(value) {
227
+ const v = this._mask(value, this._lockTranslation);
228
+ const body = this._backend();
229
+ if (body) {
230
+ body.setLinearVelocity(v);
231
+ } else {
232
+ this._pendingLinearVelocity = v;
233
+ }
234
+ }
235
+ /** Angular velocity in rad/s, as an axis scaled by speed. */ getAngularVelocity(out = new Vector3()) {
236
+ const body = this._backend();
237
+ if (body) {
238
+ return body.getAngularVelocity(out);
239
+ }
240
+ out.set(this._pendingAngularVelocity ?? zero);
241
+ return out;
242
+ }
243
+ /** Sets the angular velocity; components about locked axes are ignored. */ setAngularVelocity(value) {
244
+ const v = this._mask(value, this._lockRotation);
245
+ const body = this._backend();
246
+ if (body) {
247
+ body.setAngularVelocity(v);
248
+ } else {
249
+ this._pendingAngularVelocity = v;
250
+ }
251
+ }
252
+ /**
253
+ * Adds a force (newtons, world space) acting on the centre of mass.
254
+ *
255
+ * @remarks
256
+ * Called during a fixed update (`RuntimeScript.onFixedUpdate` or the world's
257
+ * `fixedupdate` event), the force acts on that one simulation step; called at
258
+ * any other time, it acts on every step of the next frame. Forces add up and
259
+ * are cleared after use.
260
+ */ applyForce(force) {
261
+ (this.world?._inFixedUpdate ? this._stepForce : this._force).addBy(force);
262
+ }
263
+ /** Adds a torque (N·m, world space); acts like {@link RigidBody.applyForce}. */ applyTorque(torque) {
264
+ (this.world?._inFixedUpdate ? this._stepTorque : this._torque).addBy(torque);
265
+ }
266
+ /** Adds an instantaneous change of momentum (N·s, world space), applied at the next step. */ applyImpulse(impulse) {
267
+ this._impulse.addBy(impulse);
268
+ }
269
+ /** Adds an instantaneous change of angular momentum, applied at the next step. */ applyTorqueImpulse(impulse) {
270
+ this._torqueImpulse.addBy(impulse);
271
+ }
272
+ /** Whether the body is resting and not being simulated. */ get isSleeping() {
273
+ return this._backend()?.isSleeping() ?? false;
274
+ }
275
+ /** Brings a resting body back into the simulation. */ wakeUp() {
276
+ this._backend()?.wakeUp();
277
+ }
278
+ _translationAxes() {
279
+ return [
280
+ !this._lockTranslation[0],
281
+ !this._lockTranslation[1],
282
+ !this._lockTranslation[2]
283
+ ];
284
+ }
285
+ _rotationAxes() {
286
+ return [
287
+ !this._lockRotation[0],
288
+ !this._lockRotation[1],
289
+ !this._lockRotation[2]
290
+ ];
291
+ }
292
+ _applyPendingVelocities(body) {
293
+ if (!this._initialApplied) {
294
+ this._initialApplied = true;
295
+ if (this._motionType === 'dynamic') {
296
+ if (!this._initialLinearVelocity.equalsTo(zero)) {
297
+ body.setLinearVelocity(this._mask(this._initialLinearVelocity, this._lockTranslation));
298
+ }
299
+ if (!this._initialAngularVelocity.equalsTo(zero)) {
300
+ body.setAngularVelocity(this._mask(this._initialAngularVelocity, this._lockRotation));
301
+ }
302
+ }
303
+ }
304
+ if (this._pendingLinearVelocity) {
305
+ body.setLinearVelocity(this._pendingLinearVelocity);
306
+ this._pendingLinearVelocity = null;
307
+ }
308
+ if (this._pendingAngularVelocity) {
309
+ body.setAngularVelocity(this._pendingAngularVelocity);
310
+ this._pendingAngularVelocity = null;
311
+ }
312
+ }
313
+ /** Hands the accumulated inputs to the body before a step. */ _applyStepInputs(body) {
314
+ if (this._motionType !== 'dynamic') {
315
+ this._stepForce.setXYZ(0, 0, 0);
316
+ this._stepTorque.setXYZ(0, 0, 0);
317
+ this._impulse.setXYZ(0, 0, 0);
318
+ this._torqueImpulse.setXYZ(0, 0, 0);
319
+ return;
320
+ }
321
+ const force = Vector3.add(this._force, this._stepForce, tmpForce);
322
+ const torque = Vector3.add(this._torque, this._stepTorque, tmpTorque);
323
+ const nonZero = !force.equalsTo(zero) || !torque.equalsTo(zero);
324
+ if (nonZero || this._forceSet) {
325
+ body.setForce(force, torque);
326
+ this._forceSet = nonZero;
327
+ }
328
+ this._stepForce.setXYZ(0, 0, 0);
329
+ this._stepTorque.setXYZ(0, 0, 0);
330
+ if (!this._impulse.equalsTo(zero) || !this._torqueImpulse.equalsTo(zero)) {
331
+ body.applyImpulse(this._impulse, this._torqueImpulse);
332
+ this._impulse.setXYZ(0, 0, 0);
333
+ this._torqueImpulse.setXYZ(0, 0, 0);
334
+ }
335
+ }
336
+ /** Clears the frame's forces once all its steps are taken. */ _clearForces(body) {
337
+ this._force.setXYZ(0, 0, 0);
338
+ this._torque.setXYZ(0, 0, 0);
339
+ if (this._forceSet) {
340
+ body.setForce(zero, zero);
341
+ this._forceSet = false;
342
+ }
343
+ }
344
+ _setLock(axes, index, value) {
345
+ if (axes[index] === !!value) {
346
+ return;
347
+ }
348
+ axes[index] = !!value;
349
+ const body = this._backend();
350
+ if (body) {
351
+ body.setEnabledAxes(this._translationAxes(), this._rotationAxes());
352
+ }
353
+ // Axis locks stop forces and contacts moving the body along an axis,
354
+ // not velocity it already has; drop that too, so a lock means "still".
355
+ if (value) {
356
+ if (axes === this._lockTranslation) {
357
+ this.setLinearVelocity(this.getLinearVelocity());
358
+ } else {
359
+ this.setAngularVelocity(this.getAngularVelocity());
360
+ }
361
+ }
362
+ }
363
+ _mask(value, locks) {
364
+ return new Vector3(locks[0] ? 0 : value.x, locks[1] ? 0 : value.y, locks[2] ? 0 : value.z);
365
+ }
366
+ _backend() {
367
+ return this.world?._getBodyHandle(this) ?? null;
368
+ }
369
+ _join(world) {
370
+ this._initialApplied = false;
371
+ world._registerBody(this);
372
+ }
373
+ _leave(world) {
374
+ world._unregisterBody(this);
375
+ }
376
+ }
377
+
378
+ export { RigidBody };
379
+ //# sourceMappingURL=rigid_body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rigid_body.js","sources":["../../src/physics/rigid_body.ts"],"sourcesContent":["import { Quaternion, Vector3 } from '@zephyr3d/base';\r\nimport type { MotionType } from './types';\r\nimport type { PhysicsBodyHandle } from './world';\r\nimport { PhysicsPart } from './part';\r\nimport type { PhysicsWorld } from './world';\r\n\r\nconst zero = Vector3.zero();\r\nconst tmpForce = new Vector3();\r\nconst tmpTorque = new Vector3();\r\n\r\ntype Axes = [boolean, boolean, boolean];\r\n\r\n/**\r\n * Makes its node a rigid body: moved by the simulation, by its node, or not at\r\n * all, depending on {@link RigidBody.motionType}.\r\n *\r\n * @remarks\r\n * The body's shape comes from the colliders ({@link NodePhysics.colliders}) of\r\n * the same node and of descendant nodes that have no rigid body of their own; together they\r\n * form one compound body. A body with no collider does not collide.\r\n *\r\n * The body turns about its node's origin, and the node's scale only affects the\r\n * colliders' sizes, not the body.\r\n *\r\n * Collision and trigger events of all its colliders are raised on the body; see\r\n * {@link PhysicsEventMap}.\r\n *\r\n * @public\r\n */\r\nexport class RigidBody extends PhysicsPart {\r\n private _motionType: MotionType;\r\n private _mass: number;\r\n private _linearDamping: number;\r\n private _angularDamping: number;\r\n private _gravityScale: number;\r\n private _ccd: boolean;\r\n private _canSleep: boolean;\r\n private readonly _lockTranslation: Axes;\r\n private readonly _lockRotation: Axes;\r\n /** Applied during every step of the frame, from outside the fixed update. */\r\n private readonly _force: Vector3;\r\n private readonly _torque: Vector3;\r\n /** Applied during the current step only, from the fixed update. */\r\n private readonly _stepForce: Vector3;\r\n private readonly _stepTorque: Vector3;\r\n private readonly _impulse: Vector3;\r\n private readonly _torqueImpulse: Vector3;\r\n /** Whether the backend body currently has a non-zero force set. */\r\n private _forceSet: boolean;\r\n private _pendingLinearVelocity: Vector3 | null;\r\n private _pendingAngularVelocity: Vector3 | null;\r\n private readonly _initialLinearVelocity: Vector3;\r\n private readonly _initialAngularVelocity: Vector3;\r\n /** Whether the initial velocities were given to the body since it joined its world. */\r\n private _initialApplied: boolean;\r\n\r\n constructor() {\r\n super();\r\n this._motionType = 'dynamic';\r\n this._mass = 1;\r\n this._linearDamping = 0;\r\n this._angularDamping = 0.05;\r\n this._gravityScale = 1;\r\n this._ccd = false;\r\n this._canSleep = true;\r\n this._lockTranslation = [false, false, false];\r\n this._lockRotation = [false, false, false];\r\n this._force = new Vector3();\r\n this._torque = new Vector3();\r\n this._stepForce = new Vector3();\r\n this._stepTorque = new Vector3();\r\n this._impulse = new Vector3();\r\n this._torqueImpulse = new Vector3();\r\n this._forceSet = false;\r\n this._pendingLinearVelocity = null;\r\n this._pendingAngularVelocity = null;\r\n this._initialLinearVelocity = new Vector3();\r\n this._initialAngularVelocity = new Vector3();\r\n this._initialApplied = false;\r\n }\r\n\r\n /** How the body moves. Default `'dynamic'`. */\r\n get motionType() {\r\n return this._motionType;\r\n }\r\n set motionType(value: MotionType) {\r\n if (value !== this._motionType) {\r\n this._motionType = value;\r\n this.world?._markBodyDirty(this);\r\n }\r\n }\r\n /** Mass in kilograms, for dynamic bodies. Default 1. */\r\n get mass() {\r\n return this._mass;\r\n }\r\n set mass(value: number) {\r\n this._mass = Math.max(1e-6, value);\r\n this._backend()?.setMass(this._mass);\r\n }\r\n /** How quickly linear motion dies down without contact, per second. Default 0. */\r\n get linearDamping() {\r\n return this._linearDamping;\r\n }\r\n set linearDamping(value: number) {\r\n this._linearDamping = Math.max(0, value);\r\n this._backend()?.setDamping(this._linearDamping, this._angularDamping);\r\n }\r\n /** How quickly spinning dies down, per second. Default 0.05. */\r\n get angularDamping() {\r\n return this._angularDamping;\r\n }\r\n set angularDamping(value: number) {\r\n this._angularDamping = Math.max(0, value);\r\n this._backend()?.setDamping(this._linearDamping, this._angularDamping);\r\n }\r\n /** Multiplier on the world's gravity for this body. Default 1. */\r\n get gravityScale() {\r\n return this._gravityScale;\r\n }\r\n set gravityScale(value: number) {\r\n this._gravityScale = value;\r\n this._backend()?.setGravityScale(value);\r\n }\r\n /**\r\n * Continuous collision detection: keeps fast, small bodies from passing\r\n * through thin colliders between two steps, at some cost. Default false.\r\n */\r\n get ccd() {\r\n return this._ccd;\r\n }\r\n set ccd(value: boolean) {\r\n this._ccd = !!value;\r\n this._backend()?.setCcd(this._ccd);\r\n }\r\n /** Whether the body may stop being simulated once it comes to rest. Default true. */\r\n get canSleep() {\r\n return this._canSleep;\r\n }\r\n set canSleep(value: boolean) {\r\n if (!!value !== this._canSleep) {\r\n this._canSleep = !!value;\r\n this.world?._markBodyDirty(this);\r\n }\r\n }\r\n /** Keeps the body from moving along the world X axis. Default false. */\r\n get lockTranslationX() {\r\n return this._lockTranslation[0];\r\n }\r\n set lockTranslationX(value: boolean) {\r\n this._setLock(this._lockTranslation, 0, value);\r\n }\r\n /** Keeps the body from moving along the world Y axis. Default false. */\r\n get lockTranslationY() {\r\n return this._lockTranslation[1];\r\n }\r\n set lockTranslationY(value: boolean) {\r\n this._setLock(this._lockTranslation, 1, value);\r\n }\r\n /** Keeps the body from moving along the world Z axis. Default false. */\r\n get lockTranslationZ() {\r\n return this._lockTranslation[2];\r\n }\r\n set lockTranslationZ(value: boolean) {\r\n this._setLock(this._lockTranslation, 2, value);\r\n }\r\n /** Keeps the body from turning about the world X axis. Default false. */\r\n get lockRotationX() {\r\n return this._lockRotation[0];\r\n }\r\n set lockRotationX(value: boolean) {\r\n this._setLock(this._lockRotation, 0, value);\r\n }\r\n /** Keeps the body from turning about the world Y axis. Default false. */\r\n get lockRotationY() {\r\n return this._lockRotation[1];\r\n }\r\n set lockRotationY(value: boolean) {\r\n this._setLock(this._lockRotation, 1, value);\r\n }\r\n /** Keeps the body from turning about the world Z axis. Default false. */\r\n get lockRotationZ() {\r\n return this._lockRotation[2];\r\n }\r\n set lockRotationZ(value: boolean) {\r\n this._setLock(this._lockRotation, 2, value);\r\n }\r\n\r\n /**\r\n * Velocity in m/s, world space, a dynamic body starts with when its node\r\n * enters a simulated scene. Rebuilding the body later (changing its settings)\r\n * does not apply it again; leaving and re-entering the scene does. A velocity\r\n * set from a script before the body starts wins. Default (0, 0, 0).\r\n */\r\n get initialLinearVelocity(): Vector3 {\r\n return this._initialLinearVelocity;\r\n }\r\n set initialLinearVelocity(value: Vector3) {\r\n this._initialLinearVelocity.set(value);\r\n }\r\n /**\r\n * Spin in rad/s a dynamic body starts with, as an axis scaled by speed in\r\n * world space; see {@link RigidBody.initialLinearVelocity}. Default (0, 0, 0).\r\n */\r\n get initialAngularVelocity(): Vector3 {\r\n return this._initialAngularVelocity;\r\n }\r\n set initialAngularVelocity(value: Vector3) {\r\n this._initialAngularVelocity.set(value);\r\n }\r\n\r\n /**\r\n * World position of the body's origin after the latest simulation step.\r\n *\r\n * @remarks\r\n * The node shows the body interpolated between the last two steps, and does\r\n * not move between the steps of one frame. Forces that depend on where the\r\n * body is (buoyancy, springs) should read this in a fixed update instead.\r\n * Before the body is simulated, the node's world position.\r\n */\r\n getSimulatedPosition(out = new Vector3()): Vector3 {\r\n const body = this._backend();\r\n if (body) {\r\n return body.getPosition(out);\r\n }\r\n return this.node ? this.node.getWorldPosition(out) : out.setXYZ(0, 0, 0);\r\n }\r\n /**\r\n * World orientation of the body after the latest simulation step; see\r\n * {@link RigidBody.getSimulatedPosition}.\r\n */\r\n getSimulatedRotation(out = new Quaternion()): Quaternion {\r\n const body = this._backend();\r\n if (body) {\r\n return body.getRotation(out);\r\n }\r\n if (this.node) {\r\n this.node.worldMatrix.decompose(null, out, null);\r\n return out;\r\n }\r\n return out.identity();\r\n }\r\n /** Linear velocity in m/s. Returns zero before the body exists in a simulation. */\r\n getLinearVelocity(out = new Vector3()): Vector3 {\r\n const body = this._backend();\r\n if (body) {\r\n return body.getLinearVelocity(out);\r\n }\r\n out.set(this._pendingLinearVelocity ?? zero);\r\n return out;\r\n }\r\n /** Sets the linear velocity; components along locked axes are ignored. */\r\n setLinearVelocity(value: Vector3) {\r\n const v = this._mask(value, this._lockTranslation);\r\n const body = this._backend();\r\n if (body) {\r\n body.setLinearVelocity(v);\r\n } else {\r\n this._pendingLinearVelocity = v;\r\n }\r\n }\r\n /** Angular velocity in rad/s, as an axis scaled by speed. */\r\n getAngularVelocity(out = new Vector3()): Vector3 {\r\n const body = this._backend();\r\n if (body) {\r\n return body.getAngularVelocity(out);\r\n }\r\n out.set(this._pendingAngularVelocity ?? zero);\r\n return out;\r\n }\r\n /** Sets the angular velocity; components about locked axes are ignored. */\r\n setAngularVelocity(value: Vector3) {\r\n const v = this._mask(value, this._lockRotation);\r\n const body = this._backend();\r\n if (body) {\r\n body.setAngularVelocity(v);\r\n } else {\r\n this._pendingAngularVelocity = v;\r\n }\r\n }\r\n /**\r\n * Adds a force (newtons, world space) acting on the centre of mass.\r\n *\r\n * @remarks\r\n * Called during a fixed update (`RuntimeScript.onFixedUpdate` or the world's\r\n * `fixedupdate` event), the force acts on that one simulation step; called at\r\n * any other time, it acts on every step of the next frame. Forces add up and\r\n * are cleared after use.\r\n */\r\n applyForce(force: Vector3) {\r\n (this.world?._inFixedUpdate ? this._stepForce : this._force).addBy(force);\r\n }\r\n /** Adds a torque (N·m, world space); acts like {@link RigidBody.applyForce}. */\r\n applyTorque(torque: Vector3) {\r\n (this.world?._inFixedUpdate ? this._stepTorque : this._torque).addBy(torque);\r\n }\r\n /** Adds an instantaneous change of momentum (N·s, world space), applied at the next step. */\r\n applyImpulse(impulse: Vector3) {\r\n this._impulse.addBy(impulse);\r\n }\r\n /** Adds an instantaneous change of angular momentum, applied at the next step. */\r\n applyTorqueImpulse(impulse: Vector3) {\r\n this._torqueImpulse.addBy(impulse);\r\n }\r\n /** Whether the body is resting and not being simulated. */\r\n get isSleeping() {\r\n return this._backend()?.isSleeping() ?? false;\r\n }\r\n /** Brings a resting body back into the simulation. */\r\n wakeUp() {\r\n this._backend()?.wakeUp();\r\n }\r\n\r\n _translationAxes(): Axes {\r\n return [!this._lockTranslation[0], !this._lockTranslation[1], !this._lockTranslation[2]];\r\n }\r\n _rotationAxes(): Axes {\r\n return [!this._lockRotation[0], !this._lockRotation[1], !this._lockRotation[2]];\r\n }\r\n _applyPendingVelocities(body: PhysicsBodyHandle) {\r\n if (!this._initialApplied) {\r\n this._initialApplied = true;\r\n if (this._motionType === 'dynamic') {\r\n if (!this._initialLinearVelocity.equalsTo(zero)) {\r\n body.setLinearVelocity(this._mask(this._initialLinearVelocity, this._lockTranslation));\r\n }\r\n if (!this._initialAngularVelocity.equalsTo(zero)) {\r\n body.setAngularVelocity(this._mask(this._initialAngularVelocity, this._lockRotation));\r\n }\r\n }\r\n }\r\n if (this._pendingLinearVelocity) {\r\n body.setLinearVelocity(this._pendingLinearVelocity);\r\n this._pendingLinearVelocity = null;\r\n }\r\n if (this._pendingAngularVelocity) {\r\n body.setAngularVelocity(this._pendingAngularVelocity);\r\n this._pendingAngularVelocity = null;\r\n }\r\n }\r\n /** Hands the accumulated inputs to the body before a step. */\r\n _applyStepInputs(body: PhysicsBodyHandle) {\r\n if (this._motionType !== 'dynamic') {\r\n this._stepForce.setXYZ(0, 0, 0);\r\n this._stepTorque.setXYZ(0, 0, 0);\r\n this._impulse.setXYZ(0, 0, 0);\r\n this._torqueImpulse.setXYZ(0, 0, 0);\r\n return;\r\n }\r\n const force = Vector3.add(this._force, this._stepForce, tmpForce);\r\n const torque = Vector3.add(this._torque, this._stepTorque, tmpTorque);\r\n const nonZero = !force.equalsTo(zero) || !torque.equalsTo(zero);\r\n if (nonZero || this._forceSet) {\r\n body.setForce(force, torque);\r\n this._forceSet = nonZero;\r\n }\r\n this._stepForce.setXYZ(0, 0, 0);\r\n this._stepTorque.setXYZ(0, 0, 0);\r\n if (!this._impulse.equalsTo(zero) || !this._torqueImpulse.equalsTo(zero)) {\r\n body.applyImpulse(this._impulse, this._torqueImpulse);\r\n this._impulse.setXYZ(0, 0, 0);\r\n this._torqueImpulse.setXYZ(0, 0, 0);\r\n }\r\n }\r\n /** Clears the frame's forces once all its steps are taken. */\r\n _clearForces(body: PhysicsBodyHandle) {\r\n this._force.setXYZ(0, 0, 0);\r\n this._torque.setXYZ(0, 0, 0);\r\n if (this._forceSet) {\r\n body.setForce(zero, zero);\r\n this._forceSet = false;\r\n }\r\n }\r\n private _setLock(axes: Axes, index: number, value: boolean) {\r\n if (axes[index] === !!value) {\r\n return;\r\n }\r\n axes[index] = !!value;\r\n const body = this._backend();\r\n if (body) {\r\n body.setEnabledAxes(this._translationAxes(), this._rotationAxes());\r\n }\r\n // Axis locks stop forces and contacts moving the body along an axis,\r\n // not velocity it already has; drop that too, so a lock means \"still\".\r\n if (value) {\r\n if (axes === this._lockTranslation) {\r\n this.setLinearVelocity(this.getLinearVelocity());\r\n } else {\r\n this.setAngularVelocity(this.getAngularVelocity());\r\n }\r\n }\r\n }\r\n private _mask(value: Vector3, locks: Axes) {\r\n return new Vector3(locks[0] ? 0 : value.x, locks[1] ? 0 : value.y, locks[2] ? 0 : value.z);\r\n }\r\n private _backend() {\r\n return this.world?._getBodyHandle(this) ?? null;\r\n }\r\n protected _join(world: PhysicsWorld) {\r\n this._initialApplied = false;\r\n world._registerBody(this);\r\n }\r\n protected _leave(world: PhysicsWorld) {\r\n world._unregisterBody(this);\r\n }\r\n}\r\n"],"names":["zero","Vector3","tmpForce","tmpTorque","RigidBody","PhysicsPart","_motionType","_mass","_linearDamping","_angularDamping","_gravityScale","_ccd","_canSleep","_lockTranslation","_lockRotation","_torque","_stepTorque","_impulse","_torqueImpulse","_pendingLinearVelocity","_pendingAngularVelocity","_initialLinearVelocity","_initialAngularVelocity","_force","_stepForce","_forceSet","_initialApplied","motionType","value","world","_markBodyDirty","mass","Math","max","_backend","setMass","linearDamping","setDamping","angularDamping","gravityScale","setGravityScale","ccd","setCcd","canSleep","lockTranslationX","_setLock","lockTranslationY","lockTranslationZ","lockRotationX","lockRotationY","lockRotationZ","initialLinearVelocity","set","initialAngularVelocity","getSimulatedPosition","out","body","getPosition","node","getWorldPosition","setXYZ","getSimulatedRotation","Quaternion","getRotation","worldMatrix","decompose","identity","getLinearVelocity","setLinearVelocity","v","_mask","getAngularVelocity","setAngularVelocity","applyForce","force","_inFixedUpdate","addBy","applyTorque","torque","applyImpulse","impulse","applyTorqueImpulse","isSleeping","wakeUp","_translationAxes","_rotationAxes","_applyPendingVelocities","equalsTo","_applyStepInputs","add","nonZero","setForce","_clearForces","axes","index","setEnabledAxes","locks","x","y","z","_getBodyHandle","_join","_registerBody","_leave","_unregisterBody"],"mappings":"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"}