67 void DestroyBodyWithoutID(
Body *inBody)
const;
71 bool AssignBodyID(
Body *ioBody);
75 bool AssignBodyID(
Body *ioBody,
const BodyID &inBodyID);
85 void UnassignBodyIDs(
const BodyID *inBodyIDs,
int inNumber,
Body **outBodies);
89 void DestroyBody(
const BodyID &inBodyID);
93 void DestroyBodies(
const BodyID *inBodyIDs,
int inNumber);
102 void RemoveBody(
const BodyID &inBodyID);
105 bool IsAdded(
const BodyID &inBodyID)
const;
317 JPH_INLINE
void ActivateBodyInternal(
Body &ioBody)
const;
EBodyType
Type of body.
Definition BodyType.h:11
#define JPH_EXPORT
Definition Core.h:275
std::uint64_t uint64
Definition Core.h:504
#define JPH_NAMESPACE_END
Definition Core.h:425
#define JPH_NAMESPACE_BEGIN
Definition Core.h:419
EActivation
Enum used by AddBody to determine if the body needs to be initially active.
Definition EActivation.h:11
@ Activate
Activate the body, making it part of the simulation.
Definition EActivation.h:12
const Quat QuatArg
Definition MathTypes.h:28
const Vec3 Vec3Arg
Definition MathTypes.h:19
EMotionQuality
Motion quality, or how well it detects collisions when it has a high velocity.
Definition MotionQuality.h:11
EMotionType
Motion type of a physics body.
Definition MotionType.h:11
uint16 ObjectLayer
Definition ObjectLayer.h:16
Vec3Arg RVec3Arg
Definition Real.h:30
Mat44 RMat44
Definition Real.h:31
Vec3 RVec3
Definition Real.h:29
Axis aligned box.
Definition AABox.h:16
Settings for constructing a rigid body.
Definition BodyCreationSettings.h:31
ID of a body. This is a way of reasoning about bodies in a multithreaded simulation while avoiding ra...
Definition BodyID.h:13
Definition BodyInterface.h:36
void ActivateBodiesInAABox(const AABox &inBox, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter, const ObjectLayerFilter &inObjectLayerFilter)
Definition BodyInterface.cpp:230
void SetShape(const BodyID &inBodyID, const Shape *inShape, bool inUpdateMassProperties, EActivation inActivationMode) const
Definition BodyInterface.cpp:298
Vec3 GetPointVelocity(const BodyID &inBodyID, RVec3Arg inPoint) const
Velocity of point inPoint (in world space, e.g. on the surface of the body) of the body.
Definition BodyInterface.cpp:686
float GetFriction(const BodyID &inBodyID) const
Definition BodyInterface.cpp:943
void DeactivateBodies(const BodyID *inBodyIDs, int inNumber)
Definition BodyInterface.cpp:249
Vec3 GetAngularVelocity(const BodyID &inBodyID) const
Definition BodyInterface.cpp:673
void SetPositionAndRotationWhenChanged(const BodyID &inBodyID, RVec3Arg inPosition, QuatArg inRotation, EActivation inActivationMode)
Will only update the position/rotation and activate the body when the difference is larger than a ver...
Definition BodyInterface.cpp:412
void SetMotionType(const BodyID &inBodyID, EMotionType inMotionType, EActivation inActivationMode)
Definition BodyInterface.cpp:858
void SetIsSensor(const BodyID &inBodyID, bool inIsSensor)
Definition BodyInterface.cpp:1026
void SetPosition(const BodyID &inBodyID, RVec3Arg inPosition, EActivation inActivationMode)
Definition BodyInterface.cpp:456
void SetRotation(const BodyID &inBodyID, QuatArg inRotation, EActivation inActivationMode)
Definition BodyInterface.cpp:497
Quat GetRotation(const BodyID &inBodyID) const
Definition BodyInterface.cpp:520
void ResetSleepTimer(const BodyID &inBodyID)
Definition BodyInterface.cpp:262
void SetGravityFactor(const BodyID &inBodyID, float inGravityFactor)
Definition BodyInterface.cpp:952
EMotionType GetMotionType(const BodyID &inBodyID) const
Definition BodyInterface.cpp:886
void SetObjectLayer(const BodyID &inBodyID, ObjectLayer inLayer)
The collision layer this body belongs to (determines if two objects can collide).
Definition BodyInterface.cpp:357
RVec3 GetCenterOfMassPosition(const BodyID &inBodyID) const
Definition BodyInterface.cpp:488
float GetGravityFactor(const BodyID &inBodyID) const
Definition BodyInterface.cpp:959
uint64 GetUserData(const BodyID &inBodyID) const
Get the user data for a body.
Definition BodyInterface.cpp:1067
float GetMaxLinearVelocity(const BodyID &inBodyID) const
Definition BodyInterface.cpp:975
void SetPositionAndRotation(const BodyID &inBodyID, RVec3Arg inPosition, QuatArg inRotation, EActivation inActivationMode)
Definition BodyInterface.cpp:389
void SetMotionQuality(const BodyID &inBodyID, EMotionQuality inMotionQuality)
How well it detects collisions when it has a high velocity.
Definition BodyInterface.cpp:895
EMotionQuality GetMotionQuality(const BodyID &inBodyID) const
Definition BodyInterface.cpp:902
Vec3 GetLinearVelocity(const BodyID &inBodyID) const
Definition BodyInterface.cpp:611
void GetPositionAndRotation(const BodyID &inBodyID, RVec3 &outPosition, Quat &outRotation) const
Definition BodyInterface.cpp:440
void SetLinearVelocity(const BodyID &inBodyID, Vec3Arg inLinearVelocity)
Definition BodyInterface.cpp:595
RMat44 GetCenterOfMassTransform(const BodyID &inBodyID) const
Definition BodyInterface.cpp:538
float GetRestitution(const BodyID &inBodyID) const
Definition BodyInterface.cpp:927
void SetCollisionGroup(const BodyID &inBodyID, const CollisionGroup &inCollisionGroup)
Definition BodyInterface.cpp:1042
const PhysicsMaterial * GetMaterial(const BodyID &inBodyID, const SubShapeID &inSubShapeID) const
Get the material for a particular sub shape.
Definition BodyInterface.cpp:1083
ObjectLayer GetObjectLayer(const BodyID &inBodyID) const
Definition BodyInterface.cpp:380
void SetAngularVelocity(const BodyID &inBodyID, Vec3Arg inAngularVelocity)
Definition BodyInterface.cpp:657
void RemoveBodies(BodyID *ioBodies, int inNumber)
Definition BodyInterface.cpp:202
void MoveKinematic(const BodyID &inBodyID, RVec3Arg inTargetPosition, QuatArg inTargetRotation, float inDeltaTime)
Set velocity of body such that it will be positioned at inTargetPosition/Rotation in inDeltaTime seco...
Definition BodyInterface.cpp:547
void Init(BodyLockInterface &inBodyLockInterface, BodyManager &inBodyManager, BroadPhase &inBroadPhase)
Initialize the interface (should only be called by PhysicsSystem).
Definition BodyInterface.h:39
void SetMaxAngularVelocity(const BodyID &inBodyID, float inAngularVelocity)
Definition BodyInterface.cpp:984
void DeactivateBody(const BodyID &inBodyID)
Definition BodyInterface.cpp:237
void AddBodiesFinalize(BodyID *ioBodies, int inNumber, AddState inAddState, EActivation inActivationMode)
Definition BodyInterface.cpp:185
const CollisionGroup & GetCollisionGroup(const BodyID &inBodyID) const
Definition BodyInterface.cpp:1049
void AddAngularImpulse(const BodyID &inBodyID, Vec3Arg inAngularImpulse)
Definition BodyInterface.cpp:796
bool IsActive(const BodyID &inBodyID) const
Checks if a body is currently actively simulating.
Definition BodyInterface.cpp:256
void SetLinearAndAngularVelocity(const BodyID &inBodyID, Vec3Arg inLinearVelocity, Vec3Arg inAngularVelocity)
Definition BodyInterface.cpp:561
void ActivateConstraint(const TwoBodyConstraint *inConstraint)
Definition BodyInterface.cpp:283
void AddLinearAndAngularVelocity(const BodyID &inBodyID, Vec3Arg inLinearVelocity, Vec3Arg inAngularVelocity)
Add linear and angular to current velocities.
Definition BodyInterface.cpp:640
void SetUseManifoldReduction(const BodyID &inBodyID, bool inUseReduction)
Definition BodyInterface.cpp:1000
void SetRestitution(const BodyID &inBodyID, float inRestitution)
Definition BodyInterface.cpp:920
RMat44 GetWorldTransform(const BodyID &inBodyID) const
Definition BodyInterface.cpp:529
bool IsSensor(const BodyID &inBodyID) const
Definition BodyInterface.cpp:1033
RVec3 GetPosition(const BodyID &inBodyID) const
Definition BodyInterface.cpp:479
void AddLinearVelocity(const BodyID &inBodyID, Vec3Arg inLinearVelocity)
Add velocity to current velocity.
Definition BodyInterface.cpp:624
void AddForce(const BodyID &inBodyID, Vec3Arg inForce, EActivation inActivationMode=EActivation::Activate)
Definition BodyInterface.cpp:699
Mat44 GetInverseInertia(const BodyID &inBodyID) const
Get inverse inertia tensor in world space.
Definition BodyInterface.cpp:911
void NotifyShapeChanged(const BodyID &inBodyID, Vec3Arg inPreviousCenterOfMass, bool inUpdateMassProperties, EActivation inActivationMode) const
Definition BodyInterface.cpp:328
void ActivateBodies(const BodyID *inBodyIDs, int inNumber)
Definition BodyInterface.cpp:223
AddState AddBodiesPrepare(BodyID *ioBodies, int inNumber)
Definition BodyInterface.cpp:180
void GetLinearAndAngularVelocity(const BodyID &inBodyID, Vec3 &outLinearVelocity, Vec3 &outAngularVelocity) const
Definition BodyInterface.cpp:578
void ActivateBody(const BodyID &inBodyID)
Definition BodyInterface.cpp:213
void AddBodiesAbort(BodyID *ioBodies, int inNumber, AddState inAddState)
Definition BodyInterface.cpp:197
void AddTorque(const BodyID &inBodyID, Vec3Arg inTorque, EActivation inActivationMode=EActivation::Activate)
Definition BodyInterface.cpp:731
void SetUserData(const BodyID &inBodyID, uint64 inUserData) const
Definition BodyInterface.cpp:1076
EBodyType GetBodyType(const BodyID &inBodyID) const
Definition BodyInterface.cpp:877
void SetMaxLinearVelocity(const BodyID &inBodyID, float inLinearVelocity)
Definition BodyInterface.cpp:968
TwoBodyConstraint * CreateConstraint(const TwoBodyConstraintSettings *inSettings, const BodyID &inBodyID1, const BodyID &inBodyID2)
Create a two body constraint.
Definition BodyInterface.cpp:269
void AddForceAndTorque(const BodyID &inBodyID, Vec3Arg inForce, Vec3Arg inTorque, EActivation inActivationMode=EActivation::Activate)
A combination of Body::AddForce and Body::AddTorque.
Definition BodyInterface.cpp:747
void SetPositionRotationAndVelocity(const BodyID &inBodyID, RVec3Arg inPosition, QuatArg inRotation, Vec3Arg inLinearVelocity, Vec3Arg inAngularVelocity)
Definition BodyInterface.cpp:829
void AddImpulse(const BodyID &inBodyID, Vec3Arg inImpulse)
Applied at center of mass.
Definition BodyInterface.cpp:764
TransformedShape GetTransformedShape(const BodyID &inBodyID) const
Get transform and shape for this body, used to perform collision detection.
Definition BodyInterface.cpp:1058
bool ApplyBuoyancyImpulse(const BodyID &inBodyID, RVec3Arg inSurfacePosition, Vec3Arg inSurfaceNormal, float inBuoyancy, float inLinearDrag, float inAngularDrag, Vec3Arg inFluidVelocity, Vec3Arg inGravity, float inDeltaTime)
Definition BodyInterface.cpp:812
void * AddState
Add state handle, used to keep track of a batch of bodies while adding them to the PhysicsSystem.
Definition BodyInterface.h:116
void InvalidateContactCache(const BodyID &inBodyID)
Set the Body::EFlags::InvalidateContactCache flag for the specified body. This means that the collisi...
Definition BodyInterface.cpp:1092
RefConst< Shape > GetShape(const BodyID &inBodyID) const
Get the current shape.
Definition BodyInterface.cpp:289
bool GetUseManifoldReduction(const BodyID &inBodyID) const
Definition BodyInterface.cpp:1017
float GetMaxAngularVelocity(const BodyID &inBodyID) const
Definition BodyInterface.cpp:991
void SetFriction(const BodyID &inBodyID, float inFriction)
Definition BodyInterface.cpp:936
Base class interface for locking a body. Usually you will use BodyLockRead / BodyLockWrite / BodyLock...
Definition BodyLockInterface.h:17
Definition BodyManager.h:47
Used to do coarse collision detection operations to quickly prune out bodies that will not collide.
Definition BroadPhase.h:26
Filter class for broadphase layers.
Definition BroadPhaseLayer.h:94
Definition CollisionGroup.h:20
Holds a 4x4 matrix of floats, but supports also operations on the 3x3 upper left part of the matrix.
Definition Mat44.h:13
Filter class for object layers.
Definition ObjectLayer.h:28
Definition PhysicsMaterial.h:23
Definition Reference.h:163
Base class for all shapes (collision volume of a body). Defines a virtual interface for collision det...
Definition Shape.h:186
Definition SoftBodyCreationSettings.h:18
A sub shape id contains a path to an element (usually a triangle or other primitive type) of a compou...
Definition SubShapeID.h:23
Base class for all constraints that involve 2 bodies. Body1 is usually considered the parent,...
Definition TwoBodyConstraint.h:27
Base class for settings for all constraints that involve 2 bodies.
Definition TwoBodyConstraint.h:16