4aca9441b7eaac96f04676cc643ee26f1f6c7c5eea790b1c072f37df59a0edeb.json 40 KB

1
  1. {"ast":null,"code":"import { Matrix, Vector3, Quaternion, TmpVectors } from \"../../Maths/math.vector.js\";\n/**\n * PhysicsShape class.\n * This class is useful for creating a physics shape that can be used in a physics engine.\n * A Physic Shape determine how collision are computed. It must be attached to a body.\n */\nexport class PhysicsShape {\n /**\n * Constructs a new physics shape.\n * @param options The options for the physics shape. These are:\n * * type: The type of the shape. This can be one of the following: SPHERE, BOX, CAPSULE, CYLINDER, CONVEX_HULL, MESH, HEIGHTFIELD, CONTAINER\n * * parameters: The parameters of the shape.\n * * pluginData: The plugin data of the shape. This is used if you already have a reference to the object on the plugin side.\n * You need to specify either type or pluginData.\n * @param scene The scene the shape belongs to.\n *\n * This code is useful for creating a new physics shape with the given type, options, and scene.\n * It also checks that the physics engine and plugin version are correct.\n * If not, it throws an error. This ensures that the shape is created with the correct parameters and is compatible with the physics engine.\n */\n constructor(options, scene) {\n /**\n * V2 Physics plugin private data for single shape\n */\n this._pluginData = undefined;\n this._isTrigger = false;\n this._isDisposed = false;\n if (!scene) {\n return;\n }\n const physicsEngine = scene.getPhysicsEngine();\n if (!physicsEngine) {\n throw new Error(\"No Physics Engine available.\");\n }\n if (physicsEngine.getPluginVersion() != 2) {\n throw new Error(\"Plugin version is incorrect. Expected version 2.\");\n }\n const physicsPlugin = physicsEngine.getPhysicsPlugin();\n if (!physicsPlugin) {\n throw new Error(\"No Physics Plugin available.\");\n }\n this._physicsPlugin = physicsPlugin;\n if (options.pluginData !== undefined && options.pluginData !== null) {\n this._pluginData = options.pluginData;\n this._type = this._physicsPlugin.getShapeType(this);\n } else if (options.type !== undefined && options.type !== null) {\n var _options$parameters;\n this._type = options.type;\n const parameters = (_options$parameters = options.parameters) !== null && _options$parameters !== void 0 ? _options$parameters : {};\n this._physicsPlugin.initShape(this, options.type, parameters);\n }\n }\n /**\n * Returns the string \"PhysicsShape\".\n * @returns \"PhysicsShape\"\n */\n getClassName() {\n return \"PhysicsShape\";\n }\n /**\n * Returns the type of the physics shape.\n * @returns The type of the physics shape.\n */\n get type() {\n return this._type;\n }\n /**\n * Set the membership mask of a shape. This is a bitfield of arbitrary\n * \"categories\" to which the shape is a member. This is used in combination\n * with the collide mask to determine if this shape should collide with\n * another.\n *\n * @param membershipMask Bitfield of categories of this shape.\n */\n set filterMembershipMask(membershipMask) {\n this._physicsPlugin.setShapeFilterMembershipMask(this, membershipMask);\n }\n /**\n * Get the membership mask of a shape.\n * @returns Bitmask of categories which this shape is a member of.\n */\n get filterMembershipMask() {\n return this._physicsPlugin.getShapeFilterMembershipMask(this);\n }\n /**\n * Sets the collide mask of a shape. This is a bitfield of arbitrary\n * \"categories\" to which this shape collides with. Given two shapes,\n * the engine will check if the collide mask and membership overlap:\n * shapeA.filterMembershipMask & shapeB.filterCollideMask\n *\n * If this value is zero (i.e. shapeB only collides with categories\n * which shapeA is _not_ a member of) then the shapes will not collide.\n *\n * Note, the engine will also perform the same test with shapeA and\n * shapeB swapped; the shapes will not collide if either shape has\n * a collideMask which prevents collision with the other shape.\n *\n * @param collideMask Bitmask of categories this shape should collide with\n */\n set filterCollideMask(collideMask) {\n this._physicsPlugin.setShapeFilterCollideMask(this, collideMask);\n }\n /**\n *\n * @returns Bitmask of categories that this shape should collide with\n */\n get filterCollideMask() {\n return this._physicsPlugin.getShapeFilterCollideMask(this);\n }\n /**\n *\n * @param material\n */\n set material(material) {\n this._physicsPlugin.setMaterial(this, material);\n this._material = material;\n }\n /**\n * Returns the material of the physics shape.\n * @returns The material of the physics shape.\n */\n get material() {\n if (!this._material) {\n this._material = this._physicsPlugin.getMaterial(this);\n }\n return this._material;\n }\n /**\n * Sets the density of the physics shape.\n * @param density The density of the physics shape.\n */\n set density(density) {\n this._physicsPlugin.setDensity(this, density);\n }\n /**\n * Returns the density of the physics shape.\n * @returns The density of the physics shape.\n */\n get density() {\n return this._physicsPlugin.getDensity(this);\n }\n /**\n * Utility to add a child shape to this container,\n * automatically computing the relative transform between\n * the container shape and the child instance.\n *\n * @param parentTransform The transform node associated with this shape\n * @param newChild The new PhysicsShape to add\n * @param childTransform The transform node associated with the child shape\n */\n addChildFromParent(parentTransform, newChild, childTransform) {\n const childToWorld = childTransform.computeWorldMatrix(true);\n const parentToWorld = parentTransform.computeWorldMatrix(true);\n const childToParent = TmpVectors.Matrix[0];\n childToWorld.multiplyToRef(Matrix.Invert(parentToWorld), childToParent);\n const translation = TmpVectors.Vector3[0];\n const rotation = TmpVectors.Quaternion[0];\n const scale = TmpVectors.Vector3[1];\n childToParent.decompose(scale, rotation, translation);\n this._physicsPlugin.addChild(this, newChild, translation, rotation, scale);\n }\n /**\n * Adds a child shape to a container with an optional transform\n * @param newChild The new PhysicsShape to add\n * @param translation Optional position of the child shape relative to this shape\n * @param rotation Optional rotation of the child shape relative to this shape\n * @param scale Optional scale of the child shape relative to this shape\n */\n addChild(newChild, translation, rotation, scale) {\n this._physicsPlugin.addChild(this, newChild, translation, rotation, scale);\n }\n /**\n * Removes a child shape from this shape.\n * @param childIndex The index of the child shape to remove\n */\n removeChild(childIndex) {\n this._physicsPlugin.removeChild(this, childIndex);\n }\n /**\n * Returns the number of children of a physics shape.\n * @returns The number of children of a physics shape.\n */\n getNumChildren() {\n return this._physicsPlugin.getNumChildren(this);\n }\n /**\n * Returns the bounding box of the physics shape.\n * @returns The bounding box of the physics shape.\n */\n getBoundingBox() {\n return this._physicsPlugin.getBoundingBox(this);\n }\n set isTrigger(isTrigger) {\n if (this._isTrigger === isTrigger) {\n return;\n }\n this._isTrigger = isTrigger;\n this._physicsPlugin.setTrigger(this, isTrigger);\n }\n get isTrigger() {\n return this._isTrigger;\n }\n /**\n * Dispose the shape and release its associated resources.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n this._physicsPlugin.disposeShape(this);\n this._isDisposed = true;\n }\n}\n/**\n * Helper object to create a sphere shape\n */\nexport class PhysicsShapeSphere extends PhysicsShape {\n /**\n * Constructor for the Sphere Shape\n * @param center local center of the sphere\n * @param radius radius\n * @param scene scene to attach to\n */\n constructor(center, radius, scene) {\n super({\n type: 0 /* PhysicsShapeType.SPHERE */,\n parameters: {\n center: center,\n radius: radius\n }\n }, scene);\n }\n /**\n * Derive an approximate sphere from the mesh.\n * @param mesh node from which to derive the sphere shape\n * @returns PhysicsShapeSphere\n */\n static FromMesh(mesh) {\n const bounds = mesh.getBoundingInfo();\n const centerLocal = bounds.boundingSphere.center;\n const he = bounds.boundingBox.extendSize;\n const radius = Math.max(he.x, he.y, he.z);\n return new PhysicsShapeSphere(centerLocal, radius, mesh.getScene());\n }\n}\n/**\n * Helper object to create a capsule shape\n */\nexport class PhysicsShapeCapsule extends PhysicsShape {\n /**\n *\n * @param pointA Starting point that defines the capsule segment\n * @param pointB ending point of that same segment\n * @param radius radius\n * @param scene scene to attach to\n */\n constructor(pointA, pointB, radius, scene) {\n super({\n type: 1 /* PhysicsShapeType.CAPSULE */,\n parameters: {\n pointA: pointA,\n pointB: pointB,\n radius: radius\n }\n }, scene);\n }\n /**\n * Derive an approximate capsule from the mesh. Note, this is\n * not the optimal bounding capsule.\n * @param mesh Node from which to derive a cylinder shape\n * @returns Physics Shape Capsule\n */\n static FromMesh(mesh) {\n const boundsLocal = mesh.getBoundingInfo();\n const radius = boundsLocal.boundingBox.extendSize.x;\n const pointFromCenter = new Vector3(0, boundsLocal.boundingBox.extendSize.y - radius, 0);\n const pointA = boundsLocal.boundingBox.center.add(pointFromCenter);\n const pointB = boundsLocal.boundingBox.center.subtract(pointFromCenter);\n return new PhysicsShapeCapsule(pointA, pointB, radius, mesh.getScene());\n }\n}\n/**\n * Helper object to create a cylinder shape\n */\nexport class PhysicsShapeCylinder extends PhysicsShape {\n /**\n *\n * @param pointA Starting point that defines the cylinder segment\n * @param pointB ending point of that same segment\n * @param radius radius\n * @param scene scene to attach to\n */\n constructor(pointA, pointB, radius, scene) {\n super({\n type: 2 /* PhysicsShapeType.CYLINDER */,\n parameters: {\n pointA: pointA,\n pointB: pointB,\n radius: radius\n }\n }, scene);\n }\n /**\n * Derive an approximate cylinder from the mesh. Note, this is\n * not the optimal bounding cylinder.\n * @param mesh Node from which to derive a cylinder shape\n * @returns Physics Shape Cylinder\n */\n static FromMesh(mesh) {\n const boundsLocal = mesh.getBoundingInfo();\n const radius = boundsLocal.boundingBox.extendSize.x;\n const pointFromCenter = new Vector3(0, boundsLocal.boundingBox.extendSize.y, 0);\n const pointA = boundsLocal.boundingBox.center.add(pointFromCenter);\n const pointB = boundsLocal.boundingBox.center.subtract(pointFromCenter);\n return new PhysicsShapeCylinder(pointA, pointB, radius, mesh.getScene());\n }\n}\n/**\n * Helper object to create a box shape\n */\nexport class PhysicsShapeBox extends PhysicsShape {\n /**\n *\n * @param center local center of the box\n * @param rotation local orientation\n * @param extents size of the box in each direction\n * @param scene scene to attach to\n */\n constructor(center, rotation, extents, scene) {\n super({\n type: 3 /* PhysicsShapeType.BOX */,\n parameters: {\n center: center,\n rotation: rotation,\n extents: extents\n }\n }, scene);\n }\n /**\n *\n * @param mesh\n * @returns PhysicsShapeBox\n */\n static FromMesh(mesh) {\n const bounds = mesh.getBoundingInfo();\n const centerLocal = bounds.boundingBox.center;\n const extents = bounds.boundingBox.extendSize.scale(2.0); //<todo.eoin extendSize seems to really be half-extents?\n return new PhysicsShapeBox(centerLocal, Quaternion.Identity(), extents, mesh.getScene());\n }\n}\n/**\n * Helper object to create a convex hull shape\n */\nexport class PhysicsShapeConvexHull extends PhysicsShape {\n /**\n *\n * @param mesh the mesh to be used as topology infos for the convex hull\n * @param scene scene to attach to\n */\n constructor(mesh, scene) {\n super({\n type: 4 /* PhysicsShapeType.CONVEX_HULL */,\n parameters: {\n mesh: mesh\n }\n }, scene);\n }\n}\n/**\n * Helper object to create a mesh shape\n */\nexport class PhysicsShapeMesh extends PhysicsShape {\n /**\n *\n * @param mesh the mesh topology that will be used to create the shape\n * @param scene scene to attach to\n */\n constructor(mesh, scene) {\n super({\n type: 6 /* PhysicsShapeType.MESH */,\n parameters: {\n mesh: mesh\n }\n }, scene);\n }\n}\n/**\n * A shape container holds a variable number of shapes. Use AddChild to append to newly created parent container.\n */\nexport class PhysicsShapeContainer extends PhysicsShape {\n /**\n * Constructor of the Shape container\n * @param scene scene to attach to\n */\n constructor(scene) {\n super({\n type: 5 /* PhysicsShapeType.CONTAINER */,\n parameters: {}\n }, scene);\n }\n}\n/**\n * Helper object to create a heightfield Shape\n */\nexport class PhysicsShapeHeightField extends PhysicsShape {\n /**\n * Constructor of the Shape heightfield\n * @param heightFieldSizeX The size of the heightfield in the X axis\n * @param heightFieldSizeZ The size of the heightfield in the Z axis\n * @param numHeightFieldSamplesX The number of samples along the X axis\n * @param numHeightFieldSamplesZ The number of samples along the Z axis\n * @param heightFieldData The data for the heightfield\n * @param scene scene to attach to\n */\n constructor(heightFieldSizeX, heightFieldSizeZ, numHeightFieldSamplesX, numHeightFieldSamplesZ, heightFieldData, scene) {\n super({\n type: 7 /* PhysicsShapeType.HEIGHTFIELD */,\n parameters: {\n heightFieldSizeX: heightFieldSizeX,\n heightFieldSizeZ: heightFieldSizeZ,\n numHeightFieldSamplesX: numHeightFieldSamplesX,\n numHeightFieldSamplesZ: numHeightFieldSamplesZ,\n heightFieldData: heightFieldData\n }\n }, scene);\n }\n}\n/**\n * Helper object to create a ground mesh Shape\n */\nexport class PhysicsShapeGroundMesh extends PhysicsShape {\n /**\n * Constructor of the Shape heightfield\n * @param groundMesh ground mesh used for display\n * @param scene scene to attach to\n */\n constructor(groundMesh, scene) {\n super({\n type: 7 /* PhysicsShapeType.HEIGHTFIELD */,\n parameters: {\n groundMesh: groundMesh\n }\n }, scene);\n }\n}","map":{"version":3,"names":["Matrix","Vector3","Quaternion","TmpVectors","PhysicsShape","constructor","options","scene","_pluginData","undefined","_isTrigger","_isDisposed","physicsEngine","getPhysicsEngine","Error","getPluginVersion","physicsPlugin","getPhysicsPlugin","_physicsPlugin","pluginData","_type","getShapeType","type","_options$parameters","parameters","initShape","getClassName","filterMembershipMask","membershipMask","setShapeFilterMembershipMask","getShapeFilterMembershipMask","filterCollideMask","collideMask","setShapeFilterCollideMask","getShapeFilterCollideMask","material","setMaterial","_material","getMaterial","density","setDensity","getDensity","addChildFromParent","parentTransform","newChild","childTransform","childToWorld","computeWorldMatrix","parentToWorld","childToParent","multiplyToRef","Invert","translation","rotation","scale","decompose","addChild","removeChild","childIndex","getNumChildren","getBoundingBox","isTrigger","setTrigger","dispose","disposeShape","PhysicsShapeSphere","center","radius","FromMesh","mesh","bounds","getBoundingInfo","centerLocal","boundingSphere","he","boundingBox","extendSize","Math","max","x","y","z","getScene","PhysicsShapeCapsule","pointA","pointB","boundsLocal","pointFromCenter","add","subtract","PhysicsShapeCylinder","PhysicsShapeBox","extents","Identity","PhysicsShapeConvexHull","PhysicsShapeMesh","PhysicsShapeContainer","PhysicsShapeHeightField","heightFieldSizeX","heightFieldSizeZ","numHeightFieldSamplesX","numHeightFieldSamplesZ","heightFieldData","PhysicsShapeGroundMesh","groundMesh"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Physics/v2/physicsShape.js"],"sourcesContent":["import { Matrix, Vector3, Quaternion, TmpVectors } from \"../../Maths/math.vector.js\";\n/**\n * PhysicsShape class.\n * This class is useful for creating a physics shape that can be used in a physics engine.\n * A Physic Shape determine how collision are computed. It must be attached to a body.\n */\nexport class PhysicsShape {\n /**\n * Constructs a new physics shape.\n * @param options The options for the physics shape. These are:\n * * type: The type of the shape. This can be one of the following: SPHERE, BOX, CAPSULE, CYLINDER, CONVEX_HULL, MESH, HEIGHTFIELD, CONTAINER\n * * parameters: The parameters of the shape.\n * * pluginData: The plugin data of the shape. This is used if you already have a reference to the object on the plugin side.\n * You need to specify either type or pluginData.\n * @param scene The scene the shape belongs to.\n *\n * This code is useful for creating a new physics shape with the given type, options, and scene.\n * It also checks that the physics engine and plugin version are correct.\n * If not, it throws an error. This ensures that the shape is created with the correct parameters and is compatible with the physics engine.\n */\n constructor(options, scene) {\n /**\n * V2 Physics plugin private data for single shape\n */\n this._pluginData = undefined;\n this._isTrigger = false;\n this._isDisposed = false;\n if (!scene) {\n return;\n }\n const physicsEngine = scene.getPhysicsEngine();\n if (!physicsEngine) {\n throw new Error(\"No Physics Engine available.\");\n }\n if (physicsEngine.getPluginVersion() != 2) {\n throw new Error(\"Plugin version is incorrect. Expected version 2.\");\n }\n const physicsPlugin = physicsEngine.getPhysicsPlugin();\n if (!physicsPlugin) {\n throw new Error(\"No Physics Plugin available.\");\n }\n this._physicsPlugin = physicsPlugin;\n if (options.pluginData !== undefined && options.pluginData !== null) {\n this._pluginData = options.pluginData;\n this._type = this._physicsPlugin.getShapeType(this);\n }\n else if (options.type !== undefined && options.type !== null) {\n this._type = options.type;\n const parameters = options.parameters ?? {};\n this._physicsPlugin.initShape(this, options.type, parameters);\n }\n }\n /**\n * Returns the string \"PhysicsShape\".\n * @returns \"PhysicsShape\"\n */\n getClassName() {\n return \"PhysicsShape\";\n }\n /**\n * Returns the type of the physics shape.\n * @returns The type of the physics shape.\n */\n get type() {\n return this._type;\n }\n /**\n * Set the membership mask of a shape. This is a bitfield of arbitrary\n * \"categories\" to which the shape is a member. This is used in combination\n * with the collide mask to determine if this shape should collide with\n * another.\n *\n * @param membershipMask Bitfield of categories of this shape.\n */\n set filterMembershipMask(membershipMask) {\n this._physicsPlugin.setShapeFilterMembershipMask(this, membershipMask);\n }\n /**\n * Get the membership mask of a shape.\n * @returns Bitmask of categories which this shape is a member of.\n */\n get filterMembershipMask() {\n return this._physicsPlugin.getShapeFilterMembershipMask(this);\n }\n /**\n * Sets the collide mask of a shape. This is a bitfield of arbitrary\n * \"categories\" to which this shape collides with. Given two shapes,\n * the engine will check if the collide mask and membership overlap:\n * shapeA.filterMembershipMask & shapeB.filterCollideMask\n *\n * If this value is zero (i.e. shapeB only collides with categories\n * which shapeA is _not_ a member of) then the shapes will not collide.\n *\n * Note, the engine will also perform the same test with shapeA and\n * shapeB swapped; the shapes will not collide if either shape has\n * a collideMask which prevents collision with the other shape.\n *\n * @param collideMask Bitmask of categories this shape should collide with\n */\n set filterCollideMask(collideMask) {\n this._physicsPlugin.setShapeFilterCollideMask(this, collideMask);\n }\n /**\n *\n * @returns Bitmask of categories that this shape should collide with\n */\n get filterCollideMask() {\n return this._physicsPlugin.getShapeFilterCollideMask(this);\n }\n /**\n *\n * @param material\n */\n set material(material) {\n this._physicsPlugin.setMaterial(this, material);\n this._material = material;\n }\n /**\n * Returns the material of the physics shape.\n * @returns The material of the physics shape.\n */\n get material() {\n if (!this._material) {\n this._material = this._physicsPlugin.getMaterial(this);\n }\n return this._material;\n }\n /**\n * Sets the density of the physics shape.\n * @param density The density of the physics shape.\n */\n set density(density) {\n this._physicsPlugin.setDensity(this, density);\n }\n /**\n * Returns the density of the physics shape.\n * @returns The density of the physics shape.\n */\n get density() {\n return this._physicsPlugin.getDensity(this);\n }\n /**\n * Utility to add a child shape to this container,\n * automatically computing the relative transform between\n * the container shape and the child instance.\n *\n * @param parentTransform The transform node associated with this shape\n * @param newChild The new PhysicsShape to add\n * @param childTransform The transform node associated with the child shape\n */\n addChildFromParent(parentTransform, newChild, childTransform) {\n const childToWorld = childTransform.computeWorldMatrix(true);\n const parentToWorld = parentTransform.computeWorldMatrix(true);\n const childToParent = TmpVectors.Matrix[0];\n childToWorld.multiplyToRef(Matrix.Invert(parentToWorld), childToParent);\n const translation = TmpVectors.Vector3[0];\n const rotation = TmpVectors.Quaternion[0];\n const scale = TmpVectors.Vector3[1];\n childToParent.decompose(scale, rotation, translation);\n this._physicsPlugin.addChild(this, newChild, translation, rotation, scale);\n }\n /**\n * Adds a child shape to a container with an optional transform\n * @param newChild The new PhysicsShape to add\n * @param translation Optional position of the child shape relative to this shape\n * @param rotation Optional rotation of the child shape relative to this shape\n * @param scale Optional scale of the child shape relative to this shape\n */\n addChild(newChild, translation, rotation, scale) {\n this._physicsPlugin.addChild(this, newChild, translation, rotation, scale);\n }\n /**\n * Removes a child shape from this shape.\n * @param childIndex The index of the child shape to remove\n */\n removeChild(childIndex) {\n this._physicsPlugin.removeChild(this, childIndex);\n }\n /**\n * Returns the number of children of a physics shape.\n * @returns The number of children of a physics shape.\n */\n getNumChildren() {\n return this._physicsPlugin.getNumChildren(this);\n }\n /**\n * Returns the bounding box of the physics shape.\n * @returns The bounding box of the physics shape.\n */\n getBoundingBox() {\n return this._physicsPlugin.getBoundingBox(this);\n }\n set isTrigger(isTrigger) {\n if (this._isTrigger === isTrigger) {\n return;\n }\n this._isTrigger = isTrigger;\n this._physicsPlugin.setTrigger(this, isTrigger);\n }\n get isTrigger() {\n return this._isTrigger;\n }\n /**\n * Dispose the shape and release its associated resources.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n this._physicsPlugin.disposeShape(this);\n this._isDisposed = true;\n }\n}\n/**\n * Helper object to create a sphere shape\n */\nexport class PhysicsShapeSphere extends PhysicsShape {\n /**\n * Constructor for the Sphere Shape\n * @param center local center of the sphere\n * @param radius radius\n * @param scene scene to attach to\n */\n constructor(center, radius, scene) {\n super({ type: 0 /* PhysicsShapeType.SPHERE */, parameters: { center: center, radius: radius } }, scene);\n }\n /**\n * Derive an approximate sphere from the mesh.\n * @param mesh node from which to derive the sphere shape\n * @returns PhysicsShapeSphere\n */\n static FromMesh(mesh) {\n const bounds = mesh.getBoundingInfo();\n const centerLocal = bounds.boundingSphere.center;\n const he = bounds.boundingBox.extendSize;\n const radius = Math.max(he.x, he.y, he.z);\n return new PhysicsShapeSphere(centerLocal, radius, mesh.getScene());\n }\n}\n/**\n * Helper object to create a capsule shape\n */\nexport class PhysicsShapeCapsule extends PhysicsShape {\n /**\n *\n * @param pointA Starting point that defines the capsule segment\n * @param pointB ending point of that same segment\n * @param radius radius\n * @param scene scene to attach to\n */\n constructor(pointA, pointB, radius, scene) {\n super({ type: 1 /* PhysicsShapeType.CAPSULE */, parameters: { pointA: pointA, pointB: pointB, radius: radius } }, scene);\n }\n /**\n * Derive an approximate capsule from the mesh. Note, this is\n * not the optimal bounding capsule.\n * @param mesh Node from which to derive a cylinder shape\n * @returns Physics Shape Capsule\n */\n static FromMesh(mesh) {\n const boundsLocal = mesh.getBoundingInfo();\n const radius = boundsLocal.boundingBox.extendSize.x;\n const pointFromCenter = new Vector3(0, boundsLocal.boundingBox.extendSize.y - radius, 0);\n const pointA = boundsLocal.boundingBox.center.add(pointFromCenter);\n const pointB = boundsLocal.boundingBox.center.subtract(pointFromCenter);\n return new PhysicsShapeCapsule(pointA, pointB, radius, mesh.getScene());\n }\n}\n/**\n * Helper object to create a cylinder shape\n */\nexport class PhysicsShapeCylinder extends PhysicsShape {\n /**\n *\n * @param pointA Starting point that defines the cylinder segment\n * @param pointB ending point of that same segment\n * @param radius radius\n * @param scene scene to attach to\n */\n constructor(pointA, pointB, radius, scene) {\n super({ type: 2 /* PhysicsShapeType.CYLINDER */, parameters: { pointA: pointA, pointB: pointB, radius: radius } }, scene);\n }\n /**\n * Derive an approximate cylinder from the mesh. Note, this is\n * not the optimal bounding cylinder.\n * @param mesh Node from which to derive a cylinder shape\n * @returns Physics Shape Cylinder\n */\n static FromMesh(mesh) {\n const boundsLocal = mesh.getBoundingInfo();\n const radius = boundsLocal.boundingBox.extendSize.x;\n const pointFromCenter = new Vector3(0, boundsLocal.boundingBox.extendSize.y, 0);\n const pointA = boundsLocal.boundingBox.center.add(pointFromCenter);\n const pointB = boundsLocal.boundingBox.center.subtract(pointFromCenter);\n return new PhysicsShapeCylinder(pointA, pointB, radius, mesh.getScene());\n }\n}\n/**\n * Helper object to create a box shape\n */\nexport class PhysicsShapeBox extends PhysicsShape {\n /**\n *\n * @param center local center of the box\n * @param rotation local orientation\n * @param extents size of the box in each direction\n * @param scene scene to attach to\n */\n constructor(center, rotation, extents, scene) {\n super({ type: 3 /* PhysicsShapeType.BOX */, parameters: { center: center, rotation: rotation, extents: extents } }, scene);\n }\n /**\n *\n * @param mesh\n * @returns PhysicsShapeBox\n */\n static FromMesh(mesh) {\n const bounds = mesh.getBoundingInfo();\n const centerLocal = bounds.boundingBox.center;\n const extents = bounds.boundingBox.extendSize.scale(2.0); //<todo.eoin extendSize seems to really be half-extents?\n return new PhysicsShapeBox(centerLocal, Quaternion.Identity(), extents, mesh.getScene());\n }\n}\n/**\n * Helper object to create a convex hull shape\n */\nexport class PhysicsShapeConvexHull extends PhysicsShape {\n /**\n *\n * @param mesh the mesh to be used as topology infos for the convex hull\n * @param scene scene to attach to\n */\n constructor(mesh, scene) {\n super({ type: 4 /* PhysicsShapeType.CONVEX_HULL */, parameters: { mesh: mesh } }, scene);\n }\n}\n/**\n * Helper object to create a mesh shape\n */\nexport class PhysicsShapeMesh extends PhysicsShape {\n /**\n *\n * @param mesh the mesh topology that will be used to create the shape\n * @param scene scene to attach to\n */\n constructor(mesh, scene) {\n super({ type: 6 /* PhysicsShapeType.MESH */, parameters: { mesh: mesh } }, scene);\n }\n}\n/**\n * A shape container holds a variable number of shapes. Use AddChild to append to newly created parent container.\n */\nexport class PhysicsShapeContainer extends PhysicsShape {\n /**\n * Constructor of the Shape container\n * @param scene scene to attach to\n */\n constructor(scene) {\n super({ type: 5 /* PhysicsShapeType.CONTAINER */, parameters: {} }, scene);\n }\n}\n/**\n * Helper object to create a heightfield Shape\n */\nexport class PhysicsShapeHeightField extends PhysicsShape {\n /**\n * Constructor of the Shape heightfield\n * @param heightFieldSizeX The size of the heightfield in the X axis\n * @param heightFieldSizeZ The size of the heightfield in the Z axis\n * @param numHeightFieldSamplesX The number of samples along the X axis\n * @param numHeightFieldSamplesZ The number of samples along the Z axis\n * @param heightFieldData The data for the heightfield\n * @param scene scene to attach to\n */\n constructor(heightFieldSizeX, heightFieldSizeZ, numHeightFieldSamplesX, numHeightFieldSamplesZ, heightFieldData, scene) {\n super({\n type: 7 /* PhysicsShapeType.HEIGHTFIELD */,\n parameters: {\n heightFieldSizeX: heightFieldSizeX,\n heightFieldSizeZ: heightFieldSizeZ,\n numHeightFieldSamplesX: numHeightFieldSamplesX,\n numHeightFieldSamplesZ: numHeightFieldSamplesZ,\n heightFieldData: heightFieldData,\n },\n }, scene);\n }\n}\n/**\n * Helper object to create a ground mesh Shape\n */\nexport class PhysicsShapeGroundMesh extends PhysicsShape {\n /**\n * Constructor of the Shape heightfield\n * @param groundMesh ground mesh used for display\n * @param scene scene to attach to\n */\n constructor(groundMesh, scene) {\n super({ type: 7 /* PhysicsShapeType.HEIGHTFIELD */, parameters: { groundMesh: groundMesh } }, scene);\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}