@babylonjs/core 5.35.0 → 5.36.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 (250) hide show
  1. package/Audio/sound.d.ts +5 -0
  2. package/Audio/sound.js +7 -0
  3. package/Audio/sound.js.map +1 -1
  4. package/Debug/physicsViewer.d.ts +4 -3
  5. package/Debug/physicsViewer.js +2 -2
  6. package/Debug/physicsViewer.js.map +1 -1
  7. package/Engines/Extensions/engine.renderTarget.js +15 -15
  8. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  9. package/Engines/Extensions/engine.renderTargetCube.d.ts +1 -1
  10. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  11. package/Engines/Extensions/engine.views.d.ts +4 -0
  12. package/Engines/Extensions/engine.views.js +61 -42
  13. package/Engines/Extensions/engine.views.js.map +1 -1
  14. package/Engines/Native/nativeHardwareTexture.d.ts +14 -0
  15. package/Engines/Native/nativeHardwareTexture.js +24 -0
  16. package/Engines/Native/nativeHardwareTexture.js.map +1 -0
  17. package/Engines/Native/nativeInterfaces.d.ts +22 -15
  18. package/Engines/Native/nativeInterfaces.js.map +1 -1
  19. package/Engines/Native/nativePipelineContext.d.ts +252 -0
  20. package/Engines/Native/nativePipelineContext.js +502 -0
  21. package/Engines/Native/nativePipelineContext.js.map +1 -0
  22. package/Engines/Native/nativeRenderTargetWrapper.d.ts +16 -0
  23. package/Engines/Native/nativeRenderTargetWrapper.js +33 -0
  24. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -0
  25. package/Engines/WebGPU/Extensions/engine.renderTarget.js +3 -3
  26. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  27. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  28. package/Engines/engine.d.ts +1 -0
  29. package/Engines/engine.js +24 -18
  30. package/Engines/engine.js.map +1 -1
  31. package/Engines/nativeEngine.d.ts +18 -17
  32. package/Engines/nativeEngine.js +100 -598
  33. package/Engines/nativeEngine.js.map +1 -1
  34. package/Engines/nullEngine.d.ts +1 -1
  35. package/Engines/nullEngine.js.map +1 -1
  36. package/Engines/thinEngine.d.ts +1 -1
  37. package/Engines/thinEngine.js +41 -38
  38. package/Engines/thinEngine.js.map +1 -1
  39. package/Engines/webgpuEngine.js.map +1 -1
  40. package/Gizmos/planeRotationGizmo.js +3 -1
  41. package/Gizmos/planeRotationGizmo.js.map +1 -1
  42. package/Inputs/scene.inputManager.js +4 -4
  43. package/Inputs/scene.inputManager.js.map +1 -1
  44. package/Loading/Plugins/babylonFileLoader.js +3 -3
  45. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  46. package/Materials/Node/Blocks/Dual/textureBlock.js +1 -1
  47. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  48. package/Materials/Node/nodeMaterial.d.ts +19 -1
  49. package/Materials/Node/nodeMaterial.js +30 -0
  50. package/Materials/Node/nodeMaterial.js.map +1 -1
  51. package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +2 -8
  52. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  53. package/Materials/Textures/baseTexture.d.ts +2 -1
  54. package/Materials/Textures/baseTexture.js +3 -2
  55. package/Materials/Textures/baseTexture.js.map +1 -1
  56. package/Materials/Textures/internalTexture.d.ts +2 -0
  57. package/Materials/Textures/internalTexture.js +4 -0
  58. package/Materials/Textures/internalTexture.js.map +1 -1
  59. package/Materials/Textures/mirrorTexture.js +0 -2
  60. package/Materials/Textures/mirrorTexture.js.map +1 -1
  61. package/Materials/Textures/renderTargetTexture.d.ts +53 -3
  62. package/Materials/Textures/renderTargetTexture.js +25 -25
  63. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  64. package/Materials/Textures/texture.d.ts +2 -0
  65. package/Materials/Textures/texture.js +35 -7
  66. package/Materials/Textures/texture.js.map +1 -1
  67. package/Materials/Textures/textureCreationOptions.d.ts +4 -1
  68. package/Materials/Textures/textureCreationOptions.js.map +1 -1
  69. package/Materials/material.js +1 -1
  70. package/Materials/material.js.map +1 -1
  71. package/Meshes/abstractMesh.d.ts +4 -4
  72. package/Meshes/abstractMesh.js +4 -4
  73. package/Meshes/abstractMesh.js.map +1 -1
  74. package/Meshes/mesh.d.ts +2 -2
  75. package/Meshes/mesh.js +1 -1
  76. package/Meshes/mesh.js.map +1 -1
  77. package/Misc/copyTextureToTexture.d.ts +9 -2
  78. package/Misc/copyTextureToTexture.js +23 -1
  79. package/Misc/copyTextureToTexture.js.map +1 -1
  80. package/Particles/IParticleSystem.d.ts +15 -1
  81. package/Particles/IParticleSystem.js.map +1 -1
  82. package/Particles/gpuParticleSystem.d.ts +24 -2
  83. package/Particles/gpuParticleSystem.js +98 -43
  84. package/Particles/gpuParticleSystem.js.map +1 -1
  85. package/Particles/particleSystem.d.ts +6 -1
  86. package/Particles/particleSystem.js +7 -2
  87. package/Particles/particleSystem.js.map +1 -1
  88. package/Physics/IPhysicsEngine.d.ts +8 -108
  89. package/Physics/IPhysicsEngine.js.map +1 -1
  90. package/Physics/Plugins/ammoJSPlugin.d.ts +1 -389
  91. package/Physics/Plugins/ammoJSPlugin.js +2 -1414
  92. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  93. package/Physics/Plugins/cannonJSPlugin.d.ts +1 -75
  94. package/Physics/Plugins/cannonJSPlugin.js +2 -664
  95. package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
  96. package/Physics/Plugins/oimoJSPlugin.d.ts +1 -59
  97. package/Physics/Plugins/oimoJSPlugin.js +2 -432
  98. package/Physics/Plugins/oimoJSPlugin.js.map +1 -1
  99. package/Physics/index.d.ts +3 -6
  100. package/Physics/index.js +3 -6
  101. package/Physics/index.js.map +1 -1
  102. package/Physics/physicsEngine.d.ts +1 -135
  103. package/Physics/physicsEngine.js +2 -221
  104. package/Physics/physicsEngine.js.map +1 -1
  105. package/Physics/physicsEngineComponent.d.ts +7 -42
  106. package/Physics/physicsEngineComponent.js +11 -71
  107. package/Physics/physicsEngineComponent.js.map +1 -1
  108. package/Physics/physicsHelper.d.ts +1 -411
  109. package/Physics/physicsHelper.js +2 -708
  110. package/Physics/physicsHelper.js.map +1 -1
  111. package/Physics/physicsImpostor.d.ts +1 -640
  112. package/Physics/physicsImpostor.js +2 -1004
  113. package/Physics/physicsImpostor.js.map +1 -1
  114. package/Physics/physicsJoint.d.ts +1 -275
  115. package/Physics/physicsJoint.js +2 -222
  116. package/Physics/physicsJoint.js.map +1 -1
  117. package/Physics/v1/IPhysicsEnginePlugin.d.ts +73 -0
  118. package/Physics/v1/IPhysicsEnginePlugin.js +2 -0
  119. package/Physics/v1/IPhysicsEnginePlugin.js.map +1 -0
  120. package/Physics/v1/Plugins/ammoJSPlugin.d.ts +401 -0
  121. package/Physics/v1/Plugins/ammoJSPlugin.js +1431 -0
  122. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -0
  123. package/Physics/v1/Plugins/cannonJSPlugin.d.ts +87 -0
  124. package/Physics/v1/Plugins/cannonJSPlugin.js +683 -0
  125. package/Physics/v1/Plugins/cannonJSPlugin.js.map +1 -0
  126. package/Physics/{Plugins → v1/Plugins}/index.d.ts +0 -0
  127. package/Physics/{Plugins → v1/Plugins}/index.js +0 -0
  128. package/Physics/v1/Plugins/index.js.map +1 -0
  129. package/Physics/v1/Plugins/oimoJSPlugin.d.ts +71 -0
  130. package/Physics/v1/Plugins/oimoJSPlugin.js +450 -0
  131. package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -0
  132. package/Physics/v1/index.d.ts +7 -0
  133. package/Physics/v1/index.js +9 -0
  134. package/Physics/v1/index.js.map +1 -0
  135. package/Physics/v1/physicsEngine.d.ts +147 -0
  136. package/Physics/v1/physicsEngine.js +237 -0
  137. package/Physics/v1/physicsEngine.js.map +1 -0
  138. package/Physics/v1/physicsEngineComponent.d.ts +45 -0
  139. package/Physics/v1/physicsEngineComponent.js +70 -0
  140. package/Physics/v1/physicsEngineComponent.js.map +1 -0
  141. package/Physics/v1/physicsHelper.d.ts +411 -0
  142. package/Physics/v1/physicsHelper.js +709 -0
  143. package/Physics/v1/physicsHelper.js.map +1 -0
  144. package/Physics/v1/physicsImpostor.d.ts +636 -0
  145. package/Physics/v1/physicsImpostor.js +1001 -0
  146. package/Physics/v1/physicsImpostor.js.map +1 -0
  147. package/Physics/v1/physicsJoint.d.ts +275 -0
  148. package/Physics/v1/physicsJoint.js +223 -0
  149. package/Physics/v1/physicsJoint.js.map +1 -0
  150. package/Physics/v2/IPhysicsEnginePlugin.d.ts +170 -0
  151. package/Physics/v2/IPhysicsEnginePlugin.js +47 -0
  152. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -0
  153. package/Physics/v2/Plugins/index.d.ts +0 -0
  154. package/Physics/v2/Plugins/index.js +2 -0
  155. package/Physics/v2/Plugins/index.js.map +1 -0
  156. package/Physics/v2/index.d.ts +6 -0
  157. package/Physics/v2/index.js +8 -0
  158. package/Physics/v2/index.js.map +1 -0
  159. package/Physics/v2/physicsAggregate.d.ts +114 -0
  160. package/Physics/v2/physicsAggregate.js +46 -0
  161. package/Physics/v2/physicsAggregate.js.map +1 -0
  162. package/Physics/v2/physicsBody.d.ts +109 -0
  163. package/Physics/v2/physicsBody.js +158 -0
  164. package/Physics/v2/physicsBody.js.map +1 -0
  165. package/Physics/v2/physicsConstraint.d.ts +184 -0
  166. package/Physics/v2/physicsConstraint.js +257 -0
  167. package/Physics/v2/physicsConstraint.js.map +1 -0
  168. package/Physics/v2/physicsEngine.d.ts +103 -0
  169. package/Physics/v2/physicsEngine.js +146 -0
  170. package/Physics/v2/physicsEngine.js.map +1 -0
  171. package/Physics/v2/physicsEngineComponent.d.ts +31 -0
  172. package/Physics/v2/physicsEngineComponent.js +50 -0
  173. package/Physics/v2/physicsEngineComponent.js.map +1 -0
  174. package/Physics/v2/physicsMaterial.d.ts +45 -0
  175. package/Physics/v2/physicsMaterial.js +67 -0
  176. package/Physics/v2/physicsMaterial.js.map +1 -0
  177. package/Physics/v2/physicsShape.d.ts +182 -0
  178. package/Physics/v2/physicsShape.js +229 -0
  179. package/Physics/v2/physicsShape.js.map +1 -0
  180. package/PostProcesses/postProcess.d.ts +3 -1
  181. package/PostProcesses/postProcess.js +4 -1
  182. package/PostProcesses/postProcess.js.map +1 -1
  183. package/Rendering/fluidRenderer/fluidRenderer.d.ts +153 -0
  184. package/Rendering/fluidRenderer/fluidRenderer.js +410 -0
  185. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -0
  186. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.d.ts +13 -0
  187. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +31 -0
  188. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -0
  189. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +81 -0
  190. package/Rendering/fluidRenderer/fluidRenderingObject.js +180 -0
  191. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -0
  192. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +63 -0
  193. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +130 -0
  194. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -0
  195. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +64 -0
  196. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +104 -0
  197. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -0
  198. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +234 -0
  199. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +690 -0
  200. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -0
  201. package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +56 -0
  202. package/Rendering/fluidRenderer/fluidRenderingTextures.js +261 -0
  203. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -0
  204. package/Rendering/fluidRenderer/index.d.ts +5 -0
  205. package/Rendering/fluidRenderer/index.js +6 -0
  206. package/Rendering/fluidRenderer/index.js.map +1 -0
  207. package/Rendering/index.d.ts +1 -0
  208. package/Rendering/index.js +2 -0
  209. package/Rendering/index.js.map +1 -1
  210. package/Shaders/copyTextureToTexture.fragment.js +4 -1
  211. package/Shaders/copyTextureToTexture.fragment.js.map +1 -1
  212. package/Shaders/fluidRenderingBilateralBlur.fragment.d.ts +5 -0
  213. package/Shaders/fluidRenderingBilateralBlur.fragment.js +9 -0
  214. package/Shaders/fluidRenderingBilateralBlur.fragment.js.map +1 -0
  215. package/Shaders/fluidRenderingParticleDepth.fragment.d.ts +5 -0
  216. package/Shaders/fluidRenderingParticleDepth.fragment.js +17 -0
  217. package/Shaders/fluidRenderingParticleDepth.fragment.js.map +1 -0
  218. package/Shaders/fluidRenderingParticleDepth.vertex.d.ts +5 -0
  219. package/Shaders/fluidRenderingParticleDepth.vertex.js +13 -0
  220. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -0
  221. package/Shaders/fluidRenderingParticleDiffuse.fragment.d.ts +5 -0
  222. package/Shaders/fluidRenderingParticleDiffuse.fragment.js +9 -0
  223. package/Shaders/fluidRenderingParticleDiffuse.fragment.js.map +1 -0
  224. package/Shaders/fluidRenderingParticleDiffuse.vertex.d.ts +5 -0
  225. package/Shaders/fluidRenderingParticleDiffuse.vertex.js +4 -0
  226. package/Shaders/fluidRenderingParticleDiffuse.vertex.js.map +1 -0
  227. package/Shaders/fluidRenderingParticleThickness.fragment.d.ts +5 -0
  228. package/Shaders/fluidRenderingParticleThickness.fragment.js +9 -0
  229. package/Shaders/fluidRenderingParticleThickness.fragment.js.map +1 -0
  230. package/Shaders/fluidRenderingParticleThickness.vertex.d.ts +5 -0
  231. package/Shaders/fluidRenderingParticleThickness.vertex.js +9 -0
  232. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -0
  233. package/Shaders/fluidRenderingRender.fragment.d.ts +5 -0
  234. package/Shaders/fluidRenderingRender.fragment.js +46 -0
  235. package/Shaders/fluidRenderingRender.fragment.js.map +1 -0
  236. package/Shaders/fluidRenderingStandardBlur.fragment.d.ts +5 -0
  237. package/Shaders/fluidRenderingStandardBlur.fragment.js +9 -0
  238. package/Shaders/fluidRenderingStandardBlur.fragment.js.map +1 -0
  239. package/XR/features/WebXRControllerPhysics.d.ts +1 -1
  240. package/XR/features/WebXRControllerPhysics.js +1 -1
  241. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  242. package/XR/features/WebXRHandTracking.js +1 -1
  243. package/XR/features/WebXRHandTracking.js.map +1 -1
  244. package/package.json +1 -1
  245. package/scene.js +6 -1
  246. package/scene.js.map +1 -1
  247. package/sceneComponent.d.ts +3 -0
  248. package/sceneComponent.js +3 -0
  249. package/sceneComponent.js.map +1 -1
  250. package/Physics/Plugins/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cannonJSPlugin.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Physics/v1/Plugins/cannonJSPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, FloatArray } from \"../../../types\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { Vector3, Matrix, Quaternion } from \"../../../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../../../Buffers/buffer\";\r\nimport type { AbstractMesh } from \"../../../Meshes/abstractMesh\";\r\nimport type { IPhysicsEnginePlugin, PhysicsImpostorJoint } from \"../IPhysicsEnginePlugin\";\r\nimport type { IPhysicsEnabledObject } from \"..//physicsImpostor\";\r\nimport { PhysicsImpostor } from \"..//physicsImpostor\";\r\nimport type { IMotorEnabledJoint, DistanceJointData, SpringJointData } from \"../physicsJoint\";\r\nimport { PhysicsJoint } from \"../physicsJoint\";\r\nimport { PhysicsRaycastResult } from \"../../physicsRaycastResult\";\r\nimport type { TransformNode } from \"../../../Meshes/transformNode\";\r\nimport { PhysicsEngine } from \"../physicsEngine\";\r\nimport { Epsilon } from \"../../../Maths/math.constants\";\r\n\r\n//declare var require: any;\r\ndeclare let CANNON: any;\r\n\r\n/** @internal */\r\nexport class CannonJSPlugin implements IPhysicsEnginePlugin {\r\n public world: any;\r\n public name: string = \"CannonJSPlugin\";\r\n private _physicsMaterials = new Array();\r\n private _fixedTimeStep: number = 1 / 60;\r\n private _cannonRaycastResult: any;\r\n private _raycastResult: PhysicsRaycastResult;\r\n private _physicsBodiesToRemoveAfterStep = new Array<any>();\r\n private _firstFrame = true;\r\n private _tmpQuaternion: Quaternion = new Quaternion();\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public BJSCANNON: any;\r\n\r\n public constructor(private _useDeltaForWorldStep: boolean = true, iterations: number = 10, cannonInjection = CANNON) {\r\n this.BJSCANNON = cannonInjection;\r\n if (!this.isSupported()) {\r\n Logger.Error(\"CannonJS is not available. Please make sure you included the js file.\");\r\n return;\r\n }\r\n\r\n this._extendNamespace();\r\n\r\n this.world = new this.BJSCANNON.World();\r\n this.world.broadphase = new this.BJSCANNON.NaiveBroadphase();\r\n this.world.solver.iterations = iterations;\r\n this._cannonRaycastResult = new this.BJSCANNON.RaycastResult();\r\n this._raycastResult = new PhysicsRaycastResult();\r\n }\r\n\r\n /**\r\n *\r\n * @returns plugin version\r\n */\r\n public getPluginVersion(): number {\r\n return 1;\r\n }\r\n\r\n public setGravity(gravity: Vector3): void {\r\n const vec = gravity;\r\n this.world.gravity.set(vec.x, vec.y, vec.z);\r\n }\r\n\r\n public setTimeStep(timeStep: number) {\r\n this._fixedTimeStep = timeStep;\r\n }\r\n\r\n public getTimeStep(): number {\r\n return this._fixedTimeStep;\r\n }\r\n\r\n public executeStep(delta: number, impostors: Array<PhysicsImpostor>): void {\r\n // due to cannon's architecture, the first frame's before-step is skipped.\r\n if (this._firstFrame) {\r\n this._firstFrame = false;\r\n for (const impostor of impostors) {\r\n if (!(impostor.type == PhysicsImpostor.HeightmapImpostor || impostor.type === PhysicsImpostor.PlaneImpostor)) {\r\n impostor.beforeStep();\r\n }\r\n }\r\n }\r\n this.world.step(this._useDeltaForWorldStep ? delta : this._fixedTimeStep);\r\n this._removeMarkedPhysicsBodiesFromWorld();\r\n }\r\n\r\n private _removeMarkedPhysicsBodiesFromWorld(): void {\r\n if (this._physicsBodiesToRemoveAfterStep.length > 0) {\r\n this._physicsBodiesToRemoveAfterStep.forEach((physicsBody) => {\r\n if (typeof this.world.removeBody === \"function\") {\r\n this.world.removeBody(physicsBody);\r\n } else {\r\n this.world.remove(physicsBody);\r\n }\r\n });\r\n this._physicsBodiesToRemoveAfterStep.length = 0;\r\n }\r\n }\r\n\r\n public applyImpulse(impostor: PhysicsImpostor, force: Vector3, contactPoint: Vector3) {\r\n const worldPoint = new this.BJSCANNON.Vec3(contactPoint.x, contactPoint.y, contactPoint.z);\r\n const impulse = new this.BJSCANNON.Vec3(force.x, force.y, force.z);\r\n\r\n impostor.physicsBody.applyImpulse(impulse, worldPoint);\r\n }\r\n\r\n public applyForce(impostor: PhysicsImpostor, force: Vector3, contactPoint: Vector3) {\r\n const worldPoint = new this.BJSCANNON.Vec3(contactPoint.x, contactPoint.y, contactPoint.z);\r\n const impulse = new this.BJSCANNON.Vec3(force.x, force.y, force.z);\r\n\r\n impostor.physicsBody.applyForce(impulse, worldPoint);\r\n }\r\n\r\n public generatePhysicsBody(impostor: PhysicsImpostor) {\r\n // When calling forceUpdate generatePhysicsBody is called again, ensure that the updated body does not instantly collide with removed body\r\n this._removeMarkedPhysicsBodiesFromWorld();\r\n\r\n //parent-child relationship. Does this impostor have a parent impostor?\r\n if (impostor.parent) {\r\n if (impostor.physicsBody) {\r\n this.removePhysicsBody(impostor);\r\n //TODO is that needed?\r\n impostor.forceUpdate();\r\n }\r\n return;\r\n }\r\n\r\n //should a new body be created for this impostor?\r\n if (impostor.isBodyInitRequired()) {\r\n const shape = this._createShape(impostor);\r\n if (!shape) {\r\n Logger.Warn(\"It was not possible to create a physics body for this object.\");\r\n return;\r\n }\r\n\r\n //unregister events if body is being changed\r\n const oldBody = impostor.physicsBody;\r\n if (oldBody) {\r\n this.removePhysicsBody(impostor);\r\n }\r\n\r\n //create the body and material\r\n const material = this._addMaterial(\"mat-\" + impostor.uniqueId, impostor.getParam(\"friction\"), impostor.getParam(\"restitution\"));\r\n\r\n const bodyCreationObject = {\r\n mass: impostor.getParam(\"mass\"),\r\n material: material,\r\n };\r\n // A simple extend, in case native options were used.\r\n const nativeOptions = impostor.getParam(\"nativeOptions\");\r\n for (const key in nativeOptions) {\r\n if (Object.prototype.hasOwnProperty.call(nativeOptions, key)) {\r\n (<any>bodyCreationObject)[key] = nativeOptions[key];\r\n }\r\n }\r\n impostor.physicsBody = new this.BJSCANNON.Body(bodyCreationObject);\r\n impostor.physicsBody.addEventListener(\"collide\", impostor.onCollide);\r\n this.world.addEventListener(\"preStep\", impostor.beforeStep);\r\n this.world.addEventListener(\"postStep\", impostor.afterStep);\r\n impostor.physicsBody.addShape(shape);\r\n if (typeof this.world.addBody === \"function\") {\r\n this.world.addBody(impostor.physicsBody);\r\n } else {\r\n this.world.add(impostor.physicsBody);\r\n }\r\n\r\n //try to keep the body moving in the right direction by taking old properties.\r\n //Should be tested!\r\n if (oldBody) {\r\n [\"force\", \"torque\", \"velocity\", \"angularVelocity\"].forEach(function (param) {\r\n const vec = oldBody[param];\r\n impostor.physicsBody[param].set(vec.x, vec.y, vec.z);\r\n });\r\n }\r\n this._processChildMeshes(impostor);\r\n }\r\n\r\n //now update the body's transformation\r\n this._updatePhysicsBodyTransformation(impostor);\r\n }\r\n\r\n private _processChildMeshes(mainImpostor: PhysicsImpostor) {\r\n const meshChildren = mainImpostor.object.getChildMeshes ? mainImpostor.object.getChildMeshes(true) : [];\r\n const mainRotation: Nullable<Quaternion> = mainImpostor.object.rotationQuaternion;\r\n if (mainRotation) {\r\n mainRotation.conjugateToRef(this._tmpQuaternion);\r\n } else {\r\n this._tmpQuaternion.set(0, 0, 0, 1);\r\n }\r\n\r\n if (meshChildren.length) {\r\n const processMesh = (mesh: AbstractMesh) => {\r\n if (!mesh.rotationQuaternion) {\r\n return;\r\n }\r\n\r\n const childImpostor = mesh.getPhysicsImpostor();\r\n if (childImpostor) {\r\n const parent = childImpostor.parent;\r\n if (parent !== mainImpostor && mesh.parent) {\r\n const pPosition = mesh.getAbsolutePosition().subtract((mesh.parent as TransformNode).getAbsolutePosition());\r\n const q = mesh.rotationQuaternion.multiply(this._tmpQuaternion);\r\n\r\n if (childImpostor.physicsBody) {\r\n this.removePhysicsBody(childImpostor);\r\n childImpostor.physicsBody = null;\r\n }\r\n childImpostor.parent = mainImpostor;\r\n childImpostor.resetUpdateFlags();\r\n mainImpostor.physicsBody.addShape(\r\n this._createShape(childImpostor),\r\n new this.BJSCANNON.Vec3(pPosition.x, pPosition.y, pPosition.z),\r\n new this.BJSCANNON.Quaternion(q.x, q.y, q.z, q.w)\r\n );\r\n //Add the mass of the children.\r\n mainImpostor.physicsBody.mass += childImpostor.getParam(\"mass\");\r\n }\r\n }\r\n mesh.getChildMeshes(true)\r\n .filter((m) => !!m.physicsImpostor)\r\n .forEach(processMesh);\r\n };\r\n meshChildren.filter((m) => !!m.physicsImpostor).forEach(processMesh);\r\n }\r\n }\r\n\r\n public removePhysicsBody(impostor: PhysicsImpostor) {\r\n impostor.physicsBody.removeEventListener(\"collide\", impostor.onCollide);\r\n this.world.removeEventListener(\"preStep\", impostor.beforeStep);\r\n this.world.removeEventListener(\"postStep\", impostor.afterStep);\r\n\r\n // Only remove the physics body after the physics step to avoid disrupting cannon's internal state\r\n if (this._physicsBodiesToRemoveAfterStep.indexOf(impostor.physicsBody) === -1) {\r\n this._physicsBodiesToRemoveAfterStep.push(impostor.physicsBody);\r\n }\r\n }\r\n\r\n public generateJoint(impostorJoint: PhysicsImpostorJoint) {\r\n const mainBody = impostorJoint.mainImpostor.physicsBody;\r\n const connectedBody = impostorJoint.connectedImpostor.physicsBody;\r\n if (!mainBody || !connectedBody) {\r\n return;\r\n }\r\n let constraint: any;\r\n const jointData = impostorJoint.joint.jointData;\r\n //TODO - https://github.com/schteppe/this.BJSCANNON.js/blob/gh-pages/demos/collisionFilter.html\r\n const constraintData = {\r\n pivotA: jointData.mainPivot ? new this.BJSCANNON.Vec3().set(jointData.mainPivot.x, jointData.mainPivot.y, jointData.mainPivot.z) : null,\r\n pivotB: jointData.connectedPivot ? new this.BJSCANNON.Vec3().set(jointData.connectedPivot.x, jointData.connectedPivot.y, jointData.connectedPivot.z) : null,\r\n axisA: jointData.mainAxis ? new this.BJSCANNON.Vec3().set(jointData.mainAxis.x, jointData.mainAxis.y, jointData.mainAxis.z) : null,\r\n axisB: jointData.connectedAxis ? new this.BJSCANNON.Vec3().set(jointData.connectedAxis.x, jointData.connectedAxis.y, jointData.connectedAxis.z) : null,\r\n maxForce: jointData.nativeParams.maxForce,\r\n collideConnected: !!jointData.collision,\r\n };\r\n switch (impostorJoint.joint.type) {\r\n case PhysicsJoint.HingeJoint:\r\n case PhysicsJoint.Hinge2Joint:\r\n constraint = new this.BJSCANNON.HingeConstraint(mainBody, connectedBody, constraintData);\r\n break;\r\n case PhysicsJoint.DistanceJoint:\r\n constraint = new this.BJSCANNON.DistanceConstraint(mainBody, connectedBody, (<DistanceJointData>jointData).maxDistance || 2);\r\n break;\r\n case PhysicsJoint.SpringJoint: {\r\n const springData = <SpringJointData>jointData;\r\n constraint = new this.BJSCANNON.Spring(mainBody, connectedBody, {\r\n restLength: springData.length,\r\n stiffness: springData.stiffness,\r\n damping: springData.damping,\r\n localAnchorA: constraintData.pivotA,\r\n localAnchorB: constraintData.pivotB,\r\n });\r\n break;\r\n }\r\n case PhysicsJoint.LockJoint:\r\n constraint = new this.BJSCANNON.LockConstraint(mainBody, connectedBody, constraintData);\r\n break;\r\n case PhysicsJoint.PointToPointJoint:\r\n case PhysicsJoint.BallAndSocketJoint:\r\n default:\r\n constraint = new this.BJSCANNON.PointToPointConstraint(mainBody, constraintData.pivotA, connectedBody, constraintData.pivotB, constraintData.maxForce);\r\n break;\r\n }\r\n //set the collideConnected flag after the creation, since DistanceJoint ignores it.\r\n constraint.collideConnected = !!jointData.collision;\r\n impostorJoint.joint.physicsJoint = constraint;\r\n //don't add spring as constraint, as it is not one.\r\n if (impostorJoint.joint.type !== PhysicsJoint.SpringJoint) {\r\n this.world.addConstraint(constraint);\r\n } else {\r\n (<SpringJointData>impostorJoint.joint.jointData).forceApplicationCallback =\r\n (<SpringJointData>impostorJoint.joint.jointData).forceApplicationCallback ||\r\n function () {\r\n constraint.applyForce();\r\n };\r\n impostorJoint.mainImpostor.registerAfterPhysicsStep((<SpringJointData>impostorJoint.joint.jointData).forceApplicationCallback);\r\n }\r\n }\r\n\r\n public removeJoint(impostorJoint: PhysicsImpostorJoint) {\r\n if (impostorJoint.joint.type !== PhysicsJoint.SpringJoint) {\r\n this.world.removeConstraint(impostorJoint.joint.physicsJoint);\r\n } else {\r\n impostorJoint.mainImpostor.unregisterAfterPhysicsStep((<SpringJointData>impostorJoint.joint.jointData).forceApplicationCallback);\r\n }\r\n }\r\n\r\n private _addMaterial(name: string, friction: number, restitution: number) {\r\n let index;\r\n let mat;\r\n\r\n for (index = 0; index < this._physicsMaterials.length; index++) {\r\n mat = this._physicsMaterials[index];\r\n\r\n if (mat.friction === friction && mat.restitution === restitution) {\r\n return mat;\r\n }\r\n }\r\n\r\n const currentMat = new this.BJSCANNON.Material(name);\r\n currentMat.friction = friction;\r\n currentMat.restitution = restitution;\r\n\r\n this._physicsMaterials.push(currentMat);\r\n return currentMat;\r\n }\r\n\r\n private _checkWithEpsilon(value: number): number {\r\n return value < Epsilon ? Epsilon : value;\r\n }\r\n\r\n private _createShape(impostor: PhysicsImpostor) {\r\n const object = impostor.object;\r\n\r\n let returnValue;\r\n const impostorExtents = impostor.getObjectExtents();\r\n switch (impostor.type) {\r\n case PhysicsImpostor.SphereImpostor: {\r\n const radiusX = impostorExtents.x;\r\n const radiusY = impostorExtents.y;\r\n const radiusZ = impostorExtents.z;\r\n\r\n returnValue = new this.BJSCANNON.Sphere(Math.max(this._checkWithEpsilon(radiusX), this._checkWithEpsilon(radiusY), this._checkWithEpsilon(radiusZ)) / 2);\r\n\r\n break;\r\n }\r\n //TMP also for cylinder - TODO Cannon supports cylinder natively.\r\n case PhysicsImpostor.CylinderImpostor: {\r\n let nativeParams = impostor.getParam(\"nativeOptions\");\r\n if (!nativeParams) {\r\n nativeParams = {};\r\n }\r\n const radiusTop = nativeParams.radiusTop !== undefined ? nativeParams.radiusTop : this._checkWithEpsilon(impostorExtents.x) / 2;\r\n const radiusBottom = nativeParams.radiusBottom !== undefined ? nativeParams.radiusBottom : this._checkWithEpsilon(impostorExtents.x) / 2;\r\n const height = nativeParams.height !== undefined ? nativeParams.height : this._checkWithEpsilon(impostorExtents.y);\r\n const numSegments = nativeParams.numSegments !== undefined ? nativeParams.numSegments : 16;\r\n returnValue = new this.BJSCANNON.Cylinder(radiusTop, radiusBottom, height, numSegments);\r\n\r\n // Rotate 90 degrees as this shape is horizontal in cannon\r\n const quat = new this.BJSCANNON.Quaternion();\r\n quat.setFromAxisAngle(new this.BJSCANNON.Vec3(1, 0, 0), -Math.PI / 2);\r\n const translation = new this.BJSCANNON.Vec3(0, 0, 0);\r\n returnValue.transformAllPoints(translation, quat);\r\n break;\r\n }\r\n case PhysicsImpostor.BoxImpostor: {\r\n const box = impostorExtents.scale(0.5);\r\n returnValue = new this.BJSCANNON.Box(new this.BJSCANNON.Vec3(this._checkWithEpsilon(box.x), this._checkWithEpsilon(box.y), this._checkWithEpsilon(box.z)));\r\n break;\r\n }\r\n case PhysicsImpostor.PlaneImpostor:\r\n Logger.Warn(\"Attention, PlaneImposter might not behave as you expect. Consider using BoxImposter instead\");\r\n returnValue = new this.BJSCANNON.Plane();\r\n break;\r\n case PhysicsImpostor.MeshImpostor: {\r\n // should transform the vertex data to world coordinates!!\r\n const rawVerts = object.getVerticesData ? object.getVerticesData(VertexBuffer.PositionKind) : [];\r\n const rawFaces = object.getIndices ? object.getIndices() : [];\r\n if (!rawVerts) {\r\n Logger.Warn(\"Tried to create a MeshImpostor for an object without vertices. This will fail.\");\r\n return;\r\n }\r\n // get only scale! so the object could transform correctly.\r\n const oldPosition = object.position.clone();\r\n const oldRotation = object.rotation && object.rotation.clone();\r\n const oldQuaternion = object.rotationQuaternion && object.rotationQuaternion.clone();\r\n object.position.copyFromFloats(0, 0, 0);\r\n object.rotation && object.rotation.copyFromFloats(0, 0, 0);\r\n object.rotationQuaternion && object.rotationQuaternion.copyFrom(impostor.getParentsRotation());\r\n\r\n object.rotationQuaternion && object.parent && object.rotationQuaternion.conjugateInPlace();\r\n\r\n const transform = object.computeWorldMatrix(true);\r\n // convert rawVerts to object space\r\n const transformedVertices = new Array<number>();\r\n let index: number;\r\n for (index = 0; index < rawVerts.length; index += 3) {\r\n Vector3.TransformCoordinates(Vector3.FromArray(rawVerts, index), transform).toArray(transformedVertices, index);\r\n }\r\n\r\n Logger.Warn(\"MeshImpostor only collides against spheres.\");\r\n returnValue = new this.BJSCANNON.Trimesh(transformedVertices, <number[]>rawFaces);\r\n //now set back the transformation!\r\n object.position.copyFrom(oldPosition);\r\n oldRotation && object.rotation && object.rotation.copyFrom(oldRotation);\r\n oldQuaternion && object.rotationQuaternion && object.rotationQuaternion.copyFrom(oldQuaternion);\r\n break;\r\n }\r\n case PhysicsImpostor.HeightmapImpostor: {\r\n const oldPosition2 = object.position.clone();\r\n const oldRotation2 = object.rotation && object.rotation.clone();\r\n const oldQuaternion2 = object.rotationQuaternion && object.rotationQuaternion.clone();\r\n object.position.copyFromFloats(0, 0, 0);\r\n object.rotation && object.rotation.copyFromFloats(0, 0, 0);\r\n object.rotationQuaternion && object.rotationQuaternion.copyFrom(impostor.getParentsRotation());\r\n object.rotationQuaternion && object.parent && object.rotationQuaternion.conjugateInPlace();\r\n object.rotationQuaternion && object.rotationQuaternion.multiplyInPlace(this._minus90X);\r\n\r\n returnValue = this._createHeightmap(object);\r\n object.position.copyFrom(oldPosition2);\r\n oldRotation2 && object.rotation && object.rotation.copyFrom(oldRotation2);\r\n oldQuaternion2 && object.rotationQuaternion && object.rotationQuaternion.copyFrom(oldQuaternion2);\r\n object.computeWorldMatrix(true);\r\n break;\r\n }\r\n case PhysicsImpostor.ParticleImpostor:\r\n returnValue = new this.BJSCANNON.Particle();\r\n break;\r\n case PhysicsImpostor.NoImpostor:\r\n returnValue = new this.BJSCANNON.Box(new this.BJSCANNON.Vec3(0, 0, 0));\r\n break;\r\n }\r\n\r\n return returnValue;\r\n }\r\n\r\n private _createHeightmap(object: IPhysicsEnabledObject, pointDepth?: number) {\r\n let pos = <FloatArray>object.getVerticesData(VertexBuffer.PositionKind);\r\n const transform = object.computeWorldMatrix(true);\r\n // convert rawVerts to object space\r\n const transformedVertices = new Array<number>();\r\n let index: number;\r\n for (index = 0; index < pos.length; index += 3) {\r\n Vector3.TransformCoordinates(Vector3.FromArray(pos, index), transform).toArray(transformedVertices, index);\r\n }\r\n pos = transformedVertices;\r\n const matrix = new Array<Array<any>>();\r\n\r\n //For now pointDepth will not be used and will be automatically calculated.\r\n //Future reference - try and find the best place to add a reference to the pointDepth variable.\r\n const arraySize = pointDepth || ~~(Math.sqrt(pos.length / 3) - 1);\r\n const boundingInfo = object.getBoundingInfo();\r\n const dim = Math.min(boundingInfo.boundingBox.extendSizeWorld.x, boundingInfo.boundingBox.extendSizeWorld.y);\r\n const minY = boundingInfo.boundingBox.extendSizeWorld.z;\r\n\r\n const elementSize = (dim * 2) / arraySize;\r\n\r\n for (let i = 0; i < pos.length; i = i + 3) {\r\n const x = Math.round(pos[i + 0] / elementSize + arraySize / 2);\r\n const z = Math.round((pos[i + 1] / elementSize - arraySize / 2) * -1);\r\n const y = -pos[i + 2] + minY;\r\n if (!matrix[x]) {\r\n matrix[x] = [];\r\n }\r\n if (!matrix[x][z]) {\r\n matrix[x][z] = y;\r\n }\r\n matrix[x][z] = Math.max(y, matrix[x][z]);\r\n }\r\n\r\n for (let x = 0; x <= arraySize; ++x) {\r\n if (!matrix[x]) {\r\n let loc = 1;\r\n while (!matrix[(x + loc) % arraySize]) {\r\n loc++;\r\n }\r\n matrix[x] = matrix[(x + loc) % arraySize].slice();\r\n //console.log(\"missing x\", x);\r\n }\r\n for (let z = 0; z <= arraySize; ++z) {\r\n if (!matrix[x][z]) {\r\n let loc = 1;\r\n let newValue;\r\n while (newValue === undefined) {\r\n newValue = matrix[x][(z + loc++) % arraySize];\r\n }\r\n matrix[x][z] = newValue;\r\n }\r\n }\r\n }\r\n\r\n const shape = new this.BJSCANNON.Heightfield(matrix, {\r\n elementSize: elementSize,\r\n });\r\n\r\n //For future reference, needed for body transformation\r\n shape.minY = minY;\r\n\r\n return shape;\r\n }\r\n\r\n private _minus90X = new Quaternion(-0.7071067811865475, 0, 0, 0.7071067811865475);\r\n private _plus90X = new Quaternion(0.7071067811865475, 0, 0, 0.7071067811865475);\r\n private _tmpPosition: Vector3 = Vector3.Zero();\r\n private _tmpDeltaPosition: Vector3 = Vector3.Zero();\r\n private _tmpUnityRotation: Quaternion = new Quaternion();\r\n\r\n private _updatePhysicsBodyTransformation(impostor: PhysicsImpostor) {\r\n const object = impostor.object;\r\n //make sure it is updated...\r\n object.computeWorldMatrix && object.computeWorldMatrix(true);\r\n if (!object.getBoundingInfo()) {\r\n return;\r\n }\r\n const center = impostor.getObjectCenter();\r\n //m.getAbsolutePosition().subtract(m.getBoundingInfo().boundingBox.centerWorld)\r\n // The delta between the mesh position and the mesh bounding box center\r\n this._tmpDeltaPosition.copyFrom(object.getAbsolutePivotPoint().subtract(center));\r\n this._tmpDeltaPosition.divideInPlace(impostor.object.scaling);\r\n this._tmpPosition.copyFrom(center);\r\n let quaternion = object.rotationQuaternion;\r\n\r\n if (!quaternion) {\r\n return;\r\n }\r\n\r\n //is shape is a plane or a heightmap, it must be rotated 90 degs in the X axis.\r\n //ideally these would be rotated at time of creation like cylinder but they dont extend ConvexPolyhedron\r\n if (impostor.type === PhysicsImpostor.PlaneImpostor || impostor.type === PhysicsImpostor.HeightmapImpostor) {\r\n //-90 DEG in X, precalculated\r\n quaternion = quaternion.multiply(this._minus90X);\r\n //Invert! (Precalculated, 90 deg in X)\r\n //No need to clone. this will never change.\r\n impostor.setDeltaRotation(this._plus90X);\r\n }\r\n\r\n //If it is a heightfield, if should be centered.\r\n if (impostor.type === PhysicsImpostor.HeightmapImpostor) {\r\n const mesh = <AbstractMesh>(<any>object);\r\n let boundingInfo = mesh.getBoundingInfo();\r\n //calculate the correct body position:\r\n const rotationQuaternion = mesh.rotationQuaternion;\r\n mesh.rotationQuaternion = this._tmpUnityRotation;\r\n mesh.computeWorldMatrix(true);\r\n\r\n //get original center with no rotation\r\n const c = center.clone();\r\n\r\n let oldPivot = mesh.getPivotMatrix();\r\n if (oldPivot) {\r\n // create a copy the pivot Matrix as it is modified in place\r\n oldPivot = oldPivot.clone();\r\n } else {\r\n oldPivot = Matrix.Identity();\r\n }\r\n\r\n //calculate the new center using a pivot (since this.BJSCANNON.js doesn't center height maps)\r\n const p = Matrix.Translation(boundingInfo.boundingBox.extendSizeWorld.x, 0, -boundingInfo.boundingBox.extendSizeWorld.z);\r\n mesh.setPreTransformMatrix(p);\r\n mesh.computeWorldMatrix(true);\r\n // force bounding box recomputation\r\n boundingInfo = mesh.getBoundingInfo();\r\n\r\n //calculate the translation\r\n const translation = boundingInfo.boundingBox.centerWorld.subtract(center).subtract(mesh.position).negate();\r\n\r\n this._tmpPosition.copyFromFloats(translation.x, translation.y - boundingInfo.boundingBox.extendSizeWorld.y, translation.z);\r\n //add it inverted to the delta\r\n this._tmpDeltaPosition.copyFrom(boundingInfo.boundingBox.centerWorld.subtract(c));\r\n this._tmpDeltaPosition.y += boundingInfo.boundingBox.extendSizeWorld.y;\r\n //rotation is back\r\n mesh.rotationQuaternion = rotationQuaternion;\r\n\r\n mesh.setPreTransformMatrix(oldPivot);\r\n mesh.computeWorldMatrix(true);\r\n } else if (impostor.type === PhysicsImpostor.MeshImpostor) {\r\n this._tmpDeltaPosition.copyFromFloats(0, 0, 0);\r\n }\r\n\r\n impostor.setDeltaPosition(this._tmpDeltaPosition);\r\n //Now update the impostor object\r\n impostor.physicsBody.position.set(this._tmpPosition.x, this._tmpPosition.y, this._tmpPosition.z);\r\n impostor.physicsBody.quaternion.set(quaternion.x, quaternion.y, quaternion.z, quaternion.w);\r\n }\r\n\r\n public setTransformationFromPhysicsBody(impostor: PhysicsImpostor) {\r\n impostor.object.position.set(impostor.physicsBody.position.x, impostor.physicsBody.position.y, impostor.physicsBody.position.z);\r\n if (impostor.object.rotationQuaternion) {\r\n const q = impostor.physicsBody.quaternion;\r\n impostor.object.rotationQuaternion.set(q.x, q.y, q.z, q.w);\r\n }\r\n }\r\n\r\n public setPhysicsBodyTransformation(impostor: PhysicsImpostor, newPosition: Vector3, newRotation: Quaternion) {\r\n impostor.physicsBody.position.set(newPosition.x, newPosition.y, newPosition.z);\r\n impostor.physicsBody.quaternion.set(newRotation.x, newRotation.y, newRotation.z, newRotation.w);\r\n }\r\n\r\n public isSupported(): boolean {\r\n return this.BJSCANNON !== undefined;\r\n }\r\n\r\n public setLinearVelocity(impostor: PhysicsImpostor, velocity: Vector3) {\r\n impostor.physicsBody.velocity.set(velocity.x, velocity.y, velocity.z);\r\n }\r\n\r\n public setAngularVelocity(impostor: PhysicsImpostor, velocity: Vector3) {\r\n impostor.physicsBody.angularVelocity.set(velocity.x, velocity.y, velocity.z);\r\n }\r\n\r\n public getLinearVelocity(impostor: PhysicsImpostor): Nullable<Vector3> {\r\n const v = impostor.physicsBody.velocity;\r\n if (!v) {\r\n return null;\r\n }\r\n return new Vector3(v.x, v.y, v.z);\r\n }\r\n public getAngularVelocity(impostor: PhysicsImpostor): Nullable<Vector3> {\r\n const v = impostor.physicsBody.angularVelocity;\r\n if (!v) {\r\n return null;\r\n }\r\n return new Vector3(v.x, v.y, v.z);\r\n }\r\n\r\n public setBodyMass(impostor: PhysicsImpostor, mass: number) {\r\n impostor.physicsBody.mass = mass;\r\n impostor.physicsBody.updateMassProperties();\r\n }\r\n\r\n public getBodyMass(impostor: PhysicsImpostor): number {\r\n return impostor.physicsBody.mass;\r\n }\r\n\r\n public getBodyFriction(impostor: PhysicsImpostor): number {\r\n return impostor.physicsBody.material.friction;\r\n }\r\n\r\n public setBodyFriction(impostor: PhysicsImpostor, friction: number) {\r\n impostor.physicsBody.material.friction = friction;\r\n }\r\n\r\n public getBodyRestitution(impostor: PhysicsImpostor): number {\r\n return impostor.physicsBody.material.restitution;\r\n }\r\n\r\n public setBodyRestitution(impostor: PhysicsImpostor, restitution: number) {\r\n impostor.physicsBody.material.restitution = restitution;\r\n }\r\n\r\n public sleepBody(impostor: PhysicsImpostor) {\r\n impostor.physicsBody.sleep();\r\n }\r\n\r\n public wakeUpBody(impostor: PhysicsImpostor) {\r\n impostor.physicsBody.wakeUp();\r\n }\r\n\r\n public updateDistanceJoint(joint: PhysicsJoint, maxDistance: number) {\r\n joint.physicsJoint.distance = maxDistance;\r\n }\r\n\r\n public setMotor(joint: IMotorEnabledJoint, speed?: number, maxForce?: number, motorIndex?: number) {\r\n if (!motorIndex) {\r\n joint.physicsJoint.enableMotor();\r\n joint.physicsJoint.setMotorSpeed(speed);\r\n if (maxForce) {\r\n this.setLimit(joint, maxForce);\r\n }\r\n }\r\n }\r\n\r\n public setLimit(joint: IMotorEnabledJoint, minForce: number, maxForce?: number) {\r\n joint.physicsJoint.motorEquation.maxForce = maxForce;\r\n joint.physicsJoint.motorEquation.minForce = minForce === void 0 ? -minForce : minForce;\r\n }\r\n\r\n public syncMeshWithImpostor(mesh: AbstractMesh, impostor: PhysicsImpostor) {\r\n const body = impostor.physicsBody;\r\n\r\n mesh.position.x = body.position.x;\r\n mesh.position.y = body.position.y;\r\n mesh.position.z = body.position.z;\r\n\r\n if (mesh.rotationQuaternion) {\r\n mesh.rotationQuaternion.x = body.quaternion.x;\r\n mesh.rotationQuaternion.y = body.quaternion.y;\r\n mesh.rotationQuaternion.z = body.quaternion.z;\r\n mesh.rotationQuaternion.w = body.quaternion.w;\r\n }\r\n }\r\n\r\n public getRadius(impostor: PhysicsImpostor): number {\r\n const shape = impostor.physicsBody.shapes[0];\r\n return shape.boundingSphereRadius;\r\n }\r\n\r\n public getBoxSizeToRef(impostor: PhysicsImpostor, result: Vector3): void {\r\n const shape = impostor.physicsBody.shapes[0];\r\n result.x = shape.halfExtents.x * 2;\r\n result.y = shape.halfExtents.y * 2;\r\n result.z = shape.halfExtents.z * 2;\r\n }\r\n\r\n public dispose() {}\r\n\r\n private _extendNamespace() {\r\n //this will force cannon to execute at least one step when using interpolation\r\n const step_tmp1 = new this.BJSCANNON.Vec3();\r\n const engine = this.BJSCANNON;\r\n this.BJSCANNON.World.prototype.step = function (dt: number, timeSinceLastCalled: number, maxSubSteps: number) {\r\n maxSubSteps = maxSubSteps || 10;\r\n timeSinceLastCalled = timeSinceLastCalled || 0;\r\n if (timeSinceLastCalled === 0) {\r\n this.internalStep(dt);\r\n this.time += dt;\r\n } else {\r\n let internalSteps = Math.floor((this.time + timeSinceLastCalled) / dt) - Math.floor(this.time / dt);\r\n internalSteps = Math.min(internalSteps, maxSubSteps) || 1;\r\n const t0 = performance.now();\r\n for (let i = 0; i !== internalSteps; i++) {\r\n this.internalStep(dt);\r\n if (performance.now() - t0 > dt * 1000) {\r\n break;\r\n }\r\n }\r\n this.time += timeSinceLastCalled;\r\n const h = this.time % dt;\r\n const h_div_dt = h / dt;\r\n const interpvelo = step_tmp1;\r\n const bodies = this.bodies;\r\n for (let j = 0; j !== bodies.length; j++) {\r\n const b = bodies[j];\r\n if (b.type !== engine.Body.STATIC && b.sleepState !== engine.Body.SLEEPING) {\r\n b.position.vsub(b.previousPosition, interpvelo);\r\n interpvelo.scale(h_div_dt, interpvelo);\r\n b.position.vadd(interpvelo, b.interpolatedPosition);\r\n } else {\r\n b.interpolatedPosition.set(b.position.x, b.position.y, b.position.z);\r\n b.interpolatedQuaternion.set(b.quaternion.x, b.quaternion.y, b.quaternion.z, b.quaternion.w);\r\n }\r\n }\r\n }\r\n };\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): PhysicsRaycastResult {\r\n this._raycastResult.reset(from, to);\r\n this.raycastToRef(from, to, this._raycastResult);\r\n return this._raycastResult;\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): void {\r\n this._cannonRaycastResult.reset();\r\n this.world.raycastClosest(from, to, {}, this._cannonRaycastResult);\r\n\r\n result.reset(from, to);\r\n if (this._cannonRaycastResult.hasHit) {\r\n // TODO: do we also want to get the body it hit?\r\n result.setHitData(\r\n {\r\n x: this._cannonRaycastResult.hitNormalWorld.x,\r\n y: this._cannonRaycastResult.hitNormalWorld.y,\r\n z: this._cannonRaycastResult.hitNormalWorld.z,\r\n },\r\n {\r\n x: this._cannonRaycastResult.hitPointWorld.x,\r\n y: this._cannonRaycastResult.hitPointWorld.y,\r\n z: this._cannonRaycastResult.hitPointWorld.z,\r\n }\r\n );\r\n result.setHitDistance(this._cannonRaycastResult.distance);\r\n }\r\n }\r\n}\r\n\r\nPhysicsEngine.DefaultPluginFactory = () => {\r\n return new CannonJSPlugin();\r\n};\r\n"]}
