@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
@@ -1 +1 @@
1
- {"version":3,"file":"oimoJSPlugin.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Physics/Plugins/oimoJSPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IPhysicsEnginePlugin, PhysicsImpostorJoint } from \"../../Physics/IPhysicsEngine\";\r\nimport type { IPhysicsEnabledObject } from \"../../Physics/physicsImpostor\";\r\nimport { PhysicsImpostor } from \"../../Physics/physicsImpostor\";\r\nimport type { IMotorEnabledJoint, DistanceJointData, SpringJointData } from \"../../Physics/physicsJoint\";\r\nimport { PhysicsJoint } from \"../../Physics/physicsJoint\";\r\nimport { PhysicsEngine } from \"../../Physics/physicsEngine\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { Vector3, Quaternion } from \"../../Maths/math.vector\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { PhysicsRaycastResult } from \"../physicsRaycastResult\";\r\n\r\ndeclare let OIMO: any;\r\n\r\n/** @internal */\r\nexport class OimoJSPlugin implements IPhysicsEnginePlugin {\r\n public world: any;\r\n public name: string = \"OimoJSPlugin\";\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public BJSOIMO: any;\r\n private _raycastResult: PhysicsRaycastResult;\r\n private _fixedTimeStep: number = 1 / 60;\r\n\r\n constructor(private _useDeltaForWorldStep: boolean = true, iterations?: number, oimoInjection = OIMO) {\r\n this.BJSOIMO = oimoInjection;\r\n this.world = new this.BJSOIMO.World({\r\n iterations: iterations,\r\n });\r\n this.world.clear();\r\n this._raycastResult = new PhysicsRaycastResult();\r\n }\r\n\r\n public setGravity(gravity: Vector3) {\r\n this.world.gravity.set(gravity.x, gravity.y, gravity.z);\r\n }\r\n\r\n public setTimeStep(timeStep: number) {\r\n this.world.timeStep = timeStep;\r\n }\r\n\r\n public getTimeStep(): number {\r\n return this.world.timeStep;\r\n }\r\n\r\n private _tmpImpostorsArray: Array<PhysicsImpostor> = [];\r\n\r\n public executeStep(delta: number, impostors: Array<PhysicsImpostor>) {\r\n impostors.forEach(function (impostor) {\r\n impostor.beforeStep();\r\n });\r\n\r\n this.world.timeStep = this._useDeltaForWorldStep ? delta : this._fixedTimeStep;\r\n this.world.step();\r\n\r\n impostors.forEach((impostor) => {\r\n impostor.afterStep();\r\n //update the ordered impostors array\r\n this._tmpImpostorsArray[impostor.uniqueId] = impostor;\r\n });\r\n\r\n //check for collisions\r\n let contact = this.world.contacts;\r\n\r\n while (contact !== null) {\r\n if (contact.touching && !contact.body1.sleeping && !contact.body2.sleeping) {\r\n contact = contact.next;\r\n continue;\r\n }\r\n //is this body colliding with any other? get the impostor\r\n const mainImpostor = this._tmpImpostorsArray[+contact.body1.name];\r\n const collidingImpostor = this._tmpImpostorsArray[+contact.body2.name];\r\n\r\n if (!mainImpostor || !collidingImpostor) {\r\n contact = contact.next;\r\n continue;\r\n }\r\n\r\n mainImpostor.onCollide({ body: collidingImpostor.physicsBody, point: null, distance: 0, impulse: 0, normal: null });\r\n collidingImpostor.onCollide({ body: mainImpostor.physicsBody, point: null, distance: 0, impulse: 0, normal: null });\r\n contact = contact.next;\r\n }\r\n }\r\n\r\n public applyImpulse(impostor: PhysicsImpostor, force: Vector3, contactPoint: Vector3) {\r\n const mass = impostor.physicsBody.mass;\r\n impostor.physicsBody.applyImpulse(contactPoint.scale(this.world.invScale), force.scale(this.world.invScale * mass));\r\n }\r\n public applyForce(impostor: PhysicsImpostor, force: Vector3, contactPoint: Vector3) {\r\n Logger.Warn(\"Oimo doesn't support applying force. Using impulse instead.\");\r\n this.applyImpulse(impostor, force, contactPoint);\r\n }\r\n public generatePhysicsBody(impostor: PhysicsImpostor) {\r\n //parent-child relationship. Does this impostor has 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 if (impostor.isBodyInitRequired()) {\r\n const bodyConfig: any = {\r\n name: impostor.uniqueId,\r\n //Oimo must have mass, also for static objects.\r\n config: [impostor.getParam(\"mass\") || 0.001, impostor.getParam(\"friction\"), impostor.getParam(\"restitution\")],\r\n size: [],\r\n type: [],\r\n pos: [],\r\n posShape: [],\r\n rot: [],\r\n rotShape: [],\r\n move: impostor.getParam(\"mass\") !== 0,\r\n density: impostor.getParam(\"mass\"),\r\n friction: impostor.getParam(\"friction\"),\r\n restitution: impostor.getParam(\"restitution\"),\r\n //Supporting older versions of Oimo\r\n world: this.world,\r\n };\r\n\r\n const impostors = [impostor];\r\n const addToArray = (parent: IPhysicsEnabledObject) => {\r\n if (!parent.getChildMeshes) {\r\n return;\r\n }\r\n parent.getChildMeshes().forEach(function (m) {\r\n if (m.physicsImpostor) {\r\n impostors.push(m.physicsImpostor);\r\n //m.physicsImpostor._init();\r\n }\r\n });\r\n };\r\n addToArray(impostor.object);\r\n\r\n const checkWithEpsilon = (value: number): number => {\r\n return Math.max(value, PhysicsEngine.Epsilon);\r\n };\r\n\r\n const globalQuaternion: Quaternion = new Quaternion();\r\n\r\n impostors.forEach((i) => {\r\n if (!i.object.rotationQuaternion) {\r\n return;\r\n }\r\n //get the correct bounding box\r\n const oldQuaternion = i.object.rotationQuaternion;\r\n globalQuaternion.copyFrom(oldQuaternion);\r\n\r\n i.object.rotationQuaternion.set(0, 0, 0, 1);\r\n i.object.computeWorldMatrix(true);\r\n\r\n const rot = globalQuaternion.toEulerAngles();\r\n const impostorExtents = i.getObjectExtents();\r\n\r\n // eslint-disable-next-line no-loss-of-precision\r\n const radToDeg = 57.295779513082320876;\r\n\r\n if (i === impostor) {\r\n const center = impostor.getObjectCenter();\r\n\r\n impostor.object.getAbsolutePivotPoint().subtractToRef(center, this._tmpPositionVector);\r\n this._tmpPositionVector.divideInPlace(impostor.object.scaling);\r\n\r\n //Can also use Array.prototype.push.apply\r\n bodyConfig.pos.push(center.x);\r\n bodyConfig.pos.push(center.y);\r\n bodyConfig.pos.push(center.z);\r\n bodyConfig.posShape.push(0, 0, 0);\r\n\r\n bodyConfig.rotShape.push(0, 0, 0);\r\n } else {\r\n const localPosition = i.object.position.clone();\r\n bodyConfig.posShape.push(localPosition.x);\r\n bodyConfig.posShape.push(localPosition.y);\r\n bodyConfig.posShape.push(localPosition.z);\r\n\r\n // bodyConfig.pos.push(0, 0, 0);\r\n\r\n bodyConfig.rotShape.push(rot.x * radToDeg, rot.y * radToDeg, rot.z * radToDeg);\r\n }\r\n\r\n i.object.rotationQuaternion.copyFrom(globalQuaternion);\r\n\r\n // register mesh\r\n switch (i.type) {\r\n case PhysicsImpostor.ParticleImpostor:\r\n Logger.Warn(\"No Particle support in OIMO.js. using SphereImpostor instead\");\r\n // eslint-disable-next-line no-fallthrough\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 const size = Math.max(checkWithEpsilon(radiusX), checkWithEpsilon(radiusY), checkWithEpsilon(radiusZ)) / 2;\r\n\r\n bodyConfig.type.push(\"sphere\");\r\n //due to the way oimo works with compounds, add 3 times\r\n bodyConfig.size.push(size);\r\n bodyConfig.size.push(size);\r\n bodyConfig.size.push(size);\r\n break;\r\n }\r\n case PhysicsImpostor.CylinderImpostor: {\r\n const sizeX = checkWithEpsilon(impostorExtents.x) / 2;\r\n const sizeY = checkWithEpsilon(impostorExtents.y);\r\n bodyConfig.type.push(\"cylinder\");\r\n bodyConfig.size.push(sizeX);\r\n bodyConfig.size.push(sizeY);\r\n //due to the way oimo works with compounds, add one more value.\r\n bodyConfig.size.push(sizeY);\r\n break;\r\n }\r\n case PhysicsImpostor.PlaneImpostor:\r\n case PhysicsImpostor.BoxImpostor:\r\n default: {\r\n const sizeX = checkWithEpsilon(impostorExtents.x);\r\n const sizeY = checkWithEpsilon(impostorExtents.y);\r\n const sizeZ = checkWithEpsilon(impostorExtents.z);\r\n\r\n bodyConfig.type.push(\"box\");\r\n //if (i === impostor) {\r\n bodyConfig.size.push(sizeX);\r\n bodyConfig.size.push(sizeY);\r\n bodyConfig.size.push(sizeZ);\r\n //} else {\r\n // bodyConfig.size.push(0,0,0);\r\n //}\r\n break;\r\n }\r\n }\r\n\r\n //actually not needed, but hey...\r\n i.object.rotationQuaternion = oldQuaternion;\r\n });\r\n impostor.physicsBody = this.world.add(bodyConfig);\r\n // set the quaternion, ignoring the previously defined (euler) rotation\r\n impostor.physicsBody.resetQuaternion(globalQuaternion);\r\n // update with delta 0, so the body will receive the new rotation.\r\n impostor.physicsBody.updatePosition(0);\r\n } else {\r\n this._tmpPositionVector.copyFromFloats(0, 0, 0);\r\n }\r\n\r\n impostor.setDeltaPosition(this._tmpPositionVector);\r\n\r\n //this._tmpPositionVector.addInPlace(impostor.mesh.getBoundingInfo().boundingBox.center);\r\n //this.setPhysicsBodyTransformation(impostor, this._tmpPositionVector, impostor.mesh.rotationQuaternion);\r\n }\r\n\r\n private _tmpPositionVector: Vector3 = Vector3.Zero();\r\n\r\n public removePhysicsBody(impostor: PhysicsImpostor) {\r\n //impostor.physicsBody.dispose();\r\n this.world.removeRigidBody(impostor.physicsBody);\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\r\n if (!mainBody || !connectedBody) {\r\n return;\r\n }\r\n const jointData = impostorJoint.joint.jointData;\r\n const options = jointData.nativeParams || {};\r\n let type;\r\n const nativeJointData: any = {\r\n body1: mainBody,\r\n body2: connectedBody,\r\n\r\n axe1: options.axe1 || (jointData.mainAxis ? jointData.mainAxis.asArray() : null),\r\n axe2: options.axe2 || (jointData.connectedAxis ? jointData.connectedAxis.asArray() : null),\r\n pos1: options.pos1 || (jointData.mainPivot ? jointData.mainPivot.asArray() : null),\r\n pos2: options.pos2 || (jointData.connectedPivot ? jointData.connectedPivot.asArray() : null),\r\n\r\n min: options.min,\r\n max: options.max,\r\n collision: options.collision || jointData.collision,\r\n spring: options.spring,\r\n\r\n //supporting older version of Oimo\r\n world: this.world,\r\n };\r\n switch (impostorJoint.joint.type) {\r\n case PhysicsJoint.BallAndSocketJoint:\r\n type = \"jointBall\";\r\n break;\r\n case PhysicsJoint.SpringJoint: {\r\n Logger.Warn(\"OIMO.js doesn't support Spring Constraint. Simulating using DistanceJoint instead\");\r\n const springData = <SpringJointData>jointData;\r\n nativeJointData.min = springData.length || nativeJointData.min;\r\n //Max should also be set, just make sure it is at least min\r\n nativeJointData.max = Math.max(nativeJointData.min, nativeJointData.max);\r\n }\r\n // eslint-disable-next-line no-fallthrough\r\n case PhysicsJoint.DistanceJoint:\r\n type = \"jointDistance\";\r\n nativeJointData.max = (<DistanceJointData>jointData).maxDistance;\r\n break;\r\n case PhysicsJoint.PrismaticJoint:\r\n type = \"jointPrisme\";\r\n break;\r\n case PhysicsJoint.SliderJoint:\r\n type = \"jointSlide\";\r\n break;\r\n case PhysicsJoint.WheelJoint:\r\n type = \"jointWheel\";\r\n break;\r\n case PhysicsJoint.HingeJoint:\r\n default:\r\n type = \"jointHinge\";\r\n break;\r\n }\r\n nativeJointData.type = type;\r\n impostorJoint.joint.physicsJoint = this.world.add(nativeJointData);\r\n }\r\n\r\n public removeJoint(impostorJoint: PhysicsImpostorJoint) {\r\n //Bug in Oimo prevents us from disposing a joint in the playground\r\n //joint.joint.physicsJoint.dispose();\r\n //So we will bruteforce it!\r\n try {\r\n this.world.removeJoint(impostorJoint.joint.physicsJoint);\r\n } catch (e) {\r\n Logger.Warn(e);\r\n }\r\n }\r\n\r\n public isSupported(): boolean {\r\n return this.BJSOIMO !== undefined;\r\n }\r\n\r\n public setTransformationFromPhysicsBody(impostor: PhysicsImpostor) {\r\n if (!impostor.physicsBody.sleeping) {\r\n if (impostor.physicsBody.shapes.next) {\r\n let parent = impostor.physicsBody.shapes;\r\n while (parent.next) {\r\n parent = parent.next;\r\n }\r\n impostor.object.position.set(parent.position.x, parent.position.y, parent.position.z);\r\n } else {\r\n const pos = impostor.physicsBody.getPosition();\r\n impostor.object.position.set(pos.x, pos.y, pos.z);\r\n }\r\n\r\n if (impostor.object.rotationQuaternion) {\r\n const quat = impostor.physicsBody.getQuaternion();\r\n impostor.object.rotationQuaternion.set(quat.x, quat.y, quat.z, quat.w);\r\n }\r\n }\r\n }\r\n\r\n public setPhysicsBodyTransformation(impostor: PhysicsImpostor, newPosition: Vector3, newRotation: Quaternion) {\r\n const body = impostor.physicsBody;\r\n // disable bidirectional for compound meshes\r\n if (impostor.physicsBody.shapes.next) {\r\n return;\r\n }\r\n body.position.set(newPosition.x, newPosition.y, newPosition.z);\r\n body.orientation.set(newRotation.x, newRotation.y, newRotation.z, newRotation.w);\r\n body.syncShapes();\r\n body.awake();\r\n }\r\n\r\n /*private _getLastShape(body: any): any {\r\n var lastShape = body.shapes;\r\n while (lastShape.next) {\r\n lastShape = lastShape.next;\r\n }\r\n return lastShape;\r\n }*/\r\n\r\n public setLinearVelocity(impostor: PhysicsImpostor, velocity: Vector3) {\r\n impostor.physicsBody.linearVelocity.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.linearVelocity;\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 const staticBody: boolean = mass === 0;\r\n //this will actually set the body's density and not its mass.\r\n //But this is how oimo treats the mass variable.\r\n impostor.physicsBody.shapes.density = staticBody ? 1 : mass;\r\n impostor.physicsBody.setupMass(staticBody ? 0x2 : 0x1);\r\n }\r\n\r\n public getBodyMass(impostor: PhysicsImpostor): number {\r\n return impostor.physicsBody.shapes.density;\r\n }\r\n\r\n public getBodyFriction(impostor: PhysicsImpostor): number {\r\n return impostor.physicsBody.shapes.friction;\r\n }\r\n\r\n public setBodyFriction(impostor: PhysicsImpostor, friction: number) {\r\n impostor.physicsBody.shapes.friction = friction;\r\n }\r\n\r\n public getBodyRestitution(impostor: PhysicsImpostor): number {\r\n return impostor.physicsBody.shapes.restitution;\r\n }\r\n\r\n public setBodyRestitution(impostor: PhysicsImpostor, restitution: number) {\r\n impostor.physicsBody.shapes.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.awake();\r\n }\r\n\r\n public updateDistanceJoint(joint: PhysicsJoint, maxDistance: number, minDistance?: number) {\r\n joint.physicsJoint.limitMotor.upperLimit = maxDistance;\r\n if (minDistance !== void 0) {\r\n joint.physicsJoint.limitMotor.lowerLimit = minDistance;\r\n }\r\n }\r\n\r\n public setMotor(joint: IMotorEnabledJoint, speed: number, force?: number, motorIndex?: number) {\r\n if (force !== undefined) {\r\n Logger.Warn(\"OimoJS plugin currently has unexpected behavior when using setMotor with force parameter\");\r\n } else {\r\n force = 1e6;\r\n }\r\n speed *= -1;\r\n\r\n //TODO separate rotational and transational motors.\r\n const motor = motorIndex\r\n ? joint.physicsJoint.rotationalLimitMotor2\r\n : joint.physicsJoint.rotationalLimitMotor1 || joint.physicsJoint.rotationalLimitMotor || joint.physicsJoint.limitMotor;\r\n if (motor) {\r\n motor.setMotor(speed, force);\r\n }\r\n }\r\n\r\n public setLimit(joint: IMotorEnabledJoint, upperLimit: number, lowerLimit?: number, motorIndex?: number) {\r\n //TODO separate rotational and transational motors.\r\n const motor = motorIndex\r\n ? joint.physicsJoint.rotationalLimitMotor2\r\n : joint.physicsJoint.rotationalLimitMotor1 || joint.physicsJoint.rotationalLimitMotor || joint.physicsJoint.limitMotor;\r\n if (motor) {\r\n motor.setLimit(upperLimit, lowerLimit === void 0 ? -upperLimit : lowerLimit);\r\n }\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.orientation.x;\r\n mesh.rotationQuaternion.y = body.orientation.y;\r\n mesh.rotationQuaternion.z = body.orientation.z;\r\n mesh.rotationQuaternion.w = body.orientation.w;\r\n }\r\n }\r\n\r\n public getRadius(impostor: PhysicsImpostor): number {\r\n return impostor.physicsBody.shapes.radius;\r\n }\r\n\r\n public getBoxSizeToRef(impostor: PhysicsImpostor, result: Vector3): void {\r\n const shape = impostor.physicsBody.shapes;\r\n result.x = shape.halfWidth * 2;\r\n result.y = shape.halfHeight * 2;\r\n result.z = shape.halfDepth * 2;\r\n }\r\n\r\n public dispose() {\r\n this.world.clear();\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 Logger.Warn(\"raycast is not currently supported by the Oimo physics plugin\");\r\n\r\n this._raycastResult.reset(from, to);\r\n\r\n return this._raycastResult;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"oimoJSPlugin.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Physics/Plugins/oimoJSPlugin.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,cAAc,4BAA4B,CAAC","sourcesContent":["// ES 6 Compatibility\r\nexport * from \"../v1/Plugins/oimoJSPlugin\";\r\n"]}
@@ -1,7 +1,4 @@
1
- export * from "./IPhysicsEngine";
2
- export * from "./physicsEngine";
1
+ export * from "./v1/index";
2
+ export * from "./v2/index";
3
3
  export * from "./physicsEngineComponent";
4
- export * from "./physicsHelper";
5
- export * from "./physicsImpostor";
6
- export * from "./physicsJoint";
7
- export * from "./Plugins/index";
4
+ export * from "./v1/physicsEngineComponent";
package/Physics/index.js CHANGED
@@ -1,9 +1,6 @@
1
1
  /* eslint-disable import/no-internal-modules */
2
- export * from "./IPhysicsEngine.js";
3
- export * from "./physicsEngine.js";
2
+ export * from "./v1/index.js";
3
+ export * from "./v2/index.js";
4
4
  export * from "./physicsEngineComponent.js";
5
- export * from "./physicsHelper.js";
6
- export * from "./physicsImpostor.js";
7
- export * from "./physicsJoint.js";
8
- export * from "./Plugins/index.js";
5
+ export * from "./v1/physicsEngineComponent.js";
9
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lts/core/generated/Physics/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nexport * from \"./IPhysicsEngine\";\r\nexport * from \"./physicsEngine\";\r\nexport * from \"./physicsEngineComponent\";\r\nexport * from \"./physicsHelper\";\r\nexport * from \"./physicsImpostor\";\r\nexport * from \"./physicsJoint\";\r\nexport * from \"./Plugins/index\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lts/core/generated/Physics/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nexport * from \"./v1/index\";\r\nexport * from \"./v2/index\";\r\nexport * from \"./physicsEngineComponent\";\r\nexport * from \"./v1/physicsEngineComponent\";\r\n"]}
@@ -1,135 +1 @@
1
- import type { Nullable } from "../types";
2
- import { Vector3 } from "../Maths/math.vector";
3
- import type { IPhysicsEngine, IPhysicsEnginePlugin } from "./IPhysicsEngine";
4
- import type { PhysicsImpostor, IPhysicsEnabledObject } from "./physicsImpostor";
5
- import type { PhysicsJoint } from "./physicsJoint";
6
- import type { PhysicsRaycastResult } from "./physicsRaycastResult";
7
- /**
8
- * Class used to control physics engine
9
- * @see https://doc.babylonjs.com/features/featuresDeepDive/physics/usingPhysicsEngine
10
- */
11
- export declare class PhysicsEngine implements IPhysicsEngine {
12
- private _physicsPlugin;
13
- /**
14
- * Global value used to control the smallest number supported by the simulation
15
- */
16
- static Epsilon: number;
17
- private _impostors;
18
- private _joints;
19
- private _subTimeStep;
20
- private _uniqueIdCounter;
21
- /**
22
- * Gets the gravity vector used by the simulation
23
- */
24
- gravity: Vector3;
25
- /**
26
- * Factory used to create the default physics plugin.
27
- * @returns The default physics plugin
28
- */
29
- static DefaultPluginFactory(): IPhysicsEnginePlugin;
30
- /**
31
- * Creates a new Physics Engine
32
- * @param gravity defines the gravity vector used by the simulation
33
- * @param _physicsPlugin defines the plugin to use (CannonJS by default)
34
- */
35
- constructor(gravity: Nullable<Vector3>, _physicsPlugin?: IPhysicsEnginePlugin);
36
- /**
37
- * Sets the gravity vector used by the simulation
38
- * @param gravity defines the gravity vector to use
39
- */
40
- setGravity(gravity: Vector3): void;
41
- /**
42
- * Set the time step of the physics engine.
43
- * Default is 1/60.
44
- * To slow it down, enter 1/600 for example.
45
- * To speed it up, 1/30
46
- * @param newTimeStep defines the new timestep to apply to this world.
47
- */
48
- setTimeStep(newTimeStep?: number): void;
49
- /**
50
- * Get the time step of the physics engine.
51
- * @returns the current time step
52
- */
53
- getTimeStep(): number;
54
- /**
55
- * Set the sub time step of the physics engine.
56
- * Default is 0 meaning there is no sub steps
57
- * To increase physics resolution precision, set a small value (like 1 ms)
58
- * @param subTimeStep defines the new sub timestep used for physics resolution.
59
- */
60
- setSubTimeStep(subTimeStep?: number): void;
61
- /**
62
- * Get the sub time step of the physics engine.
63
- * @returns the current sub time step
64
- */
65
- getSubTimeStep(): number;
66
- /**
67
- * Release all resources
68
- */
69
- dispose(): void;
70
- /**
71
- * Gets the name of the current physics plugin
72
- * @returns the name of the plugin
73
- */
74
- getPhysicsPluginName(): string;
75
- /**
76
- * Adding a new impostor for the impostor tracking.
77
- * This will be done by the impostor itself.
78
- * @param impostor the impostor to add
79
- */
80
- addImpostor(impostor: PhysicsImpostor): void;
81
- /**
82
- * Remove an impostor from the engine.
83
- * This impostor and its mesh will not longer be updated by the physics engine.
84
- * @param impostor the impostor to remove
85
- */
86
- removeImpostor(impostor: PhysicsImpostor): void;
87
- /**
88
- * Add a joint to the physics engine
89
- * @param mainImpostor defines the main impostor to which the joint is added.
90
- * @param connectedImpostor defines the impostor that is connected to the main impostor using this joint
91
- * @param joint defines the joint that will connect both impostors.
92
- */
93
- addJoint(mainImpostor: PhysicsImpostor, connectedImpostor: PhysicsImpostor, joint: PhysicsJoint): void;
94
- /**
95
- * Removes a joint from the simulation
96
- * @param mainImpostor defines the impostor used with the joint
97
- * @param connectedImpostor defines the other impostor connected to the main one by the joint
98
- * @param joint defines the joint to remove
99
- */
100
- removeJoint(mainImpostor: PhysicsImpostor, connectedImpostor: PhysicsImpostor, joint: PhysicsJoint): void;
101
- /**
102
- * Called by the scene. No need to call it.
103
- * @param delta defines the timespan between frames
104
- */
105
- _step(delta: number): void;
106
- /**
107
- * Gets the current plugin used to run the simulation
108
- * @returns current plugin
109
- */
110
- getPhysicsPlugin(): IPhysicsEnginePlugin;
111
- /**
112
- * Gets the list of physic impostors
113
- * @returns an array of PhysicsImpostor
114
- */
115
- getImpostors(): Array<PhysicsImpostor>;
116
- /**
117
- * Gets the impostor for a physics enabled object
118
- * @param object defines the object impersonated by the impostor
119
- * @returns the PhysicsImpostor or null if not found
120
- */
121
- getImpostorForPhysicsObject(object: IPhysicsEnabledObject): Nullable<PhysicsImpostor>;
122
- /**
123
- * Gets the impostor for a physics body object
124
- * @param body defines physics body used by the impostor
125
- * @returns the PhysicsImpostor or null if not found
126
- */
127
- getImpostorWithPhysicsBody(body: any): Nullable<PhysicsImpostor>;
128
- /**
129
- * Does a raycast in the physics world
130
- * @param from when should the ray start?
131
- * @param to when should the ray end?
132
- * @returns PhysicsRaycastResult
133
- */
134
- raycast(from: Vector3, to: Vector3): PhysicsRaycastResult;
135
- }
1
+ export { PhysicsEngine } from "./v1/physicsEngine";
@@ -1,222 +1,3 @@
1
- import { Vector3 } from "../Maths/math.vector.js";
2
- import { _WarnImport } from "../Misc/devTools.js";
3
- /**
4
- * Class used to control physics engine
5
- * @see https://doc.babylonjs.com/features/featuresDeepDive/physics/usingPhysicsEngine
6
- */
7
- export class PhysicsEngine {
8
- /**
9
- * Creates a new Physics Engine
10
- * @param gravity defines the gravity vector used by the simulation
11
- * @param _physicsPlugin defines the plugin to use (CannonJS by default)
12
- */
13
- constructor(gravity, _physicsPlugin = PhysicsEngine.DefaultPluginFactory()) {
14
- this._physicsPlugin = _physicsPlugin;
15
- this._impostors = [];
16
- this._joints = [];
17
- this._subTimeStep = 0;
18
- this._uniqueIdCounter = 0;
19
- if (!this._physicsPlugin.isSupported()) {
20
- throw new Error("Physics Engine " + this._physicsPlugin.name + " cannot be found. " + "Please make sure it is included.");
21
- }
22
- gravity = gravity || new Vector3(0, -9.807, 0);
23
- this.setGravity(gravity);
24
- this.setTimeStep();
25
- }
26
- /**
27
- * Factory used to create the default physics plugin.
28
- * @returns The default physics plugin
29
- */
30
- static DefaultPluginFactory() {
31
- throw _WarnImport("CannonJSPlugin");
32
- }
33
- /**
34
- * Sets the gravity vector used by the simulation
35
- * @param gravity defines the gravity vector to use
36
- */
37
- setGravity(gravity) {
38
- this.gravity = gravity;
39
- this._physicsPlugin.setGravity(this.gravity);
40
- }
41
- /**
42
- * Set the time step of the physics engine.
43
- * Default is 1/60.
44
- * To slow it down, enter 1/600 for example.
45
- * To speed it up, 1/30
46
- * @param newTimeStep defines the new timestep to apply to this world.
47
- */
48
- setTimeStep(newTimeStep = 1 / 60) {
49
- this._physicsPlugin.setTimeStep(newTimeStep);
50
- }
51
- /**
52
- * Get the time step of the physics engine.
53
- * @returns the current time step
54
- */
55
- getTimeStep() {
56
- return this._physicsPlugin.getTimeStep();
57
- }
58
- /**
59
- * Set the sub time step of the physics engine.
60
- * Default is 0 meaning there is no sub steps
61
- * To increase physics resolution precision, set a small value (like 1 ms)
62
- * @param subTimeStep defines the new sub timestep used for physics resolution.
63
- */
64
- setSubTimeStep(subTimeStep = 0) {
65
- this._subTimeStep = subTimeStep;
66
- }
67
- /**
68
- * Get the sub time step of the physics engine.
69
- * @returns the current sub time step
70
- */
71
- getSubTimeStep() {
72
- return this._subTimeStep;
73
- }
74
- /**
75
- * Release all resources
76
- */
77
- dispose() {
78
- this._impostors.forEach(function (impostor) {
79
- impostor.dispose();
80
- });
81
- this._physicsPlugin.dispose();
82
- }
83
- /**
84
- * Gets the name of the current physics plugin
85
- * @returns the name of the plugin
86
- */
87
- getPhysicsPluginName() {
88
- return this._physicsPlugin.name;
89
- }
90
- /**
91
- * Adding a new impostor for the impostor tracking.
92
- * This will be done by the impostor itself.
93
- * @param impostor the impostor to add
94
- */
95
- addImpostor(impostor) {
96
- this._impostors.push(impostor);
97
- impostor.uniqueId = this._uniqueIdCounter++;
98
- //if no parent, generate the body
99
- if (!impostor.parent) {
100
- this._physicsPlugin.generatePhysicsBody(impostor);
101
- }
102
- }
103
- /**
104
- * Remove an impostor from the engine.
105
- * This impostor and its mesh will not longer be updated by the physics engine.
106
- * @param impostor the impostor to remove
107
- */
108
- removeImpostor(impostor) {
109
- const index = this._impostors.indexOf(impostor);
110
- if (index > -1) {
111
- const removed = this._impostors.splice(index, 1);
112
- //Is it needed?
113
- if (removed.length) {
114
- this.getPhysicsPlugin().removePhysicsBody(impostor);
115
- }
116
- }
117
- }
118
- /**
119
- * Add a joint to the physics engine
120
- * @param mainImpostor defines the main impostor to which the joint is added.
121
- * @param connectedImpostor defines the impostor that is connected to the main impostor using this joint
122
- * @param joint defines the joint that will connect both impostors.
123
- */
124
- addJoint(mainImpostor, connectedImpostor, joint) {
125
- const impostorJoint = {
126
- mainImpostor: mainImpostor,
127
- connectedImpostor: connectedImpostor,
128
- joint: joint,
129
- };
130
- joint.physicsPlugin = this._physicsPlugin;
131
- this._joints.push(impostorJoint);
132
- this._physicsPlugin.generateJoint(impostorJoint);
133
- }
134
- /**
135
- * Removes a joint from the simulation
136
- * @param mainImpostor defines the impostor used with the joint
137
- * @param connectedImpostor defines the other impostor connected to the main one by the joint
138
- * @param joint defines the joint to remove
139
- */
140
- removeJoint(mainImpostor, connectedImpostor, joint) {
141
- const matchingJoints = this._joints.filter(function (impostorJoint) {
142
- return impostorJoint.connectedImpostor === connectedImpostor && impostorJoint.joint === joint && impostorJoint.mainImpostor === mainImpostor;
143
- });
144
- if (matchingJoints.length) {
145
- this._physicsPlugin.removeJoint(matchingJoints[0]);
146
- //TODO remove it from the list as well
147
- }
148
- }
149
- /**
150
- * Called by the scene. No need to call it.
151
- * @param delta defines the timespan between frames
152
- */
153
- _step(delta) {
154
- //check if any mesh has no body / requires an update
155
- this._impostors.forEach((impostor) => {
156
- if (impostor.isBodyInitRequired()) {
157
- this._physicsPlugin.generatePhysicsBody(impostor);
158
- }
159
- });
160
- if (delta > 0.1) {
161
- delta = 0.1;
162
- }
163
- else if (delta <= 0) {
164
- delta = 1.0 / 60.0;
165
- }
166
- this._physicsPlugin.executeStep(delta, this._impostors);
167
- }
168
- /**
169
- * Gets the current plugin used to run the simulation
170
- * @returns current plugin
171
- */
172
- getPhysicsPlugin() {
173
- return this._physicsPlugin;
174
- }
175
- /**
176
- * Gets the list of physic impostors
177
- * @returns an array of PhysicsImpostor
178
- */
179
- getImpostors() {
180
- return this._impostors;
181
- }
182
- /**
183
- * Gets the impostor for a physics enabled object
184
- * @param object defines the object impersonated by the impostor
185
- * @returns the PhysicsImpostor or null if not found
186
- */
187
- getImpostorForPhysicsObject(object) {
188
- for (let i = 0; i < this._impostors.length; ++i) {
189
- if (this._impostors[i].object === object) {
190
- return this._impostors[i];
191
- }
192
- }
193
- return null;
194
- }
195
- /**
196
- * Gets the impostor for a physics body object
197
- * @param body defines physics body used by the impostor
198
- * @returns the PhysicsImpostor or null if not found
199
- */
200
- getImpostorWithPhysicsBody(body) {
201
- for (let i = 0; i < this._impostors.length; ++i) {
202
- if (this._impostors[i].physicsBody === body) {
203
- return this._impostors[i];
204
- }
205
- }
206
- return null;
207
- }
208
- /**
209
- * Does a raycast in the physics world
210
- * @param from when should the ray start?
211
- * @param to when should the ray end?
212
- * @returns PhysicsRaycastResult
213
- */
214
- raycast(from, to) {
215
- return this._physicsPlugin.raycast(from, to);
216
- }
217
- }
218
- /**
219
- * Global value used to control the smallest number supported by the simulation
220
- */
221
- PhysicsEngine.Epsilon = 0.001;
1
+ // ES 6 Compatibility
2
+ export { PhysicsEngine } from "./v1/physicsEngine.js";
222
3
  //# sourceMappingURL=physicsEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"physicsEngine.js","sourceRoot":"","sources":["../../../../lts/core/generated/Physics/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, PhysicsImpostorJoint, IPhysicsEnginePlugin } from \"./IPhysicsEngine\";\r\nimport type { PhysicsImpostor, IPhysicsEnabledObject } from \"./physicsImpostor\";\r\nimport type { PhysicsJoint } from \"./physicsJoint\";\r\nimport type { PhysicsRaycastResult } from \"./physicsRaycastResult\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\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 /**\r\n * Global value used to control the smallest number supported by the simulation\r\n */\r\n public static Epsilon = 0.001;\r\n\r\n private _impostors: Array<PhysicsImpostor> = [];\r\n private _joints: Array<PhysicsImpostorJoint> = [];\r\n private _subTimeStep: number = 0;\r\n private _uniqueIdCounter = 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 * Factory used to create the default physics plugin.\r\n * @returns The default physics plugin\r\n */\r\n public static DefaultPluginFactory(): IPhysicsEnginePlugin {\r\n throw _WarnImport(\"CannonJSPlugin\");\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(gravity: Nullable<Vector3>, private _physicsPlugin: IPhysicsEnginePlugin = PhysicsEngine.DefaultPluginFactory()) {\r\n if (!this._physicsPlugin.isSupported()) {\r\n throw new Error(\"Physics Engine \" + this._physicsPlugin.name + \" cannot be found. \" + \"Please make sure it is included.\");\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._impostors.forEach(function (impostor) {\r\n impostor.dispose();\r\n });\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 public addImpostor(impostor: PhysicsImpostor) {\r\n this._impostors.push(impostor);\r\n impostor.uniqueId = this._uniqueIdCounter++;\r\n //if no parent, generate the body\r\n if (!impostor.parent) {\r\n this._physicsPlugin.generatePhysicsBody(impostor);\r\n }\r\n }\r\n\r\n /**\r\n * Remove an impostor from the engine.\r\n * This impostor and its mesh will not longer be updated by the physics engine.\r\n * @param impostor the impostor to remove\r\n */\r\n public removeImpostor(impostor: PhysicsImpostor) {\r\n const index = this._impostors.indexOf(impostor);\r\n if (index > -1) {\r\n const removed = this._impostors.splice(index, 1);\r\n //Is it needed?\r\n if (removed.length) {\r\n this.getPhysicsPlugin().removePhysicsBody(impostor);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add a joint to the physics engine\r\n * @param mainImpostor defines the main impostor to which the joint is added.\r\n * @param connectedImpostor defines the impostor that is connected to the main impostor using this joint\r\n * @param joint defines the joint that will connect both impostors.\r\n */\r\n public addJoint(mainImpostor: PhysicsImpostor, connectedImpostor: PhysicsImpostor, joint: PhysicsJoint) {\r\n const impostorJoint = {\r\n mainImpostor: mainImpostor,\r\n connectedImpostor: connectedImpostor,\r\n joint: joint,\r\n };\r\n joint.physicsPlugin = this._physicsPlugin;\r\n this._joints.push(impostorJoint);\r\n this._physicsPlugin.generateJoint(impostorJoint);\r\n }\r\n\r\n /**\r\n * Removes a joint from the simulation\r\n * @param mainImpostor defines the impostor used with the joint\r\n * @param connectedImpostor defines the other impostor connected to the main one by the joint\r\n * @param joint defines the joint to remove\r\n */\r\n public removeJoint(mainImpostor: PhysicsImpostor, connectedImpostor: PhysicsImpostor, joint: PhysicsJoint) {\r\n const matchingJoints = this._joints.filter(function (impostorJoint) {\r\n return impostorJoint.connectedImpostor === connectedImpostor && impostorJoint.joint === joint && impostorJoint.mainImpostor === mainImpostor;\r\n });\r\n if (matchingJoints.length) {\r\n this._physicsPlugin.removeJoint(matchingJoints[0]);\r\n //TODO remove it from the list as well\r\n }\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 //check if any mesh has no body / requires an update\r\n this._impostors.forEach((impostor) => {\r\n if (impostor.isBodyInitRequired()) {\r\n this._physicsPlugin.generatePhysicsBody(impostor);\r\n }\r\n });\r\n\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._impostors);\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(): IPhysicsEnginePlugin {\r\n return this._physicsPlugin;\r\n }\r\n\r\n /**\r\n * Gets the list of physic impostors\r\n * @returns an array of PhysicsImpostor\r\n */\r\n public getImpostors(): Array<PhysicsImpostor> {\r\n return this._impostors;\r\n }\r\n\r\n /**\r\n * Gets the impostor for a physics enabled object\r\n * @param object defines the object impersonated by the impostor\r\n * @returns the PhysicsImpostor or null if not found\r\n */\r\n public getImpostorForPhysicsObject(object: IPhysicsEnabledObject): Nullable<PhysicsImpostor> {\r\n for (let i = 0; i < this._impostors.length; ++i) {\r\n if (this._impostors[i].object === object) {\r\n return this._impostors[i];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the impostor for a physics body object\r\n * @param body defines physics body used by the impostor\r\n * @returns the PhysicsImpostor or null if not found\r\n */\r\n public getImpostorWithPhysicsBody(body: any): Nullable<PhysicsImpostor> {\r\n for (let i = 0; i < this._impostors.length; ++i) {\r\n if (this._impostors[i].physicsBody === body) {\r\n return this._impostors[i];\r\n }\r\n }\r\n\r\n return null;\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 return this._physicsPlugin.raycast(from, to);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"physicsEngine.js","sourceRoot":"","sources":["../../../../lts/core/generated/Physics/physicsEngine.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC","sourcesContent":["// ES 6 Compatibility\r\nexport { PhysicsEngine } from \"./v1/physicsEngine\";\r\n"]}
