@babylonjs/core 5.17.1 → 5.20.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 (159) hide show
  1. package/Debug/debugLayer.d.ts +36 -0
  2. package/Debug/debugLayer.js.map +1 -1
  3. package/DeviceInput/InputDevices/deviceSource.d.ts +1 -1
  4. package/DeviceInput/InputDevices/deviceSource.js.map +1 -1
  5. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +1 -1
  6. package/DeviceInput/InputDevices/deviceSourceManager.js +1 -1
  7. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  8. package/DeviceInput/{Helpers/eventFactory.d.ts → eventFactory.d.ts} +4 -4
  9. package/DeviceInput/{Helpers/eventFactory.js → eventFactory.js} +2 -2
  10. package/DeviceInput/eventFactory.js.map +1 -0
  11. package/DeviceInput/{InputDevices/inputInterfaces.d.ts → inputInterfaces.d.ts} +2 -2
  12. package/DeviceInput/{InputDevices/inputInterfaces.js → inputInterfaces.js} +0 -0
  13. package/DeviceInput/inputInterfaces.js.map +1 -0
  14. package/DeviceInput/{InputDevices/internalDeviceSourceManager.d.ts → internalDeviceSourceManager.d.ts} +7 -7
  15. package/DeviceInput/{InputDevices/internalDeviceSourceManager.js → internalDeviceSourceManager.js} +2 -2
  16. package/DeviceInput/internalDeviceSourceManager.js.map +1 -0
  17. package/DeviceInput/{InputDevices/nativeDeviceInputSystem.d.ts → nativeDeviceInputSystem.d.ts} +2 -2
  18. package/DeviceInput/{InputDevices/nativeDeviceInputSystem.js → nativeDeviceInputSystem.js} +2 -2
  19. package/DeviceInput/nativeDeviceInputSystem.js.map +1 -0
  20. package/DeviceInput/{InputDevices/webDeviceInputSystem.d.ts → webDeviceInputSystem.d.ts} +3 -3
  21. package/DeviceInput/{InputDevices/webDeviceInputSystem.js → webDeviceInputSystem.js} +4 -4
  22. package/DeviceInput/webDeviceInputSystem.js.map +1 -0
  23. package/Engines/Extensions/engine.query.js +5 -1
  24. package/Engines/Extensions/engine.query.js.map +1 -1
  25. package/Engines/Extensions/engine.transformFeedback.js +5 -1
  26. package/Engines/Extensions/engine.transformFeedback.js.map +1 -1
  27. package/Engines/Extensions/engine.views.d.ts +13 -0
  28. package/Engines/Extensions/engine.views.js +16 -1
  29. package/Engines/Extensions/engine.views.js.map +1 -1
  30. package/Engines/Native/nativeInterfaces.d.ts +1 -1
  31. package/Engines/Native/nativeInterfaces.js.map +1 -1
  32. package/Engines/engine.d.ts +15 -240
  33. package/Engines/engineFeatures.d.ts +2 -0
  34. package/Engines/engineFeatures.js.map +1 -1
  35. package/Engines/nativeEngine.js +1 -0
  36. package/Engines/nativeEngine.js.map +1 -1
  37. package/Engines/nullEngine.js +1 -0
  38. package/Engines/nullEngine.js.map +1 -1
  39. package/Engines/thinEngine.d.ts +1 -1
  40. package/Engines/thinEngine.js +14 -4
  41. package/Engines/thinEngine.js.map +1 -1
  42. package/Engines/webgpuEngine.js +1 -0
  43. package/Engines/webgpuEngine.js.map +1 -1
  44. package/Gizmos/axisDragGizmo.d.ts +31 -9
  45. package/Gizmos/axisDragGizmo.js.map +1 -1
  46. package/Gizmos/axisScaleGizmo.d.ts +46 -14
  47. package/Gizmos/axisScaleGizmo.js.map +1 -1
  48. package/Gizmos/boundingBoxGizmo.d.ts +94 -19
  49. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  50. package/Gizmos/cameraGizmo.d.ts +23 -6
  51. package/Gizmos/cameraGizmo.js.map +1 -1
  52. package/Gizmos/gizmo.d.ts +48 -6
  53. package/Gizmos/gizmo.js.map +1 -1
  54. package/Gizmos/gizmoManager.d.ts +25 -17
  55. package/Gizmos/gizmoManager.js.map +1 -1
  56. package/Gizmos/lightGizmo.d.ts +25 -8
  57. package/Gizmos/lightGizmo.js.map +1 -1
  58. package/Gizmos/planeDragGizmo.d.ts +30 -9
  59. package/Gizmos/planeDragGizmo.js.map +1 -1
  60. package/Gizmos/planeRotationGizmo.d.ts +45 -15
  61. package/Gizmos/planeRotationGizmo.js.map +1 -1
  62. package/Gizmos/positionGizmo.d.ts +53 -17
  63. package/Gizmos/positionGizmo.js +1 -1
  64. package/Gizmos/positionGizmo.js.map +1 -1
  65. package/Gizmos/rotationGizmo.d.ts +35 -10
  66. package/Gizmos/rotationGizmo.js.map +1 -1
  67. package/Gizmos/scaleGizmo.d.ts +49 -18
  68. package/Gizmos/scaleGizmo.js.map +1 -1
  69. package/Loading/Plugins/babylonFileLoader.js +16 -4
  70. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  71. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.d.ts +39 -0
  72. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +97 -0
  73. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -0
  74. package/Materials/Node/Blocks/Fragment/index.d.ts +1 -0
  75. package/Materials/Node/Blocks/Fragment/index.js +1 -0
  76. package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
  77. package/Materials/Node/Blocks/Vertex/lightInformationBlock.d.ts +18 -0
  78. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +85 -1
  79. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  80. package/Materials/Node/nodeMaterial.d.ts +6 -0
  81. package/Materials/Node/nodeMaterial.js +11 -0
  82. package/Materials/Node/nodeMaterial.js.map +1 -1
  83. package/Materials/Textures/Procedurals/proceduralTexture.js +5 -1
  84. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  85. package/Materials/Textures/renderTargetTexture.js +3 -0
  86. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  87. package/Materials/Textures/texture.js +9 -5
  88. package/Materials/Textures/texture.js.map +1 -1
  89. package/Materials/index.d.ts +1 -0
  90. package/Materials/index.js +1 -0
  91. package/Materials/index.js.map +1 -1
  92. package/Maths/math.vector.d.ts +134 -8
  93. package/Maths/math.vector.js +168 -36
  94. package/Maths/math.vector.js.map +1 -1
  95. package/Meshes/Compression/dracoCompression.js +1 -1
  96. package/Meshes/Compression/dracoCompression.js.map +1 -1
  97. package/Meshes/groundMesh.js +1 -1
  98. package/Meshes/groundMesh.js.map +1 -1
  99. package/Meshes/mesh.js +1 -0
  100. package/Meshes/mesh.js.map +1 -1
  101. package/Meshes/transformNode.js +1 -0
  102. package/Meshes/transformNode.js.map +1 -1
  103. package/Misc/assetsManager.d.ts +9 -0
  104. package/Misc/assetsManager.js +3 -1
  105. package/Misc/assetsManager.js.map +1 -1
  106. package/Misc/basis.js +10 -4
  107. package/Misc/basis.js.map +1 -1
  108. package/Misc/computePressure.d.ts +9 -3
  109. package/Misc/computePressure.js +13 -5
  110. package/Misc/computePressure.js.map +1 -1
  111. package/Misc/fileTools.js +2 -2
  112. package/Misc/fileTools.js.map +1 -1
  113. package/Misc/iInspectable.d.ts +12 -2
  114. package/Misc/iInspectable.js +4 -0
  115. package/Misc/iInspectable.js.map +1 -1
  116. package/Misc/khronosTextureContainer2.js +1 -1
  117. package/Misc/khronosTextureContainer2.js.map +1 -1
  118. package/Misc/sceneSerializer.js +1 -1
  119. package/Misc/sceneSerializer.js.map +1 -1
  120. package/Misc/tools.d.ts +2 -2
  121. package/Misc/tools.js +4 -1
  122. package/Misc/tools.js.map +1 -1
  123. package/Offline/database.js +6 -8
  124. package/Offline/database.js.map +1 -1
  125. package/Particles/solidParticleSystem.d.ts +1 -0
  126. package/Particles/solidParticleSystem.js +4 -1
  127. package/Particles/solidParticleSystem.js.map +1 -1
  128. package/Physics/Plugins/ammoJSPlugin.d.ts +2 -2
  129. package/Physics/Plugins/ammoJSPlugin.js +29 -29
  130. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  131. package/Physics/Plugins/cannonJSPlugin.d.ts +2 -2
  132. package/Physics/Plugins/cannonJSPlugin.js +26 -26
  133. package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
  134. package/Physics/Plugins/oimoJSPlugin.js +9 -11
  135. package/Physics/Plugins/oimoJSPlugin.js.map +1 -1
  136. package/Physics/physicsImpostor.d.ts +6 -6
  137. package/Physics/physicsImpostor.js +15 -8
  138. package/Physics/physicsImpostor.js.map +1 -1
  139. package/Shaders/sprites.fragment.js +1 -1
  140. package/Shaders/sprites.fragment.js.map +1 -1
  141. package/Sprites/spriteRenderer.js +1 -1
  142. package/Sprites/spriteRenderer.js.map +1 -1
  143. package/XR/webXRDefaultExperience.d.ts +10 -0
  144. package/XR/webXRDefaultExperience.js +2 -12
  145. package/XR/webXRDefaultExperience.js.map +1 -1
  146. package/XR/webXRExperienceHelper.js +12 -12
  147. package/XR/webXRExperienceHelper.js.map +1 -1
  148. package/node.d.ts +2 -0
  149. package/node.js +2 -0
  150. package/node.js.map +1 -1
  151. package/package.json +1 -1
  152. package/scene.d.ts +1 -1
  153. package/scene.js +5 -3
  154. package/scene.js.map +1 -1
  155. package/DeviceInput/Helpers/eventFactory.js.map +0 -1
  156. package/DeviceInput/InputDevices/inputInterfaces.js.map +0 -1
  157. package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +0 -1
  158. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +0 -1
  159. package/DeviceInput/InputDevices/webDeviceInputSystem.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/** @hidden */\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 });\r\n collidingImpostor.onCollide({ body: mainImpostor.physicsBody, point: 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 impule 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 extendSize = i.getObjectExtendSize();\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 = extendSize.x;\r\n const radiusY = extendSize.y;\r\n const radiusZ = extendSize.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(extendSize.x) / 2;\r\n const sizeY = checkWithEpsilon(extendSize.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(extendSize.x);\r\n const sizeY = checkWithEpsilon(extendSize.y);\r\n const sizeZ = checkWithEpsilon(extendSize.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 //Same as : (older oimo versions)\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\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":"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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/** @hidden */\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 });\r\n collidingImpostor.onCollide({ body: mainImpostor.physicsBody, point: 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 impule 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"]}
@@ -329,7 +329,7 @@ export declare class PhysicsImpostor {
329
329
  setScalingUpdated(): void;
330
330
  /**
331
331
  * Force a regeneration of this or the parent's impostor's body.
332
- * Use under cautious - This will remove all joints already implemented.
332
+ * Use with caution - This will remove all previously-instantiated joints.
333
333
  */
334
334
  forceUpdate(): void;
335
335
  /**
@@ -354,10 +354,10 @@ export declare class PhysicsImpostor {
354
354
  */
355
355
  resetUpdateFlags(): void;
356
356
  /**
357
- * Gets the object extend size
358
- * @returns the object extend size
357
+ * Gets the object extents
358
+ * @returns the object extents
359
359
  */
360
- getObjectExtendSize(): Vector3;
360
+ getObjectExtents(): Vector3;
361
361
  /**
362
362
  * Gets the object center
363
363
  * @returns The object center
@@ -376,7 +376,7 @@ export declare class PhysicsImpostor {
376
376
  */
377
377
  setParam(paramName: string, value: number): void;
378
378
  /**
379
- * Specifically change the body's mass option. Won't recreate the physics body object
379
+ * Specifically change the body's mass. Won't recreate the physics body object
380
380
  * @param mass The mass of the physics imposter
381
381
  */
382
382
  setMass(mass: number): void;
@@ -433,7 +433,7 @@ export declare class PhysicsImpostor {
433
433
  */
434
434
  registerOnPhysicsCollide(collideAgainst: PhysicsImpostor | Array<PhysicsImpostor>, func: (collider: PhysicsImpostor, collidedAgainst: PhysicsImpostor, point: Nullable<Vector3>) => void): void;
435
435
  /**
436
- * Unregisters the physics imposter on contact
436
+ * Unregisters the physics imposter's collision callback
437
437
  * @param collideAgainst The physics object to collide against
438
438
  * @param func Callback to execute on collision
439
439
  */
@@ -106,8 +106,15 @@ var PhysicsImpostor = /** @class */ (function () {
106
106
  }
107
107
  // take the position set and make it the absolute position of this object.
108
108
  _this.object.setAbsolutePosition(_this.object.position);
109
- _this._deltaRotation && _this.object.rotationQuaternion && _this.object.rotationQuaternion.multiplyToRef(_this._deltaRotation, _this.object.rotationQuaternion);
110
- _this.object.translate(_this._deltaPosition, 1);
109
+ if (_this._deltaRotation) {
110
+ _this.object.rotationQuaternion && _this.object.rotationQuaternion.multiplyToRef(_this._deltaRotation, _this.object.rotationQuaternion);
111
+ _this._deltaPosition.applyRotationQuaternionToRef(_this._deltaRotation, PhysicsImpostor._TmpVecs[0]);
112
+ _this.object.translate(PhysicsImpostor._TmpVecs[0], 1);
113
+ }
114
+ else {
115
+ _this.object.translate(_this._deltaPosition, 1);
116
+ }
117
+ _this.object.computeWorldMatrix(true);
111
118
  };
112
119
  /**
113
120
  * Legacy collision detection event support
@@ -421,7 +428,7 @@ var PhysicsImpostor = /** @class */ (function () {
421
428
  };
422
429
  /**
423
430
  * Force a regeneration of this or the parent's impostor's body.
424
- * Use under cautious - This will remove all joints already implemented.
431
+ * Use with caution - This will remove all previously-instantiated joints.
425
432
  */
426
433
  PhysicsImpostor.prototype.forceUpdate = function () {
427
434
  this._init();
@@ -476,10 +483,10 @@ var PhysicsImpostor = /** @class */ (function () {
476
483
  this._bodyUpdateRequired = false;
477
484
  };
478
485
  /**
479
- * Gets the object extend size
480
- * @returns the object extend size
486
+ * Gets the object extents
487
+ * @returns the object extents
481
488
  */
482
- PhysicsImpostor.prototype.getObjectExtendSize = function () {
489
+ PhysicsImpostor.prototype.getObjectExtents = function () {
483
490
  if (this.object.getBoundingInfo) {
484
491
  var q = this.object.rotationQuaternion;
485
492
  var scaling = this.object.scaling.clone();
@@ -537,7 +544,7 @@ var PhysicsImpostor = /** @class */ (function () {
537
544
  this._bodyUpdateRequired = true;
538
545
  };
539
546
  /**
540
- * Specifically change the body's mass option. Won't recreate the physics body object
547
+ * Specifically change the body's mass. Won't recreate the physics body object
541
548
  * @param mass The mass of the physics imposter
542
549
  */
543
550
  PhysicsImpostor.prototype.setMass = function (mass) {
@@ -640,7 +647,7 @@ var PhysicsImpostor = /** @class */ (function () {
640
647
  this._onPhysicsCollideCallbacks.push({ callback: func, otherImpostors: collidedAgainstList });
641
648
  };
642
649
  /**
643
- * Unregisters the physics imposter on contact
650
+ * Unregisters the physics imposter's collision callback
644
651
  * @param collideAgainst The physics object to collide against
645
652
  * @param func Callback to execute on collision
646
653
  */