File without changes
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Physics/v1/Plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC","sourcesContent":["export * from \"./cannonJSPlugin\";\r\nexport * from \"./ammoJSPlugin\";\r\nexport * from \"./oimoJSPlugin\";\r\n"]}
@@ -0,0 +1,71 @@
1
+ import { PhysicsImpostor } from "../physicsImpostor";
2
+ import type { IMotorEnabledJoint } from "../physicsJoint";
3
+ import { PhysicsJoint } from "../physicsJoint";
4
+ import type { AbstractMesh } from "../../../Meshes/abstractMesh";
5
+ import { Vector3, Quaternion } from "../../../Maths/math.vector";
6
+ import type { Nullable } from "../../../types";
7
+ import { PhysicsRaycastResult } from "../../physicsRaycastResult";
8
+ import type { IPhysicsEnginePlugin, PhysicsImpostorJoint } from "../IPhysicsEnginePlugin";
9
+ /** @internal */
10
+ export declare class OimoJSPlugin implements IPhysicsEnginePlugin {
11
+ private _useDeltaForWorldStep;
12
+ world: any;
13
+ name: string;
14
+ BJSOIMO: any;
15
+ private _raycastResult;
16
+ private _fixedTimeStep;
17
+ constructor(_useDeltaForWorldStep?: boolean, iterations?: number, oimoInjection?: any);
18
+ /**
19
+ *
20
+ * @returns plugin version
21
+ */
22
+ getPluginVersion(): number;
23
+ setGravity(gravity: Vector3): void;
24
+ setTimeStep(timeStep: number): void;
25
+ getTimeStep(): number;
26
+ private _tmpImpostorsArray;
27
+ executeStep(delta: number, impostors: Array<PhysicsImpostor>): void;
28
+ applyImpulse(impostor: PhysicsImpostor, force: Vector3, contactPoint: Vector3): void;
29
+ applyForce(impostor: PhysicsImpostor, force: Vector3, contactPoint: Vector3): void;
30
+ generatePhysicsBody(impostor: PhysicsImpostor): void;
31
+ private _tmpPositionVector;
32
+ removePhysicsBody(impostor: PhysicsImpostor): void;
33
+ generateJoint(impostorJoint: PhysicsImpostorJoint): void;
34
+ removeJoint(impostorJoint: PhysicsImpostorJoint): void;
35
+ isSupported(): boolean;
36
+ setTransformationFromPhysicsBody(impostor: PhysicsImpostor): void;
37
+ setPhysicsBodyTransformation(impostor: PhysicsImpostor, newPosition: Vector3, newRotation: Quaternion): void;
38
+ setLinearVelocity(impostor: PhysicsImpostor, velocity: Vector3): void;
39
+ setAngularVelocity(impostor: PhysicsImpostor, velocity: Vector3): void;
40
+ getLinearVelocity(impostor: PhysicsImpostor): Nullable<Vector3>;
41
+ getAngularVelocity(impostor: PhysicsImpostor): Nullable<Vector3>;
42
+ setBodyMass(impostor: PhysicsImpostor, mass: number): void;
43
+ getBodyMass(impostor: PhysicsImpostor): number;
44
+ getBodyFriction(impostor: PhysicsImpostor): number;
45
+ setBodyFriction(impostor: PhysicsImpostor, friction: number): void;
46
+ getBodyRestitution(impostor: PhysicsImpostor): number;
47
+ setBodyRestitution(impostor: PhysicsImpostor, restitution: number): void;
48
+ sleepBody(impostor: PhysicsImpostor): void;
49
+ wakeUpBody(impostor: PhysicsImpostor): void;
50
+ updateDistanceJoint(joint: PhysicsJoint, maxDistance: number, minDistance?: number): void;
51
+ setMotor(joint: IMotorEnabledJoint, speed: number, force?: number, motorIndex?: number): void;
52
+ setLimit(joint: IMotorEnabledJoint, upperLimit: number, lowerLimit?: number, motorIndex?: number): void;
53
+ syncMeshWithImpostor(mesh: AbstractMesh, impostor: PhysicsImpostor): void;
54
+ getRadius(impostor: PhysicsImpostor): number;
55
+ getBoxSizeToRef(impostor: PhysicsImpostor, result: Vector3): void;
56
+ dispose(): void;
57
+ /**
58
+ * Does a raycast in the physics world
59
+ * @param from when should the ray start?
60
+ * @param to when should the ray end?
61
+ * @returns PhysicsRaycastResult
62
+ */
63
+ raycast(from: Vector3, to: Vector3): PhysicsRaycastResult;
64
+ /**
65
+ * Does a raycast in the physics world
66
+ * @param from when should the ray start?
67
+ * @param to when should the ray end?
68
+ * @param result resulting PhysicsRaycastResult
69
+ */
70
+ raycastToRef(from: Vector3, to: Vector3, result: PhysicsRaycastResult): void;
71
+ }