@@ -1,14 +1,15 @@
1
1
  import type { Nullable } from "../types";
2
- import type { Observer } from "../Misc/observable";
3
2
  import { Observable } from "../Misc/observable";
4
3
  import type { Vector3 } from "../Maths/math.vector";
5
- import type { Mesh } from "../Meshes/mesh";
6
4
  import type { ISceneComponent } from "../sceneComponent";
7
5
  import { Scene } from "../scene";
8
- import type { Node } from "../node";
9
- import type { IPhysicsEngine, IPhysicsEnginePlugin } from "./IPhysicsEngine";
10
- import type { PhysicsImpostor } from "./physicsImpostor";
6
+ import type { IPhysicsEngine } from "./IPhysicsEngine";
7
+ import type { IPhysicsEnginePlugin as IPhysicsEnginePluginV1 } from "./v1/IPhysicsEnginePlugin";
8
+ import type { IPhysicsEnginePlugin as IPhysicsEnginePluginV2 } from "./v2/IPhysicsEnginePlugin";
11
9
  declare module "../scene" {
10
+ /**
11
+ *
12
+ */
12
13
  interface Scene {
13
14
  /** @internal (Backing field) */
14
15
  _physicsEngine: Nullable<IPhysicsEngine>;
@@ -25,7 +26,7 @@ declare module "../scene" {
25
26
  * @param plugin defines the physics engine to be used. defaults to CannonJS.
26
27
  * @returns a boolean indicating if the physics engine was initialized
27
28
  */
28
- enablePhysics(gravity?: Nullable<Vector3>, plugin?: IPhysicsEnginePlugin): boolean;
29
+ enablePhysics(gravity?: Nullable<Vector3>, plugin?: IPhysicsEnginePluginV1 | IPhysicsEnginePluginV2): boolean;
29
30
  /**
30
31
  * Disables and disposes the physics engine associated with the scene
31
32
  */
@@ -50,42 +51,6 @@ declare module "../scene" {
50
51
  onAfterPhysicsObservable: Observable<Scene>;
51
52
  }
52
53
  }
53
- declare module "../Meshes/abstractMesh" {
54
- interface AbstractMesh {
55
- /** @internal */
56
- _physicsImpostor: Nullable<PhysicsImpostor>;
57
- /**
58
- * Gets or sets impostor used for physic simulation
59
- * @see https://doc.babylonjs.com/features/featuresDeepDive/physics
60
- */
61
- physicsImpostor: Nullable<PhysicsImpostor>;
62
- /**
63
- * Gets the current physics impostor
64
- * @see https://doc.babylonjs.com/features/featuresDeepDive/physics
65
- * @returns a physics impostor or null
66
- */
67
- getPhysicsImpostor(): Nullable<PhysicsImpostor>;
68
- /** Apply a physic impulse to the mesh
69
- * @param force defines the force to apply
70
- * @param contactPoint defines where to apply the force
71
- * @returns the current mesh
72
- * @see https://doc.babylonjs.com/features/featuresDeepDive/physics/usingPhysicsEngine
73
- */
74
- applyImpulse(force: Vector3, contactPoint: Vector3): AbstractMesh;
75
- /**
76
- * Creates a physic joint between two meshes
77
- * @param otherMesh defines the other mesh to use
78
- * @param pivot1 defines the pivot to use on this mesh
79
- * @param pivot2 defines the pivot to use on the other mesh
80
- * @param options defines additional options (can be plugin dependent)
81
- * @returns the current mesh
82
- * @see https://www.babylonjs-playground.com/#0BS5U0#0
83
- */
84
- setPhysicsLinkWith(otherMesh: Mesh, pivot1: Vector3, pivot2: Vector3, options?: any): AbstractMesh;
85
- /** @internal */
86
- _disposePhysicsObserver: Nullable<Observer<Node>>;
87
- }
88
- }
89
54
  /**
90
55
  * Defines the physics engine scene component responsible to manage a physics engine
91
56
  */