@babylonjs/core 6.38.0 → 6.39.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 (276) hide show
  1. package/Behaviors/Meshes/sixDofDragBehavior.js +14 -20
  2. package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
  3. package/Cameras/Inputs/BaseCameraPointersInput.d.ts +9 -9
  4. package/Cameras/Inputs/BaseCameraPointersInput.js +10 -10
  5. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  6. package/Cameras/Inputs/freeCameraMouseInput.d.ts +1 -1
  7. package/Cameras/Inputs/freeCameraMouseInput.js +1 -1
  8. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  9. package/Cameras/VR/vrExperienceHelper.d.ts +2 -2
  10. package/Cameras/VR/vrExperienceHelper.js +2 -2
  11. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  12. package/Culling/Octrees/octree.d.ts +4 -4
  13. package/Culling/Octrees/octree.js +4 -4
  14. package/Culling/Octrees/octree.js.map +1 -1
  15. package/Debug/physicsViewer.d.ts +5 -1
  16. package/Debug/physicsViewer.js +5 -1
  17. package/Debug/physicsViewer.js.map +1 -1
  18. package/Engines/ICanvas.d.ts +60 -0
  19. package/Engines/ICanvas.js.map +1 -1
  20. package/Engines/IPipelineContext.d.ts +3 -3
  21. package/Engines/IPipelineContext.js.map +1 -1
  22. package/Engines/Native/nativePipelineContext.d.ts +4 -5
  23. package/Engines/Native/nativePipelineContext.js +2 -9
  24. package/Engines/Native/nativePipelineContext.js.map +1 -1
  25. package/Engines/Native/nativeRenderTargetWrapper.js +2 -0
  26. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  27. package/Engines/Native/validatedNativeDataStream.d.ts +3 -0
  28. package/Engines/Native/validatedNativeDataStream.js +3 -0
  29. package/Engines/Native/validatedNativeDataStream.js.map +1 -1
  30. package/Engines/WebGL/webGLHardwareTexture.js +1 -0
  31. package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
  32. package/Engines/WebGL/webGLRenderTargetWrapper.js +1 -0
  33. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  34. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  35. package/Engines/WebGPU/webgpuConstants.d.ts +3 -1
  36. package/Engines/WebGPU/webgpuConstants.js +2 -0
  37. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  38. package/Engines/WebGPU/webgpuTintWASM.d.ts +1 -1
  39. package/Engines/WebGPU/webgpuTintWASM.js +5 -5
  40. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  41. package/Engines/engine.d.ts +11 -45
  42. package/Engines/nativeEngine.d.ts +3 -1
  43. package/Engines/nativeEngine.js +29 -30
  44. package/Engines/nativeEngine.js.map +1 -1
  45. package/Engines/thinEngine.js +2 -2
  46. package/Engines/thinEngine.js.map +1 -1
  47. package/Engines/webgpuEngine.js +0 -1
  48. package/Engines/webgpuEngine.js.map +1 -1
  49. package/FlowGraph/Blocks/Data/Logic/index.d.ts +0 -1
  50. package/FlowGraph/Blocks/Data/Logic/index.js +0 -1
  51. package/FlowGraph/Blocks/Data/Logic/index.js.map +1 -1
  52. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.d.ts +334 -1
  53. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.js +472 -74
  54. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.js.map +1 -1
  55. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js +6 -6
  56. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -1
  57. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.d.ts +3 -0
  58. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.js.map +1 -1
  59. package/FlowGraph/Blocks/Data/flowGraphUnaryOperationBlock.d.ts +1 -1
  60. package/FlowGraph/Blocks/Data/flowGraphUnaryOperationBlock.js +2 -2
  61. package/FlowGraph/Blocks/Data/flowGraphUnaryOperationBlock.js.map +1 -1
  62. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.d.ts +7 -3
  63. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.js +7 -6
  64. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.js.map +1 -1
  65. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSequenceBlock.d.ts +14 -0
  66. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSequenceBlock.js +4 -0
  67. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSequenceBlock.js.map +1 -1
  68. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.d.ts +3 -0
  69. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js.map +1 -1
  70. package/FlowGraph/flowGraphConnection.d.ts +16 -0
  71. package/FlowGraph/flowGraphConnection.js.map +1 -1
  72. package/FlowGraph/flowGraphContext.d.ts +14 -0
  73. package/FlowGraph/flowGraphContext.js.map +1 -1
  74. package/FlowGraph/flowGraphInteger.d.ts +62 -0
  75. package/FlowGraph/flowGraphInteger.js +76 -0
  76. package/FlowGraph/flowGraphInteger.js.map +1 -0
  77. package/FlowGraph/flowGraphPathConverterComponent.d.ts +2 -1
  78. package/FlowGraph/flowGraphPathConverterComponent.js +3 -3
  79. package/FlowGraph/flowGraphPathConverterComponent.js.map +1 -1
  80. package/FlowGraph/flowGraphRichTypes.d.ts +2 -0
  81. package/FlowGraph/flowGraphRichTypes.js +5 -0
  82. package/FlowGraph/flowGraphRichTypes.js.map +1 -1
  83. package/FlowGraph/serialization.js +8 -1
  84. package/FlowGraph/serialization.js.map +1 -1
  85. package/Gizmos/gizmo.d.ts +4 -1
  86. package/Gizmos/gizmo.js.map +1 -1
  87. package/Inputs/scene.inputManager.js +1 -1
  88. package/Inputs/scene.inputManager.js.map +1 -1
  89. package/Lights/spotLight.js +1 -1
  90. package/Lights/spotLight.js.map +1 -1
  91. package/Loading/sceneLoader.d.ts +9 -0
  92. package/Loading/sceneLoader.js +7 -0
  93. package/Loading/sceneLoader.js.map +1 -1
  94. package/Materials/GreasedLine/greasedLineMaterialInterfaces.d.ts +1 -1
  95. package/Materials/GreasedLine/greasedLineMaterialInterfaces.js.map +1 -1
  96. package/Materials/GreasedLine/greasedLinePluginMaterial.d.ts +2 -1
  97. package/Materials/GreasedLine/greasedLinePluginMaterial.js +2 -1
  98. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  99. package/Materials/Node/Blocks/Dual/index.d.ts +1 -0
  100. package/Materials/Node/Blocks/Dual/index.js +1 -0
  101. package/Materials/Node/Blocks/Dual/index.js.map +1 -1
  102. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +5 -0
  103. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +5 -0
  104. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  105. package/Materials/Node/Blocks/Input/prePassTextureBlock.d.ts +1 -1
  106. package/Materials/Node/Blocks/Input/prePassTextureBlock.js +1 -1
  107. package/Materials/Node/Blocks/Input/prePassTextureBlock.js.map +1 -1
  108. package/Materials/Node/Blocks/addBlock.js +1 -1
  109. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  110. package/Materials/Node/Blocks/divideBlock.js +1 -1
  111. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  112. package/Materials/Node/Blocks/multiplyBlock.js +1 -1
  113. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  114. package/Materials/Node/Blocks/subtractBlock.js +1 -1
  115. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  116. package/Materials/Node/nodeMaterial.d.ts +2 -1
  117. package/Materials/Node/nodeMaterial.js +2 -1
  118. package/Materials/Node/nodeMaterial.js.map +1 -1
  119. package/Materials/PBR/pbrBaseMaterial.d.ts +3 -3
  120. package/Materials/PBR/pbrBaseMaterial.js +3 -3
  121. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  122. package/Materials/PBR/pbrMaterial.d.ts +1 -0
  123. package/Materials/PBR/pbrMaterial.js +2 -1
  124. package/Materials/PBR/pbrMaterial.js.map +1 -1
  125. package/Materials/PBR/pbrMetallicRoughnessMaterial.d.ts +3 -3
  126. package/Materials/PBR/pbrMetallicRoughnessMaterial.js +3 -3
  127. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  128. package/Materials/PBR/pbrSpecularGlossinessMaterial.d.ts +3 -3
  129. package/Materials/PBR/pbrSpecularGlossinessMaterial.js +3 -3
  130. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  131. package/Materials/Textures/Procedurals/noiseProceduralTexture.d.ts +1 -1
  132. package/Materials/Textures/Procedurals/noiseProceduralTexture.js +1 -1
  133. package/Materials/Textures/Procedurals/noiseProceduralTexture.js.map +1 -1
  134. package/Materials/Textures/baseTexture.js +3 -0
  135. package/Materials/Textures/baseTexture.js.map +1 -1
  136. package/Materials/Textures/multiRenderTarget.d.ts +1 -1
  137. package/Materials/Textures/multiRenderTarget.js +1 -1
  138. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  139. package/Materials/Textures/texture.d.ts +4 -1
  140. package/Materials/Textures/texture.js +4 -1
  141. package/Materials/Textures/texture.js.map +1 -1
  142. package/Materials/Textures/thinRenderTargetTexture.d.ts +1 -1
  143. package/Materials/Textures/thinRenderTargetTexture.js +1 -1
  144. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  145. package/Materials/Textures/thinTexture.js +3 -0
  146. package/Materials/Textures/thinTexture.js.map +1 -1
  147. package/Materials/effect.js +2 -1
  148. package/Materials/effect.js.map +1 -1
  149. package/Materials/material.d.ts +1 -1
  150. package/Materials/material.js +2 -2
  151. package/Materials/material.js.map +1 -1
  152. package/Materials/standardMaterial.js +1 -1
  153. package/Materials/standardMaterial.js.map +1 -1
  154. package/Maths/math.like.d.ts +3 -0
  155. package/Maths/math.like.js.map +1 -1
  156. package/Maths/math.polar.d.ts +3 -2
  157. package/Maths/math.polar.js +8 -2
  158. package/Maths/math.polar.js.map +1 -1
  159. package/Maths/math.vector.d.ts +1 -1
  160. package/Maths/math.vector.js +1 -1
  161. package/Maths/math.vector.js.map +1 -1
  162. package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +2 -0
  163. package/Meshes/GreasedLine/greasedLineBaseMesh.js +2 -0
  164. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  165. package/Meshes/GreasedLine/greasedLineRibbonMesh.d.ts +2 -0
  166. package/Meshes/GreasedLine/greasedLineRibbonMesh.js +2 -0
  167. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  168. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.d.ts +1 -1
  169. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js +1 -1
  170. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
  171. package/Meshes/geodesicMesh.d.ts +32 -1
  172. package/Meshes/geodesicMesh.js +17 -1
  173. package/Meshes/geodesicMesh.js.map +1 -1
  174. package/Meshes/instancedMesh.d.ts +27 -14
  175. package/Meshes/instancedMesh.js +27 -14
  176. package/Meshes/instancedMesh.js.map +1 -1
  177. package/Meshes/linesMesh.d.ts +3 -3
  178. package/Meshes/linesMesh.js +3 -3
  179. package/Meshes/linesMesh.js.map +1 -1
  180. package/Meshes/transformNode.js +18 -0
  181. package/Meshes/transformNode.js.map +1 -1
  182. package/Misc/HighDynamicRange/hdr.d.ts +1 -0
  183. package/Misc/HighDynamicRange/hdr.js +1 -0
  184. package/Misc/HighDynamicRange/hdr.js.map +1 -1
  185. package/Misc/HighDynamicRange/panoramaToCubemap.d.ts +1 -0
  186. package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -0
  187. package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
  188. package/Misc/decorators.d.ts +1 -0
  189. package/Misc/decorators.js +1 -0
  190. package/Misc/decorators.js.map +1 -1
  191. package/Misc/greasedLineTools.d.ts +5 -1
  192. package/Misc/greasedLineTools.js +5 -1
  193. package/Misc/greasedLineTools.js.map +1 -1
  194. package/Misc/tools.d.ts +4 -0
  195. package/Misc/tools.js +4 -0
  196. package/Misc/tools.js.map +1 -1
  197. package/Misc/videoRecorder.d.ts +4 -1
  198. package/Misc/videoRecorder.js +7 -5
  199. package/Misc/videoRecorder.js.map +1 -1
  200. package/Misc/webRequest.d.ts +3 -0
  201. package/Misc/webRequest.js +3 -0
  202. package/Misc/webRequest.js.map +1 -1
  203. package/Navigation/INavigationEngine.d.ts +10 -1
  204. package/Navigation/INavigationEngine.js.map +1 -1
  205. package/Navigation/Plugins/recastJSPlugin.d.ts +20 -0
  206. package/Navigation/Plugins/recastJSPlugin.js +43 -8
  207. package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
  208. package/ObjectModel/objectModelInterfaces.d.ts +5 -0
  209. package/ObjectModel/objectModelInterfaces.js.map +1 -1
  210. package/Physics/physicsHelper.d.ts +2 -2
  211. package/Physics/physicsHelper.js +4 -4
  212. package/Physics/physicsHelper.js.map +1 -1
  213. package/Physics/physicsRaycastResult.d.ts +2 -1
  214. package/Physics/physicsRaycastResult.js +2 -1
  215. package/Physics/physicsRaycastResult.js.map +1 -1
  216. package/Physics/v1/physicsImpostor.d.ts +2 -2
  217. package/Physics/v1/physicsImpostor.js +2 -2
  218. package/Physics/v1/physicsImpostor.js.map +1 -1
  219. package/Physics/v2/Plugins/havokPlugin.d.ts +49 -4
  220. package/Physics/v2/Plugins/havokPlugin.js +51 -4
  221. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  222. package/Physics/v2/physicsBody.d.ts +33 -3
  223. package/Physics/v2/physicsBody.js +24 -5
  224. package/Physics/v2/physicsBody.js.map +1 -1
  225. package/Physics/v2/physicsEngine.d.ts +4 -1
  226. package/Physics/v2/physicsEngine.js +4 -1
  227. package/Physics/v2/physicsEngine.js.map +1 -1
  228. package/Physics/v2/ragdoll.js +4 -0
  229. package/Physics/v2/ragdoll.js.map +1 -1
  230. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +1 -1
  231. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +1 -1
  232. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  233. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +1 -1
  234. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -1
  235. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  236. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +1 -1
  237. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +1 -1
  238. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  239. package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +1 -1
  240. package/PostProcesses/volumetricLightScatteringPostProcess.js +1 -1
  241. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  242. package/Rendering/GlobalIllumination/giRSMManager.d.ts +2 -1
  243. package/Rendering/GlobalIllumination/giRSMManager.js +5 -2
  244. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  245. package/Rendering/prePassRenderer.d.ts +2 -2
  246. package/Rendering/prePassRenderer.js +2 -2
  247. package/Rendering/prePassRenderer.js.map +1 -1
  248. package/Rendering/reflectiveShadowMap.d.ts +4 -0
  249. package/Rendering/reflectiveShadowMap.js +7 -0
  250. package/Rendering/reflectiveShadowMap.js.map +1 -1
  251. package/Rendering/renderingManager.d.ts +1 -0
  252. package/Rendering/renderingManager.js +1 -0
  253. package/Rendering/renderingManager.js.map +1 -1
  254. package/XR/features/WebXRAbstractFeature.d.ts +4 -0
  255. package/XR/features/WebXRAbstractFeature.js.map +1 -1
  256. package/XR/features/WebXRControllerPointerSelection.js +1 -0
  257. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  258. package/XR/features/WebXRDepthSensing.d.ts +1 -1
  259. package/XR/features/WebXRDepthSensing.js +1 -1
  260. package/XR/features/WebXRDepthSensing.js.map +1 -1
  261. package/XR/features/WebXRSpaceWarp.d.ts +0 -27
  262. package/XR/features/WebXRSpaceWarp.js +0 -27
  263. package/XR/features/WebXRSpaceWarp.js.map +1 -1
  264. package/XR/index.d.ts +1 -0
  265. package/XR/index.js +1 -0
  266. package/XR/index.js.map +1 -1
  267. package/assetContainer.d.ts +1 -1
  268. package/assetContainer.js +1 -1
  269. package/assetContainer.js.map +1 -1
  270. package/node.d.ts +3 -0
  271. package/node.js +3 -0
  272. package/node.js.map +1 -1
  273. package/package.json +1 -1
  274. package/FlowGraph/Blocks/Data/Logic/flowGraphBitwiseBlocks.d.ts +0 -60
  275. package/FlowGraph/Blocks/Data/Logic/flowGraphBitwiseBlocks.js +0 -104
  276. package/FlowGraph/Blocks/Data/Logic/flowGraphBitwiseBlocks.js.map +0 -1
@@ -109,6 +109,7 @@ export declare class PhysicsBody {
109
109
  * Sets the event mask for the physics engine.
110
110
  *
111
111
  * @param eventMask - A bitmask that determines which events will be sent to the physics engine.
112
+ * @param instanceIndex - If this body is instanced, the index of the instance to set the event mask for.
112
113
  *
113
114
  * This method is useful for setting the event mask for the physics engine, which determines which events
114
115
  * will be sent to the physics engine. This allows the user to control which events the physics engine will respond to.
@@ -116,7 +117,7 @@ export declare class PhysicsBody {
116
117
  setEventMask(eventMask: number, instanceIndex?: number): void;
117
118
  /**
118
119
  * Gets the event mask of the physics engine.
119
- *
120
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the event mask for.
120
121
  * @returns The event mask of the physics engine.
121
122
  *
122
123
  * This method is useful for getting the event mask of the physics engine,
@@ -127,10 +128,13 @@ export declare class PhysicsBody {
127
128
  getEventMask(instanceIndex?: number): number;
128
129
  /**
129
130
  * Sets the motion type of the physics body. Can be STATIC, DYNAMIC, or ANIMATED.
131
+ * @param motionType - The motion type to set.
132
+ * @param instanceIndex - If this body is instanced, the index of the instance to set the motion type for.
130
133
  */
131
134
  setMotionType(motionType: PhysicsMotionType, instanceIndex?: number): void;
132
135
  /**
133
136
  * Gets the motion type of the physics body. Can be STATIC, DYNAMIC, or ANIMATED.
137
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the motion type for.
134
138
  */
135
139
  getMotionType(instanceIndex?: number): PhysicsMotionType;
136
140
  /**
@@ -138,7 +142,8 @@ export declare class PhysicsBody {
138
142
  * This method is useful for computing the initial mass properties of a physics object, such as its mass,
139
143
  * inertia, and center of mass; these values are important for accurately simulating the physics of the
140
144
  * object in the physics engine, and computing values based on the shape will provide you with reasonable
141
- * intial values, which you can then customize.
145
+ * initial values, which you can then customize.
146
+ * @param instanceIndex - The index of the instance to compute the mass properties for.
142
147
  */
143
148
  computeMassProperties(instanceIndex?: number): PhysicsMassProperties;
144
149
  /**
@@ -153,7 +158,7 @@ export declare class PhysicsBody {
153
158
  setMassProperties(massProps: PhysicsMassProperties, instanceIndex?: number): void;
154
159
  /**
155
160
  * Retrieves the mass properties of the object.
156
- *
161
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the mass properties for.
157
162
  * @returns The mass properties of the object.
158
163
  *
159
164
  * This method is useful for physics simulations, as it allows the user to
@@ -166,6 +171,7 @@ export declare class PhysicsBody {
166
171
  * Sets the linear damping of the physics body.
167
172
  *
168
173
  * @param damping - The linear damping value.
174
+ * @param instanceIndex - If this body is instanced, the index of the instance to set the linear damping for.
169
175
  *
170
176
  * This method is useful for controlling the linear damping of the physics body,
171
177
  * which is the rate at which the body's velocity decreases over time. This is useful for simulating
@@ -174,6 +180,7 @@ export declare class PhysicsBody {
174
180
  setLinearDamping(damping: number, instanceIndex?: number): void;
175
181
  /**
176
182
  * Gets the linear damping of the physics body.
183
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the linear damping for.
177
184
  * @returns The linear damping of the physics body.
178
185
  *
179
186
  * This method is useful for retrieving the linear damping of the physics body, which is the amount of
@@ -184,6 +191,7 @@ export declare class PhysicsBody {
184
191
  /**
185
192
  * Sets the angular damping of the physics body.
186
193
  * @param damping The angular damping of the body.
194
+ * @param instanceIndex - If this body is instanced, the index of the instance to set the angular damping for.
187
195
  *
188
196
  * This method is useful for controlling the angular velocity of a physics body.
189
197
  * By setting the damping, the body's angular velocity will be reduced over time, simulating the effect of friction.
@@ -192,6 +200,7 @@ export declare class PhysicsBody {
192
200
  setAngularDamping(damping: number, instanceIndex?: number): void;
193
201
  /**
194
202
  * Gets the angular damping of the physics body.
203
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the angular damping for.
195
204
  *
196
205
  * @returns The angular damping of the physics body.
197
206
  *
@@ -203,6 +212,7 @@ export declare class PhysicsBody {
203
212
  /**
204
213
  * Sets the linear velocity of the physics object.
205
214
  * @param linVel - The linear velocity to set.
215
+ * @param instanceIndex - If this body is instanced, the index of the instance to set the linear velocity for.
206
216
  *
207
217
  * This method is useful for setting the linear velocity of a physics object,
208
218
  * which is necessary for simulating realistic physics in a game engine.
@@ -213,6 +223,7 @@ export declare class PhysicsBody {
213
223
  /**
214
224
  * Gets the linear velocity of the physics body and stores it in the given vector3.
215
225
  * @param linVel - The vector3 to store the linear velocity in.
226
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the linear velocity for.
216
227
  *
217
228
  * This method is useful for getting the linear velocity of a physics body in a physics engine.
218
229
  * This can be used to determine the speed and direction of the body, which can be used to calculate the motion of the body.
@@ -220,6 +231,7 @@ export declare class PhysicsBody {
220
231
  getLinearVelocityToRef(linVel: Vector3, instanceIndex?: number): void;
221
232
  /**
222
233
  * Gets the linear velocity of the physics body as a new vector3.
234
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the linear velocity for.
223
235
  * @returns The linear velocity of the physics body.
224
236
  *
225
237
  * This method is useful for getting the linear velocity of a physics body in a physics engine.
@@ -229,6 +241,7 @@ export declare class PhysicsBody {
229
241
  /**
230
242
  * Sets the angular velocity of the physics object.
231
243
  * @param angVel - The angular velocity to set.
244
+ * @param instanceIndex - If this body is instanced, the index of the instance to set the angular velocity for.
232
245
  *
233
246
  * This method is useful for setting the angular velocity of a physics object, which is necessary for
234
247
  * simulating realistic physics behavior. The angular velocity is used to determine the rate of rotation of the object,
@@ -238,6 +251,7 @@ export declare class PhysicsBody {
238
251
  /**
239
252
  * Gets the angular velocity of the physics body and stores it in the given vector3.
240
253
  * @param angVel - The vector3 to store the angular velocity in.
254
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the angular velocity for.
241
255
  *
242
256
  * This method is useful for getting the angular velocity of a physics body, which can be used to determine the body's
243
257
  * rotational speed. This information can be used to create realistic physics simulations.
@@ -245,6 +259,7 @@ export declare class PhysicsBody {
245
259
  getAngularVelocityToRef(angVel: Vector3, instanceIndex?: number): void;
246
260
  /**
247
261
  * Gets the angular velocity of the physics body as a new vector3.
262
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the angular velocity for.
248
263
  * @returns The angular velocity of the physics body.
249
264
  *
250
265
  * This method is useful for getting the angular velocity of a physics body, which can be used to determine the body's
@@ -296,8 +311,23 @@ export declare class PhysicsBody {
296
311
  * @param enabled true if PhysicsBody's collision will rise a collision event and notifies the observable
297
312
  */
298
313
  setCollisionCallbackEnabled(enabled: boolean): void;
314
+ /**
315
+ * Enable or disable collision ended callback for this PhysicsBody.
316
+ * @param enabled true if PhysicsBody's collision ended will rise a collision event and notifies the observable
317
+ */
299
318
  setCollisionEndedCallbackEnabled(enabled: boolean): void;
319
+ /**
320
+ * Get the center of the object in world space.
321
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the center for.
322
+ * @returns geometric center of the associated mesh
323
+ */
300
324
  getObjectCenterWorld(instanceIndex?: number): Vector3;
325
+ /**
326
+ * Get the center of the object in world space.
327
+ * @param ref - The vector3 to store the result in.
328
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the center for.
329
+ * @returns geometric center of the associated mesh
330
+ */
301
331
  getObjectCenterWorldToRef(ref: Vector3, instanceIndex?: number): Vector3;
302
332
  /**
303
333
  * Adds a constraint to the physics engine.
@@ -144,6 +144,7 @@ export class PhysicsBody {
144
144
  * Sets the event mask for the physics engine.
145
145
  *
146
146
  * @param eventMask - A bitmask that determines which events will be sent to the physics engine.
147
+ * @param instanceIndex - If this body is instanced, the index of the instance to set the event mask for.
147
148
  *
148
149
  * This method is useful for setting the event mask for the physics engine, which determines which events
149
150
  * will be sent to the physics engine. This allows the user to control which events the physics engine will respond to.
@@ -153,7 +154,7 @@ export class PhysicsBody {
153
154
  }
154
155
  /**
155
156
  * Gets the event mask of the physics engine.
156
- *
157
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the event mask for.
157
158
  * @returns The event mask of the physics engine.
158
159
  *
159
160
  * This method is useful for getting the event mask of the physics engine,
@@ -166,12 +167,15 @@ export class PhysicsBody {
166
167
  }
167
168
  /**
168
169
  * Sets the motion type of the physics body. Can be STATIC, DYNAMIC, or ANIMATED.
170
+ * @param motionType - The motion type to set.
171
+ * @param instanceIndex - If this body is instanced, the index of the instance to set the motion type for.
169
172
  */
170
173
  setMotionType(motionType, instanceIndex) {
171
174
  this._physicsPlugin.setMotionType(this, motionType, instanceIndex);
172
175
  }
173
176
  /**
174
177
  * Gets the motion type of the physics body. Can be STATIC, DYNAMIC, or ANIMATED.
178
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the motion type for.
175
179
  */
176
180
  getMotionType(instanceIndex) {
177
181
  return this._physicsPlugin.getMotionType(this, instanceIndex);
@@ -181,7 +185,8 @@ export class PhysicsBody {
181
185
  * This method is useful for computing the initial mass properties of a physics object, such as its mass,
182
186
  * inertia, and center of mass; these values are important for accurately simulating the physics of the
183
187
  * object in the physics engine, and computing values based on the shape will provide you with reasonable
184
- * intial values, which you can then customize.
188
+ * initial values, which you can then customize.
189
+ * @param instanceIndex - The index of the instance to compute the mass properties for.
185
190
  */
186
191
  computeMassProperties(instanceIndex) {
187
192
  return this._physicsPlugin.computeMassProperties(this, instanceIndex);
@@ -200,7 +205,7 @@ export class PhysicsBody {
200
205
  }
201
206
  /**
202
207
  * Retrieves the mass properties of the object.
203
- *
208
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the mass properties for.
204
209
  * @returns The mass properties of the object.
205
210
  *
206
211
  * This method is useful for physics simulations, as it allows the user to
@@ -215,6 +220,7 @@ export class PhysicsBody {
215
220
  * Sets the linear damping of the physics body.
216
221
  *
217
222
  * @param damping - The linear damping value.
223
+ * @param instanceIndex - If this body is instanced, the index of the instance to set the linear damping for.
218
224
  *
219
225
  * This method is useful for controlling the linear damping of the physics body,
220
226
  * which is the rate at which the body's velocity decreases over time. This is useful for simulating
@@ -225,6 +231,7 @@ export class PhysicsBody {
225
231
  }
226
232
  /**
227
233
  * Gets the linear damping of the physics body.
234
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the linear damping for.
228
235
  * @returns The linear damping of the physics body.
229
236
  *
230
237
  * This method is useful for retrieving the linear damping of the physics body, which is the amount of
@@ -237,6 +244,7 @@ export class PhysicsBody {
237
244
  /**
238
245
  * Sets the angular damping of the physics body.
239
246
  * @param damping The angular damping of the body.
247
+ * @param instanceIndex - If this body is instanced, the index of the instance to set the angular damping for.
240
248
  *
241
249
  * This method is useful for controlling the angular velocity of a physics body.
242
250
  * By setting the damping, the body's angular velocity will be reduced over time, simulating the effect of friction.
@@ -247,6 +255,7 @@ export class PhysicsBody {
247
255
  }
248
256
  /**
249
257
  * Gets the angular damping of the physics body.
258
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the angular damping for.
250
259
  *
251
260
  * @returns The angular damping of the physics body.
252
261
  *
@@ -260,6 +269,7 @@ export class PhysicsBody {
260
269
  /**
261
270
  * Sets the linear velocity of the physics object.
262
271
  * @param linVel - The linear velocity to set.
272
+ * @param instanceIndex - If this body is instanced, the index of the instance to set the linear velocity for.
263
273
  *
264
274
  * This method is useful for setting the linear velocity of a physics object,
265
275
  * which is necessary for simulating realistic physics in a game engine.
@@ -272,6 +282,7 @@ export class PhysicsBody {
272
282
  /**
273
283
  * Gets the linear velocity of the physics body and stores it in the given vector3.
274
284
  * @param linVel - The vector3 to store the linear velocity in.
285
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the linear velocity for.
275
286
  *
276
287
  * This method is useful for getting the linear velocity of a physics body in a physics engine.
277
288
  * This can be used to determine the speed and direction of the body, which can be used to calculate the motion of the body.
@@ -281,6 +292,7 @@ export class PhysicsBody {
281
292
  }
282
293
  /**
283
294
  * Gets the linear velocity of the physics body as a new vector3.
295
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the linear velocity for.
284
296
  * @returns The linear velocity of the physics body.
285
297
  *
286
298
  * This method is useful for getting the linear velocity of a physics body in a physics engine.
@@ -294,6 +306,7 @@ export class PhysicsBody {
294
306
  /**
295
307
  * Sets the angular velocity of the physics object.
296
308
  * @param angVel - The angular velocity to set.
309
+ * @param instanceIndex - If this body is instanced, the index of the instance to set the angular velocity for.
297
310
  *
298
311
  * This method is useful for setting the angular velocity of a physics object, which is necessary for
299
312
  * simulating realistic physics behavior. The angular velocity is used to determine the rate of rotation of the object,
@@ -305,6 +318,7 @@ export class PhysicsBody {
305
318
  /**
306
319
  * Gets the angular velocity of the physics body and stores it in the given vector3.
307
320
  * @param angVel - The vector3 to store the angular velocity in.
321
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the angular velocity for.
308
322
  *
309
323
  * This method is useful for getting the angular velocity of a physics body, which can be used to determine the body's
310
324
  * rotational speed. This information can be used to create realistic physics simulations.
@@ -314,6 +328,7 @@ export class PhysicsBody {
314
328
  }
315
329
  /**
316
330
  * Gets the angular velocity of the physics body as a new vector3.
331
+ * @param instanceIndex - If this body is instanced, the index of the instance to get the angular velocity for.
317
332
  * @returns The angular velocity of the physics body.
318
333
  *
319
334
  * This method is useful for getting the angular velocity of a physics body, which can be used to determine the body's
@@ -382,11 +397,15 @@ export class PhysicsBody {
382
397
  this._collisionCBEnabled = enabled;
383
398
  this._physicsPlugin.setCollisionCallbackEnabled(this, enabled);
384
399
  }
400
+ /**
401
+ * Enable or disable collision ended callback for this PhysicsBody.
402
+ * @param enabled true if PhysicsBody's collision ended will rise a collision event and notifies the observable
403
+ */
385
404
  setCollisionEndedCallbackEnabled(enabled) {
386
405
  this._collisionEndedCBEnabled = enabled;
387
406
  this._physicsPlugin.setCollisionEndedCallbackEnabled(this, enabled);
388
407
  }
389
- /*
408
+ /**
390
409
  * Get the center of the object in world space.
391
410
  * @param instanceIndex - If this body is instanced, the index of the instance to get the center for.
392
411
  * @returns geometric center of the associated mesh
@@ -395,7 +414,7 @@ export class PhysicsBody {
395
414
  const ref = new Vector3();
396
415
  return this.getObjectCenterWorldToRef(ref, instanceIndex);
397
416
  }
398
- /*
417
+ /**
399
418
  * Get the center of the object in world space.
400
419
  * @param ref - The vector3 to store the result in.
401
420
  * @param instanceIndex - If this body is instanced, the index of the instance to get the center for.
@@ -1 +1 @@
1
- {"version":3,"file":"physicsBody.js","sourceRoot":"","sources":["../../../../../dev/core/src/Physics/v2/physicsBody.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IBasePhysicsCollisionEvent, IPhysicsCollisionEvent, IPhysicsEnginePluginV2, PhysicsMassProperties, PhysicsMotionType } from \"./IPhysicsEnginePlugin\";\r\nimport type { PhysicsShape } from \"./physicsShape\";\r\nimport { Vector3, Quaternion, TmpVectors } from \"../../Maths/math.vector\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { PhysicsEngine } from \"./physicsEngine\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { PhysicsConstraint } from \"./physicsConstraint\";\r\nimport type { Bone } from \"core/Bones/bone\";\r\nimport { Space } from \"core/Maths/math.axis\";\r\nimport type { Observable, Observer } from \"../../Misc/observable\";\r\nimport type { Node } from \"../../node\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { TransformNode } from \"../../Meshes/transformNode\";\r\n\r\n/**\r\n * PhysicsBody is useful for creating a physics body that can be used in a physics engine. It allows\r\n * the user to set the mass and velocity of the body, which can then be used to calculate the\r\n * motion of the body in the physics engine.\r\n */\r\nexport class PhysicsBody {\r\n /**\r\n * V2 Physics plugin private data for single Transform\r\n */\r\n public _pluginData: any = undefined;\r\n /**\r\n * V2 Physics plugin private data for instances\r\n */\r\n public _pluginDataInstances: Array<any> = [];\r\n /**\r\n * The V2 plugin used to create and manage this Physics Body\r\n */\r\n private _physicsPlugin: IPhysicsEnginePluginV2;\r\n /**\r\n * The engine used to create and manage this Physics Body\r\n */\r\n private _physicsEngine: PhysicsEngine;\r\n /**\r\n * If the collision callback is enabled\r\n */\r\n private _collisionCBEnabled: boolean = false;\r\n /**\r\n * If the collision ended callback is enabled\r\n */\r\n private _collisionEndedCBEnabled: boolean = false;\r\n /**\r\n * The transform node associated with this Physics Body\r\n */\r\n transformNode: TransformNode;\r\n /**\r\n * Disable pre-step that consists in updating Physics Body from Transform Node Translation/Orientation.\r\n * True by default for maximum performance.\r\n */\r\n disablePreStep: boolean = true;\r\n\r\n /**\r\n * Physics engine will try to make this body sleeping and not active\r\n */\r\n public startAsleep: boolean;\r\n\r\n private _nodeDisposeObserver: Nullable<Observer<Node>>;\r\n\r\n private _isDisposed = false;\r\n\r\n /**\r\n * Constructs a new physics body for the given node.\r\n * @param transformNode - The Transform Node to construct the physics body for. For better performance, it is advised that this node does not have a parent.\r\n * @param motionType - The motion type of the physics body. The options are:\r\n * - PhysicsMotionType.STATIC - Static bodies are not moving and unaffected by forces or collisions. They are good for level boundaries or terrain.\r\n * - PhysicsMotionType.DYNAMIC - Dynamic bodies are fully simulated. They can move and collide with other objects.\r\n * - PhysicsMotionType.ANIMATED - They behave like dynamic bodies, but they won't be affected by other bodies, but still push other bodies out of the way.\r\n * @param startsAsleep - Whether the physics body should start in a sleeping state (not a guarantee). Defaults to false.\r\n * @param scene - The scene containing the physics engine.\r\n *\r\n * This code is useful for creating a physics body for a given Transform Node in a scene.\r\n * It checks the version of the physics engine and the physics plugin, and initializes the body accordingly.\r\n * It also sets the node's rotation quaternion if it is not already set. Finally, it adds the body to the physics engine.\r\n */\r\n constructor(transformNode: TransformNode, motionType: PhysicsMotionType, startsAsleep: boolean, scene: Scene) {\r\n if (!scene) {\r\n return;\r\n }\r\n const physicsEngine = scene.getPhysicsEngine() as PhysicsEngine;\r\n if (!physicsEngine) {\r\n throw new Error(\"No Physics Engine available.\");\r\n }\r\n this._physicsEngine = physicsEngine;\r\n if (physicsEngine.getPluginVersion() != 2) {\r\n throw new Error(\"Plugin version is incorrect. Expected version 2.\");\r\n }\r\n const physicsPlugin = physicsEngine.getPhysicsPlugin();\r\n if (!physicsPlugin) {\r\n throw new Error(\"No Physics Plugin available.\");\r\n }\r\n\r\n this._physicsPlugin = physicsPlugin as IPhysicsEnginePluginV2;\r\n if (!transformNode.rotationQuaternion) {\r\n transformNode.rotationQuaternion = Quaternion.FromEulerAngles(transformNode.rotation.x, transformNode.rotation.y, transformNode.rotation.z);\r\n }\r\n\r\n this.startAsleep = startsAsleep;\r\n\r\n // instances?\r\n const m = transformNode as Mesh;\r\n if (m.hasThinInstances) {\r\n this._physicsPlugin.initBodyInstances(this, motionType, m);\r\n } else {\r\n // single instance\r\n if (transformNode.parent) {\r\n // Force computation of world matrix so that the parent transforms are correctly reflected in absolutePosition/absoluteRotationQuaternion.\r\n transformNode.computeWorldMatrix(true);\r\n }\r\n this._physicsPlugin.initBody(this, motionType, transformNode.absolutePosition, transformNode.absoluteRotationQuaternion);\r\n }\r\n this.transformNode = transformNode;\r\n transformNode.physicsBody = this;\r\n physicsEngine.addBody(this);\r\n\r\n this._nodeDisposeObserver = transformNode.onDisposeObservable.add(() => {\r\n this.dispose();\r\n });\r\n }\r\n\r\n /**\r\n * Returns the string \"PhysicsBody\".\r\n * @returns \"PhysicsBody\"\r\n */\r\n public getClassName() {\r\n return \"PhysicsBody\";\r\n }\r\n\r\n /**\r\n * Clone the PhysicsBody to a new body and assign it to the transformNode parameter\r\n * @param transformNode transformNode that will be used for the cloned PhysicsBody\r\n * @returns the newly cloned PhysicsBody\r\n */\r\n public clone(transformNode: TransformNode): PhysicsBody {\r\n const clonedBody = new PhysicsBody(transformNode, this.getMotionType(), this.startAsleep, this.transformNode.getScene());\r\n clonedBody.shape = this.shape;\r\n clonedBody.setMassProperties(this.getMassProperties());\r\n clonedBody.setLinearDamping(this.getLinearDamping());\r\n clonedBody.setAngularDamping(this.getAngularDamping());\r\n return clonedBody;\r\n }\r\n\r\n /**\r\n * If a physics body is connected to an instanced node, update the number physic instances to match the number of node instances.\r\n */\r\n public updateBodyInstances() {\r\n const m = this.transformNode as Mesh;\r\n if (m.hasThinInstances) {\r\n this._physicsPlugin.updateBodyInstances(this, m);\r\n }\r\n }\r\n\r\n /**\r\n * This returns the number of internal instances of the physics body\r\n */\r\n public get numInstances(): number {\r\n return this._pluginDataInstances.length;\r\n }\r\n\r\n /**\r\n * Sets the shape of the physics body.\r\n * @param shape - The shape of the physics body.\r\n *\r\n * This method is useful for setting the shape of the physics body, which is necessary for the physics engine to accurately simulate the body's behavior.\r\n * The shape is used to calculate the body's mass, inertia, and other properties.\r\n */\r\n public set shape(shape: Nullable<PhysicsShape>) {\r\n this._physicsPlugin.setShape(this, shape);\r\n }\r\n\r\n /**\r\n * Retrieves the physics shape associated with this object.\r\n *\r\n * @returns The physics shape associated with this object, or `undefined` if no\r\n * shape is associated.\r\n *\r\n * This method is useful for retrieving the physics shape associated with this object,\r\n * which can be used to apply physical forces to the object or to detect collisions.\r\n */\r\n public get shape(): Nullable<PhysicsShape> {\r\n return this._physicsPlugin.getShape(this);\r\n }\r\n\r\n /**\r\n * Sets the event mask for the physics engine.\r\n *\r\n * @param eventMask - A bitmask that determines which events will be sent to the physics engine.\r\n *\r\n * This method is useful for setting the event mask for the physics engine, which determines which events\r\n * will be sent to the physics engine. This allows the user to control which events the physics engine will respond to.\r\n */\r\n public setEventMask(eventMask: number, instanceIndex?: number) {\r\n this._physicsPlugin.setEventMask(this, eventMask, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the event mask of the physics engine.\r\n *\r\n * @returns The event mask of the physics engine.\r\n *\r\n * This method is useful for getting the event mask of the physics engine,\r\n * which is used to determine which events the engine will respond to.\r\n * This is important for ensuring that the engine is responding to the correct events and not\r\n * wasting resources on unnecessary events.\r\n */\r\n public getEventMask(instanceIndex?: number): number {\r\n return this._physicsPlugin.getEventMask(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Sets the motion type of the physics body. Can be STATIC, DYNAMIC, or ANIMATED.\r\n */\r\n public setMotionType(motionType: PhysicsMotionType, instanceIndex?: number) {\r\n this._physicsPlugin.setMotionType(this, motionType, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the motion type of the physics body. Can be STATIC, DYNAMIC, or ANIMATED.\r\n */\r\n public getMotionType(instanceIndex?: number): PhysicsMotionType {\r\n return this._physicsPlugin.getMotionType(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Computes the mass properties of the physics object, based on the set of physics shapes this body uses.\r\n * This method is useful for computing the initial mass properties of a physics object, such as its mass,\r\n * inertia, and center of mass; these values are important for accurately simulating the physics of the\r\n * object in the physics engine, and computing values based on the shape will provide you with reasonable\r\n * intial values, which you can then customize.\r\n */\r\n public computeMassProperties(instanceIndex?: number): PhysicsMassProperties {\r\n return this._physicsPlugin.computeMassProperties(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Sets the mass properties of the physics object.\r\n *\r\n * @param massProps - The mass properties to set.\r\n * @param instanceIndex - The index of the instance to set the mass properties for. If not defined, the mass properties will be set for all instances.\r\n *\r\n * This method is useful for setting the mass properties of a physics object, such as its mass,\r\n * inertia, and center of mass. This is important for accurately simulating the physics of the object in the physics engine.\r\n */\r\n public setMassProperties(massProps: PhysicsMassProperties, instanceIndex?: number): void {\r\n this._physicsPlugin.setMassProperties(this, massProps, instanceIndex);\r\n }\r\n\r\n /**\r\n * Retrieves the mass properties of the object.\r\n *\r\n * @returns The mass properties of the object.\r\n *\r\n * This method is useful for physics simulations, as it allows the user to\r\n * retrieve the mass properties of the object, such as its mass, center of mass,\r\n * and moment of inertia. This information is necessary for accurate physics\r\n * simulations.\r\n */\r\n public getMassProperties(instanceIndex?: number): PhysicsMassProperties {\r\n return this._physicsPlugin.getMassProperties(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Sets the linear damping of the physics body.\r\n *\r\n * @param damping - The linear damping value.\r\n *\r\n * This method is useful for controlling the linear damping of the physics body,\r\n * which is the rate at which the body's velocity decreases over time. This is useful for simulating\r\n * the effects of air resistance or other forms of friction.\r\n */\r\n public setLinearDamping(damping: number, instanceIndex?: number) {\r\n this._physicsPlugin.setLinearDamping(this, damping, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the linear damping of the physics body.\r\n * @returns The linear damping of the physics body.\r\n *\r\n * This method is useful for retrieving the linear damping of the physics body, which is the amount of\r\n * resistance the body has to linear motion. This is useful for simulating realistic physics behavior\r\n * in a game.\r\n */\r\n public getLinearDamping(instanceIndex?: number): number {\r\n return this._physicsPlugin.getLinearDamping(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Sets the angular damping of the physics body.\r\n * @param damping The angular damping of the body.\r\n *\r\n * This method is useful for controlling the angular velocity of a physics body.\r\n * By setting the damping, the body's angular velocity will be reduced over time, simulating the effect of friction.\r\n * This can be used to create realistic physical behavior in a physics engine.\r\n */\r\n public setAngularDamping(damping: number, instanceIndex?: number) {\r\n this._physicsPlugin.setAngularDamping(this, damping, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the angular damping of the physics body.\r\n *\r\n * @returns The angular damping of the physics body.\r\n *\r\n * This method is useful for getting the angular damping of the physics body,\r\n * which is the rate of reduction of the angular velocity over time.\r\n * This is important for simulating realistic physics behavior in a game.\r\n */\r\n public getAngularDamping(instanceIndex?: number): number {\r\n return this._physicsPlugin.getAngularDamping(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Sets the linear velocity of the physics object.\r\n * @param linVel - The linear velocity to set.\r\n *\r\n * This method is useful for setting the linear velocity of a physics object,\r\n * which is necessary for simulating realistic physics in a game engine.\r\n * By setting the linear velocity, the physics object will move in the direction and speed specified by the vector.\r\n * This allows for realistic physics simulations, such as simulating the motion of a ball rolling down a hill.\r\n */\r\n public setLinearVelocity(linVel: Vector3, instanceIndex?: number): void {\r\n this._physicsPlugin.setLinearVelocity(this, linVel, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the linear velocity of the physics body and stores it in the given vector3.\r\n * @param linVel - The vector3 to store the linear velocity in.\r\n *\r\n * This method is useful for getting the linear velocity of a physics body in a physics engine.\r\n * This can be used to determine the speed and direction of the body, which can be used to calculate the motion of the body.\r\n */\r\n public getLinearVelocityToRef(linVel: Vector3, instanceIndex?: number): void {\r\n return this._physicsPlugin.getLinearVelocityToRef(this, linVel, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the linear velocity of the physics body as a new vector3.\r\n * @returns The linear velocity of the physics body.\r\n *\r\n * This method is useful for getting the linear velocity of a physics body in a physics engine.\r\n * This can be used to determine the speed and direction of the body, which can be used to calculate the motion of the body.\r\n */\r\n public getLinearVelocity(instanceIndex?: number): Vector3 {\r\n const ref = new Vector3();\r\n this.getLinearVelocityToRef(ref, instanceIndex);\r\n return ref;\r\n }\r\n\r\n /**\r\n * Sets the angular velocity of the physics object.\r\n * @param angVel - The angular velocity to set.\r\n *\r\n * This method is useful for setting the angular velocity of a physics object, which is necessary for\r\n * simulating realistic physics behavior. The angular velocity is used to determine the rate of rotation of the object,\r\n * which is important for simulating realistic motion.\r\n */\r\n public setAngularVelocity(angVel: Vector3, instanceIndex?: number): void {\r\n this._physicsPlugin.setAngularVelocity(this, angVel, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the angular velocity of the physics body and stores it in the given vector3.\r\n * @param angVel - The vector3 to store the angular velocity in.\r\n *\r\n * This method is useful for getting the angular velocity of a physics body, which can be used to determine the body's\r\n * rotational speed. This information can be used to create realistic physics simulations.\r\n */\r\n public getAngularVelocityToRef(angVel: Vector3, instanceIndex?: number): void {\r\n return this._physicsPlugin.getAngularVelocityToRef(this, angVel, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the angular velocity of the physics body as a new vector3.\r\n * @returns The angular velocity of the physics body.\r\n *\r\n * This method is useful for getting the angular velocity of a physics body, which can be used to determine the body's\r\n * rotational speed. This information can be used to create realistic physics simulations.\r\n */\r\n public getAngularVelocity(instanceIndex?: number): Vector3 {\r\n const ref = new Vector3();\r\n this.getAngularVelocityToRef(ref, instanceIndex);\r\n return ref;\r\n }\r\n\r\n /**\r\n * Applies an impulse to the physics object.\r\n *\r\n * @param impulse The impulse vector.\r\n * @param location The location of the impulse.\r\n * @param instanceIndex For a instanced body, the instance to where the impulse should be applied. If not specified, the impulse is applied to all instances.\r\n *\r\n * This method is useful for applying an impulse to a physics object, which can be used to simulate physical forces such as gravity,\r\n * collisions, and explosions. This can be used to create realistic physics simulations in a game or other application.\r\n */\r\n public applyImpulse(impulse: Vector3, location: Vector3, instanceIndex?: number): void {\r\n this._physicsPlugin.applyImpulse(this, impulse, location, instanceIndex);\r\n }\r\n\r\n /**\r\n * Applies a force to the physics object.\r\n *\r\n * @param force The force vector.\r\n * @param location The location of the force.\r\n * @param instanceIndex For a instanced body, the instance to where the force should be applied. If not specified, the force is applied to all instances.\r\n *\r\n * This method is useful for applying a force to a physics object, which can be used to simulate physical forces such as gravity,\r\n * collisions, and explosions. This can be used to create realistic physics simulations in a game or other application.\r\n */\r\n public applyForce(force: Vector3, location: Vector3, instanceIndex?: number): void {\r\n this._physicsPlugin.applyForce(this, force, location, instanceIndex);\r\n }\r\n\r\n /**\r\n * Retrieves the geometry of the body from the physics plugin.\r\n *\r\n * @returns The geometry of the body.\r\n *\r\n * This method is useful for retrieving the geometry of the body from the physics plugin, which can be used for various physics calculations.\r\n */\r\n public getGeometry(): {} {\r\n return this._physicsPlugin.getBodyGeometry(this);\r\n }\r\n\r\n /**\r\n * Returns an observable that will be notified for when a collision starts or continues for this PhysicsBody\r\n * @returns Observable\r\n */\r\n public getCollisionObservable(): Observable<IPhysicsCollisionEvent> {\r\n return this._physicsPlugin.getCollisionObservable(this);\r\n }\r\n\r\n /**\r\n * Returns an observable that will be notified when the body has finished colliding with another body\r\n * @returns\r\n */\r\n public getCollisionEndedObservable(): Observable<IBasePhysicsCollisionEvent> {\r\n return this._physicsPlugin.getCollisionEndedObservable(this);\r\n }\r\n\r\n /**\r\n * Enable or disable collision callback for this PhysicsBody.\r\n * @param enabled true if PhysicsBody's collision will rise a collision event and notifies the observable\r\n */\r\n public setCollisionCallbackEnabled(enabled: boolean): void {\r\n this._collisionCBEnabled = enabled;\r\n this._physicsPlugin.setCollisionCallbackEnabled(this, enabled);\r\n }\r\n\r\n public setCollisionEndedCallbackEnabled(enabled: boolean): void {\r\n this._collisionEndedCBEnabled = enabled;\r\n this._physicsPlugin.setCollisionEndedCallbackEnabled(this, enabled);\r\n }\r\n\r\n /*\r\n * Get the center of the object in world space.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the center for.\r\n * @returns geometric center of the associated mesh\r\n */\r\n public getObjectCenterWorld(instanceIndex?: number): Vector3 {\r\n const ref = new Vector3();\r\n return this.getObjectCenterWorldToRef(ref, instanceIndex);\r\n }\r\n\r\n /*\r\n * Get the center of the object in world space.\r\n * @param ref - The vector3 to store the result in.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the center for.\r\n * @returns geometric center of the associated mesh\r\n */\r\n public getObjectCenterWorldToRef(ref: Vector3, instanceIndex?: number): Vector3 {\r\n if (this._pluginDataInstances?.length > 0) {\r\n const index = instanceIndex || 0;\r\n const matrixData = (this.transformNode as Mesh)._thinInstanceDataStorage.matrixData;\r\n if (matrixData) {\r\n ref.set(matrixData[index * 16 + 12], matrixData[index * 16 + 13], matrixData[index * 16 + 14]);\r\n }\r\n } else {\r\n ref.copyFrom(this.transformNode.position);\r\n }\r\n return ref;\r\n }\r\n\r\n /**\r\n * Adds a constraint to the physics engine.\r\n *\r\n * @param childBody - The body to which the constraint will be applied.\r\n * @param constraint - The constraint to be applied.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to which the constraint will be applied. If not specified, no constraint will be applied.\r\n * @param childInstanceIndex - If the child body is instanced, the index of the instance to which the constraint will be applied. If not specified, no constraint will be applied.\r\n *\r\n */\r\n public addConstraint(childBody: PhysicsBody, constraint: PhysicsConstraint, instanceIndex?: number, childInstanceIndex?: number): void {\r\n this._physicsPlugin.addConstraint(this, childBody, constraint, instanceIndex, childInstanceIndex);\r\n }\r\n\r\n /**\r\n * Sync with a bone\r\n * @param bone The bone that the impostor will be synced to.\r\n * @param boneMesh The mesh that the bone is influencing.\r\n * @param jointPivot The pivot of the joint / bone in local space.\r\n * @param distToJoint Optional distance from the impostor to the joint.\r\n * @param adjustRotation Optional quaternion for adjusting the local rotation of the bone.\r\n * @param boneAxis Optional vector3 axis the bone is aligned with\r\n */\r\n public syncWithBone(bone: Bone, boneMesh: AbstractMesh, jointPivot: Vector3, distToJoint?: number, adjustRotation?: Quaternion, boneAxis?: Vector3) {\r\n const mesh = this.transformNode;\r\n\r\n if (mesh.rotationQuaternion) {\r\n if (adjustRotation) {\r\n const tempQuat = TmpVectors.Quaternion[0];\r\n bone.getRotationQuaternionToRef(Space.WORLD, boneMesh, tempQuat);\r\n tempQuat.multiplyToRef(adjustRotation, mesh.rotationQuaternion);\r\n } else {\r\n bone.getRotationQuaternionToRef(Space.WORLD, boneMesh, mesh.rotationQuaternion);\r\n }\r\n }\r\n\r\n const pos = TmpVectors.Vector3[0];\r\n const boneDir = TmpVectors.Vector3[1];\r\n\r\n if (!boneAxis) {\r\n boneAxis = TmpVectors.Vector3[2];\r\n boneAxis.x = 0;\r\n boneAxis.y = 1;\r\n boneAxis.z = 0;\r\n }\r\n\r\n bone.getDirectionToRef(boneAxis, boneMesh, boneDir);\r\n bone.getAbsolutePositionToRef(boneMesh, pos);\r\n\r\n if ((distToJoint === undefined || distToJoint === null) && jointPivot) {\r\n distToJoint = jointPivot.length();\r\n }\r\n\r\n if (distToJoint !== undefined && distToJoint !== null) {\r\n pos.x += boneDir.x * distToJoint;\r\n pos.y += boneDir.y * distToJoint;\r\n pos.z += boneDir.z * distToJoint;\r\n }\r\n\r\n mesh.setAbsolutePosition(pos);\r\n }\r\n\r\n /**\r\n * Executes a callback on the body or all of the instances of a body\r\n * @param callback the callback to execute\r\n */\r\n public iterateOverAllInstances(callback: (body: PhysicsBody, instanceIndex?: number) => void) {\r\n if (this._pluginDataInstances?.length > 0) {\r\n for (let i = 0; i < this._pluginDataInstances.length; i++) {\r\n callback(this, i);\r\n }\r\n } else {\r\n callback(this, undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the gravity factor of the physics body\r\n * @param factor the gravity factor to set\r\n * @param instanceIndex the instance of the body to set, if undefined all instances will be set\r\n */\r\n public setGravityFactor(factor: number, instanceIndex?: number) {\r\n this._physicsPlugin.setGravityFactor(this, factor, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the gravity factor of the physics body\r\n * @param instanceIndex the instance of the body to get, if undefined the value of first instance will be returned\r\n * @returns the gravity factor\r\n */\r\n public getGravityFactor(instanceIndex?: number): number {\r\n return this._physicsPlugin.getGravityFactor(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Set the target transformation (position and rotation) of the body, such that the body will set its velocity to reach that target\r\n * @param position The target position\r\n * @param rotation The target rotation\r\n * @param instanceIndex The index of the instance in an instanced body\r\n */\r\n public setTargetTransform(position: Vector3, rotation: Quaternion, instanceIndex?: number) {\r\n this._physicsPlugin.setTargetTransform(this, position, rotation, instanceIndex);\r\n }\r\n\r\n /**\r\n * Returns if the body has been disposed.\r\n * @returns true if disposed, false otherwise.\r\n */\r\n public get isDisposed() {\r\n return this._isDisposed;\r\n }\r\n\r\n /**\r\n * Disposes the body from the physics engine.\r\n *\r\n * This method is useful for cleaning up the physics engine when a body is no longer needed. Disposing the body will free up resources and prevent memory leaks.\r\n */\r\n public dispose() {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n // Disable collisions CB so it doesn't fire when the body is disposed\r\n if (this._collisionCBEnabled) {\r\n this.setCollisionCallbackEnabled(false);\r\n }\r\n if (this._collisionEndedCBEnabled) {\r\n this.setCollisionEndedCallbackEnabled(false);\r\n }\r\n if (this._nodeDisposeObserver) {\r\n this.transformNode.onDisposeObservable.remove(this._nodeDisposeObserver);\r\n this._nodeDisposeObserver = null;\r\n }\r\n this._physicsEngine.removeBody(this);\r\n this._physicsPlugin.removeBody(this);\r\n this._physicsPlugin.disposeBody(this);\r\n this.transformNode.physicsBody = null;\r\n this._pluginData = null;\r\n this._pluginDataInstances.length = 0;\r\n this._isDisposed = true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"physicsBody.js","sourceRoot":"","sources":["../../../../../dev/core/src/Physics/v2/physicsBody.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IBasePhysicsCollisionEvent, IPhysicsCollisionEvent, IPhysicsEnginePluginV2, PhysicsMassProperties, PhysicsMotionType } from \"./IPhysicsEnginePlugin\";\r\nimport type { PhysicsShape } from \"./physicsShape\";\r\nimport { Vector3, Quaternion, TmpVectors } from \"../../Maths/math.vector\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { PhysicsEngine } from \"./physicsEngine\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { PhysicsConstraint } from \"./physicsConstraint\";\r\nimport type { Bone } from \"core/Bones/bone\";\r\nimport { Space } from \"core/Maths/math.axis\";\r\nimport type { Observable, Observer } from \"../../Misc/observable\";\r\nimport type { Node } from \"../../node\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { TransformNode } from \"../../Meshes/transformNode\";\r\n\r\n/**\r\n * PhysicsBody is useful for creating a physics body that can be used in a physics engine. It allows\r\n * the user to set the mass and velocity of the body, which can then be used to calculate the\r\n * motion of the body in the physics engine.\r\n */\r\nexport class PhysicsBody {\r\n /**\r\n * V2 Physics plugin private data for single Transform\r\n */\r\n public _pluginData: any = undefined;\r\n /**\r\n * V2 Physics plugin private data for instances\r\n */\r\n public _pluginDataInstances: Array<any> = [];\r\n /**\r\n * The V2 plugin used to create and manage this Physics Body\r\n */\r\n private _physicsPlugin: IPhysicsEnginePluginV2;\r\n /**\r\n * The engine used to create and manage this Physics Body\r\n */\r\n private _physicsEngine: PhysicsEngine;\r\n /**\r\n * If the collision callback is enabled\r\n */\r\n private _collisionCBEnabled: boolean = false;\r\n /**\r\n * If the collision ended callback is enabled\r\n */\r\n private _collisionEndedCBEnabled: boolean = false;\r\n /**\r\n * The transform node associated with this Physics Body\r\n */\r\n transformNode: TransformNode;\r\n /**\r\n * Disable pre-step that consists in updating Physics Body from Transform Node Translation/Orientation.\r\n * True by default for maximum performance.\r\n */\r\n disablePreStep: boolean = true;\r\n\r\n /**\r\n * Physics engine will try to make this body sleeping and not active\r\n */\r\n public startAsleep: boolean;\r\n\r\n private _nodeDisposeObserver: Nullable<Observer<Node>>;\r\n\r\n private _isDisposed = false;\r\n\r\n /**\r\n * Constructs a new physics body for the given node.\r\n * @param transformNode - The Transform Node to construct the physics body for. For better performance, it is advised that this node does not have a parent.\r\n * @param motionType - The motion type of the physics body. The options are:\r\n * - PhysicsMotionType.STATIC - Static bodies are not moving and unaffected by forces or collisions. They are good for level boundaries or terrain.\r\n * - PhysicsMotionType.DYNAMIC - Dynamic bodies are fully simulated. They can move and collide with other objects.\r\n * - PhysicsMotionType.ANIMATED - They behave like dynamic bodies, but they won't be affected by other bodies, but still push other bodies out of the way.\r\n * @param startsAsleep - Whether the physics body should start in a sleeping state (not a guarantee). Defaults to false.\r\n * @param scene - The scene containing the physics engine.\r\n *\r\n * This code is useful for creating a physics body for a given Transform Node in a scene.\r\n * It checks the version of the physics engine and the physics plugin, and initializes the body accordingly.\r\n * It also sets the node's rotation quaternion if it is not already set. Finally, it adds the body to the physics engine.\r\n */\r\n constructor(transformNode: TransformNode, motionType: PhysicsMotionType, startsAsleep: boolean, scene: Scene) {\r\n if (!scene) {\r\n return;\r\n }\r\n const physicsEngine = scene.getPhysicsEngine() as PhysicsEngine;\r\n if (!physicsEngine) {\r\n throw new Error(\"No Physics Engine available.\");\r\n }\r\n this._physicsEngine = physicsEngine;\r\n if (physicsEngine.getPluginVersion() != 2) {\r\n throw new Error(\"Plugin version is incorrect. Expected version 2.\");\r\n }\r\n const physicsPlugin = physicsEngine.getPhysicsPlugin();\r\n if (!physicsPlugin) {\r\n throw new Error(\"No Physics Plugin available.\");\r\n }\r\n\r\n this._physicsPlugin = physicsPlugin as IPhysicsEnginePluginV2;\r\n if (!transformNode.rotationQuaternion) {\r\n transformNode.rotationQuaternion = Quaternion.FromEulerAngles(transformNode.rotation.x, transformNode.rotation.y, transformNode.rotation.z);\r\n }\r\n\r\n this.startAsleep = startsAsleep;\r\n\r\n // instances?\r\n const m = transformNode as Mesh;\r\n if (m.hasThinInstances) {\r\n this._physicsPlugin.initBodyInstances(this, motionType, m);\r\n } else {\r\n // single instance\r\n if (transformNode.parent) {\r\n // Force computation of world matrix so that the parent transforms are correctly reflected in absolutePosition/absoluteRotationQuaternion.\r\n transformNode.computeWorldMatrix(true);\r\n }\r\n this._physicsPlugin.initBody(this, motionType, transformNode.absolutePosition, transformNode.absoluteRotationQuaternion);\r\n }\r\n this.transformNode = transformNode;\r\n transformNode.physicsBody = this;\r\n physicsEngine.addBody(this);\r\n\r\n this._nodeDisposeObserver = transformNode.onDisposeObservable.add(() => {\r\n this.dispose();\r\n });\r\n }\r\n\r\n /**\r\n * Returns the string \"PhysicsBody\".\r\n * @returns \"PhysicsBody\"\r\n */\r\n public getClassName() {\r\n return \"PhysicsBody\";\r\n }\r\n\r\n /**\r\n * Clone the PhysicsBody to a new body and assign it to the transformNode parameter\r\n * @param transformNode transformNode that will be used for the cloned PhysicsBody\r\n * @returns the newly cloned PhysicsBody\r\n */\r\n public clone(transformNode: TransformNode): PhysicsBody {\r\n const clonedBody = new PhysicsBody(transformNode, this.getMotionType(), this.startAsleep, this.transformNode.getScene());\r\n clonedBody.shape = this.shape;\r\n clonedBody.setMassProperties(this.getMassProperties());\r\n clonedBody.setLinearDamping(this.getLinearDamping());\r\n clonedBody.setAngularDamping(this.getAngularDamping());\r\n return clonedBody;\r\n }\r\n\r\n /**\r\n * If a physics body is connected to an instanced node, update the number physic instances to match the number of node instances.\r\n */\r\n public updateBodyInstances() {\r\n const m = this.transformNode as Mesh;\r\n if (m.hasThinInstances) {\r\n this._physicsPlugin.updateBodyInstances(this, m);\r\n }\r\n }\r\n\r\n /**\r\n * This returns the number of internal instances of the physics body\r\n */\r\n public get numInstances(): number {\r\n return this._pluginDataInstances.length;\r\n }\r\n\r\n /**\r\n * Sets the shape of the physics body.\r\n * @param shape - The shape of the physics body.\r\n *\r\n * This method is useful for setting the shape of the physics body, which is necessary for the physics engine to accurately simulate the body's behavior.\r\n * The shape is used to calculate the body's mass, inertia, and other properties.\r\n */\r\n public set shape(shape: Nullable<PhysicsShape>) {\r\n this._physicsPlugin.setShape(this, shape);\r\n }\r\n\r\n /**\r\n * Retrieves the physics shape associated with this object.\r\n *\r\n * @returns The physics shape associated with this object, or `undefined` if no\r\n * shape is associated.\r\n *\r\n * This method is useful for retrieving the physics shape associated with this object,\r\n * which can be used to apply physical forces to the object or to detect collisions.\r\n */\r\n public get shape(): Nullable<PhysicsShape> {\r\n return this._physicsPlugin.getShape(this);\r\n }\r\n\r\n /**\r\n * Sets the event mask for the physics engine.\r\n *\r\n * @param eventMask - A bitmask that determines which events will be sent to the physics engine.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to set the event mask for.\r\n *\r\n * This method is useful for setting the event mask for the physics engine, which determines which events\r\n * will be sent to the physics engine. This allows the user to control which events the physics engine will respond to.\r\n */\r\n public setEventMask(eventMask: number, instanceIndex?: number) {\r\n this._physicsPlugin.setEventMask(this, eventMask, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the event mask of the physics engine.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the event mask for.\r\n * @returns The event mask of the physics engine.\r\n *\r\n * This method is useful for getting the event mask of the physics engine,\r\n * which is used to determine which events the engine will respond to.\r\n * This is important for ensuring that the engine is responding to the correct events and not\r\n * wasting resources on unnecessary events.\r\n */\r\n public getEventMask(instanceIndex?: number): number {\r\n return this._physicsPlugin.getEventMask(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Sets the motion type of the physics body. Can be STATIC, DYNAMIC, or ANIMATED.\r\n * @param motionType - The motion type to set.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to set the motion type for.\r\n */\r\n public setMotionType(motionType: PhysicsMotionType, instanceIndex?: number) {\r\n this._physicsPlugin.setMotionType(this, motionType, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the motion type of the physics body. Can be STATIC, DYNAMIC, or ANIMATED.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the motion type for.\r\n */\r\n public getMotionType(instanceIndex?: number): PhysicsMotionType {\r\n return this._physicsPlugin.getMotionType(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Computes the mass properties of the physics object, based on the set of physics shapes this body uses.\r\n * This method is useful for computing the initial mass properties of a physics object, such as its mass,\r\n * inertia, and center of mass; these values are important for accurately simulating the physics of the\r\n * object in the physics engine, and computing values based on the shape will provide you with reasonable\r\n * initial values, which you can then customize.\r\n * @param instanceIndex - The index of the instance to compute the mass properties for.\r\n */\r\n public computeMassProperties(instanceIndex?: number): PhysicsMassProperties {\r\n return this._physicsPlugin.computeMassProperties(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Sets the mass properties of the physics object.\r\n *\r\n * @param massProps - The mass properties to set.\r\n * @param instanceIndex - The index of the instance to set the mass properties for. If not defined, the mass properties will be set for all instances.\r\n *\r\n * This method is useful for setting the mass properties of a physics object, such as its mass,\r\n * inertia, and center of mass. This is important for accurately simulating the physics of the object in the physics engine.\r\n */\r\n public setMassProperties(massProps: PhysicsMassProperties, instanceIndex?: number): void {\r\n this._physicsPlugin.setMassProperties(this, massProps, instanceIndex);\r\n }\r\n\r\n /**\r\n * Retrieves the mass properties of the object.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the mass properties for.\r\n * @returns The mass properties of the object.\r\n *\r\n * This method is useful for physics simulations, as it allows the user to\r\n * retrieve the mass properties of the object, such as its mass, center of mass,\r\n * and moment of inertia. This information is necessary for accurate physics\r\n * simulations.\r\n */\r\n public getMassProperties(instanceIndex?: number): PhysicsMassProperties {\r\n return this._physicsPlugin.getMassProperties(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Sets the linear damping of the physics body.\r\n *\r\n * @param damping - The linear damping value.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to set the linear damping for.\r\n *\r\n * This method is useful for controlling the linear damping of the physics body,\r\n * which is the rate at which the body's velocity decreases over time. This is useful for simulating\r\n * the effects of air resistance or other forms of friction.\r\n */\r\n public setLinearDamping(damping: number, instanceIndex?: number) {\r\n this._physicsPlugin.setLinearDamping(this, damping, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the linear damping of the physics body.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the linear damping for.\r\n * @returns The linear damping of the physics body.\r\n *\r\n * This method is useful for retrieving the linear damping of the physics body, which is the amount of\r\n * resistance the body has to linear motion. This is useful for simulating realistic physics behavior\r\n * in a game.\r\n */\r\n public getLinearDamping(instanceIndex?: number): number {\r\n return this._physicsPlugin.getLinearDamping(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Sets the angular damping of the physics body.\r\n * @param damping The angular damping of the body.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to set the angular damping for.\r\n *\r\n * This method is useful for controlling the angular velocity of a physics body.\r\n * By setting the damping, the body's angular velocity will be reduced over time, simulating the effect of friction.\r\n * This can be used to create realistic physical behavior in a physics engine.\r\n */\r\n public setAngularDamping(damping: number, instanceIndex?: number) {\r\n this._physicsPlugin.setAngularDamping(this, damping, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the angular damping of the physics body.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the angular damping for.\r\n *\r\n * @returns The angular damping of the physics body.\r\n *\r\n * This method is useful for getting the angular damping of the physics body,\r\n * which is the rate of reduction of the angular velocity over time.\r\n * This is important for simulating realistic physics behavior in a game.\r\n */\r\n public getAngularDamping(instanceIndex?: number): number {\r\n return this._physicsPlugin.getAngularDamping(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Sets the linear velocity of the physics object.\r\n * @param linVel - The linear velocity to set.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to set the linear velocity for.\r\n *\r\n * This method is useful for setting the linear velocity of a physics object,\r\n * which is necessary for simulating realistic physics in a game engine.\r\n * By setting the linear velocity, the physics object will move in the direction and speed specified by the vector.\r\n * This allows for realistic physics simulations, such as simulating the motion of a ball rolling down a hill.\r\n */\r\n public setLinearVelocity(linVel: Vector3, instanceIndex?: number): void {\r\n this._physicsPlugin.setLinearVelocity(this, linVel, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the linear velocity of the physics body and stores it in the given vector3.\r\n * @param linVel - The vector3 to store the linear velocity in.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the linear velocity for.\r\n *\r\n * This method is useful for getting the linear velocity of a physics body in a physics engine.\r\n * This can be used to determine the speed and direction of the body, which can be used to calculate the motion of the body.\r\n */\r\n public getLinearVelocityToRef(linVel: Vector3, instanceIndex?: number): void {\r\n return this._physicsPlugin.getLinearVelocityToRef(this, linVel, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the linear velocity of the physics body as a new vector3.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the linear velocity for.\r\n * @returns The linear velocity of the physics body.\r\n *\r\n * This method is useful for getting the linear velocity of a physics body in a physics engine.\r\n * This can be used to determine the speed and direction of the body, which can be used to calculate the motion of the body.\r\n */\r\n public getLinearVelocity(instanceIndex?: number): Vector3 {\r\n const ref = new Vector3();\r\n this.getLinearVelocityToRef(ref, instanceIndex);\r\n return ref;\r\n }\r\n\r\n /**\r\n * Sets the angular velocity of the physics object.\r\n * @param angVel - The angular velocity to set.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to set the angular velocity for.\r\n *\r\n * This method is useful for setting the angular velocity of a physics object, which is necessary for\r\n * simulating realistic physics behavior. The angular velocity is used to determine the rate of rotation of the object,\r\n * which is important for simulating realistic motion.\r\n */\r\n public setAngularVelocity(angVel: Vector3, instanceIndex?: number): void {\r\n this._physicsPlugin.setAngularVelocity(this, angVel, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the angular velocity of the physics body and stores it in the given vector3.\r\n * @param angVel - The vector3 to store the angular velocity in.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the angular velocity for.\r\n *\r\n * This method is useful for getting the angular velocity of a physics body, which can be used to determine the body's\r\n * rotational speed. This information can be used to create realistic physics simulations.\r\n */\r\n public getAngularVelocityToRef(angVel: Vector3, instanceIndex?: number): void {\r\n return this._physicsPlugin.getAngularVelocityToRef(this, angVel, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the angular velocity of the physics body as a new vector3.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the angular velocity for.\r\n * @returns The angular velocity of the physics body.\r\n *\r\n * This method is useful for getting the angular velocity of a physics body, which can be used to determine the body's\r\n * rotational speed. This information can be used to create realistic physics simulations.\r\n */\r\n public getAngularVelocity(instanceIndex?: number): Vector3 {\r\n const ref = new Vector3();\r\n this.getAngularVelocityToRef(ref, instanceIndex);\r\n return ref;\r\n }\r\n\r\n /**\r\n * Applies an impulse to the physics object.\r\n *\r\n * @param impulse The impulse vector.\r\n * @param location The location of the impulse.\r\n * @param instanceIndex For a instanced body, the instance to where the impulse should be applied. If not specified, the impulse is applied to all instances.\r\n *\r\n * This method is useful for applying an impulse to a physics object, which can be used to simulate physical forces such as gravity,\r\n * collisions, and explosions. This can be used to create realistic physics simulations in a game or other application.\r\n */\r\n public applyImpulse(impulse: Vector3, location: Vector3, instanceIndex?: number): void {\r\n this._physicsPlugin.applyImpulse(this, impulse, location, instanceIndex);\r\n }\r\n\r\n /**\r\n * Applies a force to the physics object.\r\n *\r\n * @param force The force vector.\r\n * @param location The location of the force.\r\n * @param instanceIndex For a instanced body, the instance to where the force should be applied. If not specified, the force is applied to all instances.\r\n *\r\n * This method is useful for applying a force to a physics object, which can be used to simulate physical forces such as gravity,\r\n * collisions, and explosions. This can be used to create realistic physics simulations in a game or other application.\r\n */\r\n public applyForce(force: Vector3, location: Vector3, instanceIndex?: number): void {\r\n this._physicsPlugin.applyForce(this, force, location, instanceIndex);\r\n }\r\n\r\n /**\r\n * Retrieves the geometry of the body from the physics plugin.\r\n *\r\n * @returns The geometry of the body.\r\n *\r\n * This method is useful for retrieving the geometry of the body from the physics plugin, which can be used for various physics calculations.\r\n */\r\n public getGeometry(): {} {\r\n return this._physicsPlugin.getBodyGeometry(this);\r\n }\r\n\r\n /**\r\n * Returns an observable that will be notified for when a collision starts or continues for this PhysicsBody\r\n * @returns Observable\r\n */\r\n public getCollisionObservable(): Observable<IPhysicsCollisionEvent> {\r\n return this._physicsPlugin.getCollisionObservable(this);\r\n }\r\n\r\n /**\r\n * Returns an observable that will be notified when the body has finished colliding with another body\r\n * @returns\r\n */\r\n public getCollisionEndedObservable(): Observable<IBasePhysicsCollisionEvent> {\r\n return this._physicsPlugin.getCollisionEndedObservable(this);\r\n }\r\n\r\n /**\r\n * Enable or disable collision callback for this PhysicsBody.\r\n * @param enabled true if PhysicsBody's collision will rise a collision event and notifies the observable\r\n */\r\n public setCollisionCallbackEnabled(enabled: boolean): void {\r\n this._collisionCBEnabled = enabled;\r\n this._physicsPlugin.setCollisionCallbackEnabled(this, enabled);\r\n }\r\n\r\n /**\r\n * Enable or disable collision ended callback for this PhysicsBody.\r\n * @param enabled true if PhysicsBody's collision ended will rise a collision event and notifies the observable\r\n */\r\n public setCollisionEndedCallbackEnabled(enabled: boolean): void {\r\n this._collisionEndedCBEnabled = enabled;\r\n this._physicsPlugin.setCollisionEndedCallbackEnabled(this, enabled);\r\n }\r\n\r\n /**\r\n * Get the center of the object in world space.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the center for.\r\n * @returns geometric center of the associated mesh\r\n */\r\n public getObjectCenterWorld(instanceIndex?: number): Vector3 {\r\n const ref = new Vector3();\r\n return this.getObjectCenterWorldToRef(ref, instanceIndex);\r\n }\r\n\r\n /**\r\n * Get the center of the object in world space.\r\n * @param ref - The vector3 to store the result in.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to get the center for.\r\n * @returns geometric center of the associated mesh\r\n */\r\n public getObjectCenterWorldToRef(ref: Vector3, instanceIndex?: number): Vector3 {\r\n if (this._pluginDataInstances?.length > 0) {\r\n const index = instanceIndex || 0;\r\n const matrixData = (this.transformNode as Mesh)._thinInstanceDataStorage.matrixData;\r\n if (matrixData) {\r\n ref.set(matrixData[index * 16 + 12], matrixData[index * 16 + 13], matrixData[index * 16 + 14]);\r\n }\r\n } else {\r\n ref.copyFrom(this.transformNode.position);\r\n }\r\n return ref;\r\n }\r\n\r\n /**\r\n * Adds a constraint to the physics engine.\r\n *\r\n * @param childBody - The body to which the constraint will be applied.\r\n * @param constraint - The constraint to be applied.\r\n * @param instanceIndex - If this body is instanced, the index of the instance to which the constraint will be applied. If not specified, no constraint will be applied.\r\n * @param childInstanceIndex - If the child body is instanced, the index of the instance to which the constraint will be applied. If not specified, no constraint will be applied.\r\n *\r\n */\r\n public addConstraint(childBody: PhysicsBody, constraint: PhysicsConstraint, instanceIndex?: number, childInstanceIndex?: number): void {\r\n this._physicsPlugin.addConstraint(this, childBody, constraint, instanceIndex, childInstanceIndex);\r\n }\r\n\r\n /**\r\n * Sync with a bone\r\n * @param bone The bone that the impostor will be synced to.\r\n * @param boneMesh The mesh that the bone is influencing.\r\n * @param jointPivot The pivot of the joint / bone in local space.\r\n * @param distToJoint Optional distance from the impostor to the joint.\r\n * @param adjustRotation Optional quaternion for adjusting the local rotation of the bone.\r\n * @param boneAxis Optional vector3 axis the bone is aligned with\r\n */\r\n public syncWithBone(bone: Bone, boneMesh: AbstractMesh, jointPivot: Vector3, distToJoint?: number, adjustRotation?: Quaternion, boneAxis?: Vector3) {\r\n const mesh = this.transformNode;\r\n\r\n if (mesh.rotationQuaternion) {\r\n if (adjustRotation) {\r\n const tempQuat = TmpVectors.Quaternion[0];\r\n bone.getRotationQuaternionToRef(Space.WORLD, boneMesh, tempQuat);\r\n tempQuat.multiplyToRef(adjustRotation, mesh.rotationQuaternion);\r\n } else {\r\n bone.getRotationQuaternionToRef(Space.WORLD, boneMesh, mesh.rotationQuaternion);\r\n }\r\n }\r\n\r\n const pos = TmpVectors.Vector3[0];\r\n const boneDir = TmpVectors.Vector3[1];\r\n\r\n if (!boneAxis) {\r\n boneAxis = TmpVectors.Vector3[2];\r\n boneAxis.x = 0;\r\n boneAxis.y = 1;\r\n boneAxis.z = 0;\r\n }\r\n\r\n bone.getDirectionToRef(boneAxis, boneMesh, boneDir);\r\n bone.getAbsolutePositionToRef(boneMesh, pos);\r\n\r\n if ((distToJoint === undefined || distToJoint === null) && jointPivot) {\r\n distToJoint = jointPivot.length();\r\n }\r\n\r\n if (distToJoint !== undefined && distToJoint !== null) {\r\n pos.x += boneDir.x * distToJoint;\r\n pos.y += boneDir.y * distToJoint;\r\n pos.z += boneDir.z * distToJoint;\r\n }\r\n\r\n mesh.setAbsolutePosition(pos);\r\n }\r\n\r\n /**\r\n * Executes a callback on the body or all of the instances of a body\r\n * @param callback the callback to execute\r\n */\r\n public iterateOverAllInstances(callback: (body: PhysicsBody, instanceIndex?: number) => void) {\r\n if (this._pluginDataInstances?.length > 0) {\r\n for (let i = 0; i < this._pluginDataInstances.length; i++) {\r\n callback(this, i);\r\n }\r\n } else {\r\n callback(this, undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the gravity factor of the physics body\r\n * @param factor the gravity factor to set\r\n * @param instanceIndex the instance of the body to set, if undefined all instances will be set\r\n */\r\n public setGravityFactor(factor: number, instanceIndex?: number) {\r\n this._physicsPlugin.setGravityFactor(this, factor, instanceIndex);\r\n }\r\n\r\n /**\r\n * Gets the gravity factor of the physics body\r\n * @param instanceIndex the instance of the body to get, if undefined the value of first instance will be returned\r\n * @returns the gravity factor\r\n */\r\n public getGravityFactor(instanceIndex?: number): number {\r\n return this._physicsPlugin.getGravityFactor(this, instanceIndex);\r\n }\r\n\r\n /**\r\n * Set the target transformation (position and rotation) of the body, such that the body will set its velocity to reach that target\r\n * @param position The target position\r\n * @param rotation The target rotation\r\n * @param instanceIndex The index of the instance in an instanced body\r\n */\r\n public setTargetTransform(position: Vector3, rotation: Quaternion, instanceIndex?: number) {\r\n this._physicsPlugin.setTargetTransform(this, position, rotation, instanceIndex);\r\n }\r\n\r\n /**\r\n * Returns if the body has been disposed.\r\n * @returns true if disposed, false otherwise.\r\n */\r\n public get isDisposed() {\r\n return this._isDisposed;\r\n }\r\n\r\n /**\r\n * Disposes the body from the physics engine.\r\n *\r\n * This method is useful for cleaning up the physics engine when a body is no longer needed. Disposing the body will free up resources and prevent memory leaks.\r\n */\r\n public dispose() {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n // Disable collisions CB so it doesn't fire when the body is disposed\r\n if (this._collisionCBEnabled) {\r\n this.setCollisionCallbackEnabled(false);\r\n }\r\n if (this._collisionEndedCBEnabled) {\r\n this.setCollisionEndedCallbackEnabled(false);\r\n }\r\n if (this._nodeDisposeObserver) {\r\n this.transformNode.onDisposeObservable.remove(this._nodeDisposeObserver);\r\n this._nodeDisposeObserver = null;\r\n }\r\n this._physicsEngine.removeBody(this);\r\n this._physicsPlugin.removeBody(this);\r\n this._physicsPlugin.disposeBody(this);\r\n this.transformNode.physicsBody = null;\r\n this._pluginData = null;\r\n this._pluginDataInstances.length = 0;\r\n this._isDisposed = true;\r\n }\r\n}\r\n"]}
@@ -85,11 +85,12 @@ export declare class PhysicsEngine implements IPhysicsEngine {
85
85
  _step(delta: number): void;
86
86
  /**
87
87
  * Add a body as an active component of this engine
88
- * @param body
88
+ * @param physicsBody The body to add
89
89
  */
90
90
  addBody(physicsBody: PhysicsBody): void;
91
91
  /**
92
92
  * Removes a particular body from this engine
93
+ * @param physicsBody The body to remove from the simulation
93
94
  */
94
95
  removeBody(physicsBody: PhysicsBody): void;
95
96
  /**
@@ -107,12 +108,14 @@ export declare class PhysicsEngine implements IPhysicsEngine {
107
108
  * @param from when should the ray start?
108
109
  * @param to when should the ray end?
109
110
  * @param result resulting PhysicsRaycastResult
111
+ * @param query raycast query object
110
112
  */
111
113
  raycastToRef(from: Vector3, to: Vector3, result: PhysicsRaycastResult, query?: IRaycastQuery): void;
112
114
  /**
113
115
  * Does a raycast in the physics world
114
116
  * @param from when should the ray start?
115
117
  * @param to when should the ray end?
118
+ * @param query raycast query object
116
119
  * @returns PhysicsRaycastResult
117
120
  */
118
121
  raycast(from: Vector3, to: Vector3, query?: IRaycastQuery): PhysicsRaycastResult;
@@ -108,13 +108,14 @@ export class PhysicsEngine {
108
108
  }
109
109
  /**
110
110
  * Add a body as an active component of this engine
111
- * @param body
111
+ * @param physicsBody The body to add
112
112
  */
113
113
  addBody(physicsBody) {
114
114
  this._physicsBodies.push(physicsBody);
115
115
  }
116
116
  /**
117
117
  * Removes a particular body from this engine
118
+ * @param physicsBody The body to remove from the simulation
118
119
  */
119
120
  removeBody(physicsBody) {
120
121
  const index = this._physicsBodies.indexOf(physicsBody);
@@ -141,6 +142,7 @@ export class PhysicsEngine {
141
142
  * @param from when should the ray start?
142
143
  * @param to when should the ray end?
143
144
  * @param result resulting PhysicsRaycastResult
145
+ * @param query raycast query object
144
146
  */
145
147
  raycastToRef(from, to, result, query) {
146
148
  this._physicsPlugin.raycast(from, to, result, query);
@@ -149,6 +151,7 @@ export class PhysicsEngine {
149
151
  * Does a raycast in the physics world
150
152
  * @param from when should the ray start?
151
153
  * @param to when should the ray end?
154
+ * @param query raycast query object
152
155
  * @returns PhysicsRaycastResult
153
156
  */
154
157
  raycast(from, to, query) {
@@ -1 +1 @@
1
- {"version":3,"file":"physicsEngine.js","sourceRoot":"","sources":["../../../../../dev/core/src/Physics/v2/physicsEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport type { IPhysicsEngine } from \"../IPhysicsEngine\";\r\nimport type { IPhysicsEnginePluginV2 } from \"./IPhysicsEnginePlugin\";\r\nimport type { IRaycastQuery } from \"../physicsRaycastResult\";\r\nimport { PhysicsRaycastResult } from \"../physicsRaycastResult\";\r\nimport { _WarnImport } from \"../../Misc/devTools\";\r\nimport type { PhysicsBody } from \"./physicsBody\";\r\n\r\n/**\r\n * Class used to control physics engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/physics/usingPhysicsEngine\r\n */\r\nexport class PhysicsEngine implements IPhysicsEngine {\r\n /** @internal */\r\n private _physicsBodies: Array<PhysicsBody> = [];\r\n private _subTimeStep: number = 0;\r\n\r\n /**\r\n * Gets the gravity vector used by the simulation\r\n */\r\n public gravity: Vector3;\r\n\r\n /**\r\n *\r\n * @returns physics plugin version\r\n */\r\n public getPluginVersion(): number {\r\n return this._physicsPlugin.getPluginVersion();\r\n }\r\n /**\r\n * Factory used to create the default physics plugin.\r\n * @returns The default physics plugin\r\n */\r\n public static DefaultPluginFactory(): IPhysicsEnginePluginV2 {\r\n throw _WarnImport(\"\");\r\n }\r\n\r\n /**\r\n * Creates a new Physics Engine\r\n * @param gravity defines the gravity vector used by the simulation\r\n * @param _physicsPlugin defines the plugin to use (CannonJS by default)\r\n */\r\n constructor(\r\n gravity: Nullable<Vector3>,\r\n private _physicsPlugin: IPhysicsEnginePluginV2 = PhysicsEngine.DefaultPluginFactory()\r\n ) {\r\n gravity = gravity || new Vector3(0, -9.807, 0);\r\n this.setGravity(gravity);\r\n this.setTimeStep();\r\n }\r\n\r\n /**\r\n * Sets the gravity vector used by the simulation\r\n * @param gravity defines the gravity vector to use\r\n */\r\n public setGravity(gravity: Vector3): void {\r\n this.gravity = gravity;\r\n this._physicsPlugin.setGravity(this.gravity);\r\n }\r\n\r\n /**\r\n * Set the time step of the physics engine.\r\n * Default is 1/60.\r\n * To slow it down, enter 1/600 for example.\r\n * To speed it up, 1/30\r\n * @param newTimeStep defines the new timestep to apply to this world.\r\n */\r\n public setTimeStep(newTimeStep: number = 1 / 60) {\r\n this._physicsPlugin.setTimeStep(newTimeStep);\r\n }\r\n\r\n /**\r\n * Get the time step of the physics engine.\r\n * @returns the current time step\r\n */\r\n public getTimeStep(): number {\r\n return this._physicsPlugin.getTimeStep();\r\n }\r\n\r\n /**\r\n * Set the sub time step of the physics engine.\r\n * Default is 0 meaning there is no sub steps\r\n * To increase physics resolution precision, set a small value (like 1 ms)\r\n * @param subTimeStep defines the new sub timestep used for physics resolution.\r\n */\r\n public setSubTimeStep(subTimeStep: number = 0) {\r\n this._subTimeStep = subTimeStep;\r\n }\r\n\r\n /**\r\n * Get the sub time step of the physics engine.\r\n * @returns the current sub time step\r\n */\r\n public getSubTimeStep() {\r\n return this._subTimeStep;\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose(): void {\r\n this._physicsPlugin.dispose();\r\n }\r\n\r\n /**\r\n * Gets the name of the current physics plugin\r\n * @returns the name of the plugin\r\n */\r\n public getPhysicsPluginName(): string {\r\n return this._physicsPlugin.name;\r\n }\r\n\r\n /**\r\n * Adding a new impostor for the impostor tracking.\r\n * This will be done by the impostor itself.\r\n * @param impostor the impostor to add\r\n */\r\n\r\n /**\r\n * Called by the scene. No need to call it.\r\n * @param delta defines the timespan between frames\r\n */\r\n public _step(delta: number) {\r\n if (delta > 0.1) {\r\n delta = 0.1;\r\n } else if (delta <= 0) {\r\n delta = 1.0 / 60.0;\r\n }\r\n\r\n this._physicsPlugin.executeStep(delta, this._physicsBodies);\r\n }\r\n\r\n /**\r\n * Add a body as an active component of this engine\r\n * @param body\r\n */\r\n public addBody(physicsBody: PhysicsBody): void {\r\n this._physicsBodies.push(physicsBody);\r\n }\r\n /**\r\n * Removes a particular body from this engine\r\n */\r\n public removeBody(physicsBody: PhysicsBody): void {\r\n const index = this._physicsBodies.indexOf(physicsBody);\r\n if (index > -1) {\r\n /*const removed =*/ this._physicsBodies.splice(index, 1);\r\n }\r\n }\r\n /**\r\n * Returns an array of bodies added to this engine\r\n\r\n */\r\n public getBodies(): Array<PhysicsBody> {\r\n return this._physicsBodies;\r\n }\r\n\r\n /**\r\n * Gets the current plugin used to run the simulation\r\n * @returns current plugin\r\n */\r\n public getPhysicsPlugin(): IPhysicsEnginePluginV2 {\r\n return this._physicsPlugin;\r\n }\r\n\r\n /**\r\n * Does a raycast in the physics world\r\n * @param from when should the ray start?\r\n * @param to when should the ray end?\r\n * @param result resulting PhysicsRaycastResult\r\n */\r\n public raycastToRef(from: Vector3, to: Vector3, result: PhysicsRaycastResult, query?: IRaycastQuery): void {\r\n this._physicsPlugin.raycast(from, to, result, query);\r\n }\r\n\r\n /**\r\n * Does a raycast in the physics world\r\n * @param from when should the ray start?\r\n * @param to when should the ray end?\r\n * @returns PhysicsRaycastResult\r\n */\r\n public raycast(from: Vector3, to: Vector3, query?: IRaycastQuery): PhysicsRaycastResult {\r\n const result = new PhysicsRaycastResult();\r\n this._physicsPlugin.raycast(from, to, result, query);\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"physicsEngine.js","sourceRoot":"","sources":["../../../../../dev/core/src/Physics/v2/physicsEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport type { IPhysicsEngine } from \"../IPhysicsEngine\";\r\nimport type { IPhysicsEnginePluginV2 } from \"./IPhysicsEnginePlugin\";\r\nimport type { IRaycastQuery } from \"../physicsRaycastResult\";\r\nimport { PhysicsRaycastResult } from \"../physicsRaycastResult\";\r\nimport { _WarnImport } from \"../../Misc/devTools\";\r\nimport type { PhysicsBody } from \"./physicsBody\";\r\n\r\n/**\r\n * Class used to control physics engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/physics/usingPhysicsEngine\r\n */\r\nexport class PhysicsEngine implements IPhysicsEngine {\r\n /** @internal */\r\n private _physicsBodies: Array<PhysicsBody> = [];\r\n private _subTimeStep: number = 0;\r\n\r\n /**\r\n * Gets the gravity vector used by the simulation\r\n */\r\n public gravity: Vector3;\r\n\r\n /**\r\n *\r\n * @returns physics plugin version\r\n */\r\n public getPluginVersion(): number {\r\n return this._physicsPlugin.getPluginVersion();\r\n }\r\n /**\r\n * Factory used to create the default physics plugin.\r\n * @returns The default physics plugin\r\n */\r\n public static DefaultPluginFactory(): IPhysicsEnginePluginV2 {\r\n throw _WarnImport(\"\");\r\n }\r\n\r\n /**\r\n * Creates a new Physics Engine\r\n * @param gravity defines the gravity vector used by the simulation\r\n * @param _physicsPlugin defines the plugin to use (CannonJS by default)\r\n */\r\n constructor(\r\n gravity: Nullable<Vector3>,\r\n private _physicsPlugin: IPhysicsEnginePluginV2 = PhysicsEngine.DefaultPluginFactory()\r\n ) {\r\n gravity = gravity || new Vector3(0, -9.807, 0);\r\n this.setGravity(gravity);\r\n this.setTimeStep();\r\n }\r\n\r\n /**\r\n * Sets the gravity vector used by the simulation\r\n * @param gravity defines the gravity vector to use\r\n */\r\n public setGravity(gravity: Vector3): void {\r\n this.gravity = gravity;\r\n this._physicsPlugin.setGravity(this.gravity);\r\n }\r\n\r\n /**\r\n * Set the time step of the physics engine.\r\n * Default is 1/60.\r\n * To slow it down, enter 1/600 for example.\r\n * To speed it up, 1/30\r\n * @param newTimeStep defines the new timestep to apply to this world.\r\n */\r\n public setTimeStep(newTimeStep: number = 1 / 60) {\r\n this._physicsPlugin.setTimeStep(newTimeStep);\r\n }\r\n\r\n /**\r\n * Get the time step of the physics engine.\r\n * @returns the current time step\r\n */\r\n public getTimeStep(): number {\r\n return this._physicsPlugin.getTimeStep();\r\n }\r\n\r\n /**\r\n * Set the sub time step of the physics engine.\r\n * Default is 0 meaning there is no sub steps\r\n * To increase physics resolution precision, set a small value (like 1 ms)\r\n * @param subTimeStep defines the new sub timestep used for physics resolution.\r\n */\r\n public setSubTimeStep(subTimeStep: number = 0) {\r\n this._subTimeStep = subTimeStep;\r\n }\r\n\r\n /**\r\n * Get the sub time step of the physics engine.\r\n * @returns the current sub time step\r\n */\r\n public getSubTimeStep() {\r\n return this._subTimeStep;\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose(): void {\r\n this._physicsPlugin.dispose();\r\n }\r\n\r\n /**\r\n * Gets the name of the current physics plugin\r\n * @returns the name of the plugin\r\n */\r\n public getPhysicsPluginName(): string {\r\n return this._physicsPlugin.name;\r\n }\r\n\r\n /**\r\n * Adding a new impostor for the impostor tracking.\r\n * This will be done by the impostor itself.\r\n * @param impostor the impostor to add\r\n */\r\n\r\n /**\r\n * Called by the scene. No need to call it.\r\n * @param delta defines the timespan between frames\r\n */\r\n public _step(delta: number) {\r\n if (delta > 0.1) {\r\n delta = 0.1;\r\n } else if (delta <= 0) {\r\n delta = 1.0 / 60.0;\r\n }\r\n\r\n this._physicsPlugin.executeStep(delta, this._physicsBodies);\r\n }\r\n\r\n /**\r\n * Add a body as an active component of this engine\r\n * @param physicsBody The body to add\r\n */\r\n public addBody(physicsBody: PhysicsBody): void {\r\n this._physicsBodies.push(physicsBody);\r\n }\r\n /**\r\n * Removes a particular body from this engine\r\n * @param physicsBody The body to remove from the simulation\r\n */\r\n public removeBody(physicsBody: PhysicsBody): void {\r\n const index = this._physicsBodies.indexOf(physicsBody);\r\n if (index > -1) {\r\n /*const removed =*/ this._physicsBodies.splice(index, 1);\r\n }\r\n }\r\n /**\r\n * Returns an array of bodies added to this engine\r\n\r\n */\r\n public getBodies(): Array<PhysicsBody> {\r\n return this._physicsBodies;\r\n }\r\n\r\n /**\r\n * Gets the current plugin used to run the simulation\r\n * @returns current plugin\r\n */\r\n public getPhysicsPlugin(): IPhysicsEnginePluginV2 {\r\n return this._physicsPlugin;\r\n }\r\n\r\n /**\r\n * Does a raycast in the physics world\r\n * @param from when should the ray start?\r\n * @param to when should the ray end?\r\n * @param result resulting PhysicsRaycastResult\r\n * @param query raycast query object\r\n */\r\n public raycastToRef(from: Vector3, to: Vector3, result: PhysicsRaycastResult, query?: IRaycastQuery): void {\r\n this._physicsPlugin.raycast(from, to, result, query);\r\n }\r\n\r\n /**\r\n * Does a raycast in the physics world\r\n * @param from when should the ray start?\r\n * @param to when should the ray end?\r\n * @param query raycast query object\r\n * @returns PhysicsRaycastResult\r\n */\r\n public raycast(from: Vector3, to: Vector3, query?: IRaycastQuery): PhysicsRaycastResult {\r\n const result = new PhysicsRaycastResult();\r\n this._physicsPlugin.raycast(from, to, result, query);\r\n return result;\r\n }\r\n}\r\n"]}
@@ -196,6 +196,10 @@ export class Ragdoll {
196
196
  return nearestParent;
197
197
  }
198
198
  _init() {
199
+ // detach bones with link transform to let physics have control
200
+ this._skeleton.bones.forEach((bone) => {
201
+ bone.linkTransformNode(null);
202
+ });
199
203
  this._createColliders();
200
204
  // If this.defineRootBone() returns false... there is not root bone.
201
205
  if (!this._defineRootBone()) {