Loading [MathJax]/jax/output/HTML-CSS/config.js
Jolt Physics
A multi core friendly Game Physics Engine
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
BodyInterface.h
Go to the documentation of this file.
1// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
13#include <Jolt/Core/Reference.h>
14
16
17class Body;
21class BroadPhase;
22class BodyManager;
24class PhysicsMaterial;
25class SubShapeID;
26class Shape;
30class AABox;
31class CollisionGroup;
32
36{
37public:
39 void Init(BodyLockInterface &inBodyLockInterface, BodyManager &inBodyManager, BroadPhase &inBroadPhase) { mBodyLockInterface = &inBodyLockInterface; mBodyManager = &inBodyManager; mBroadPhase = &inBroadPhase; }
40
43 Body * CreateBody(const BodyCreationSettings &inSettings);
44
47 Body * CreateSoftBody(const SoftBodyCreationSettings &inSettings);
48
52 Body * CreateBodyWithID(const BodyID &inBodyID, const BodyCreationSettings &inSettings);
53
55 Body * CreateSoftBodyWithID(const BodyID &inBodyID, const SoftBodyCreationSettings &inSettings);
56
60 Body * CreateBodyWithoutID(const BodyCreationSettings &inSettings) const;
61
63 Body * CreateSoftBodyWithoutID(const SoftBodyCreationSettings &inSettings) const;
64
67 void DestroyBodyWithoutID(Body *inBody) const;
68
71 bool AssignBodyID(Body *ioBody);
72
75 bool AssignBodyID(Body *ioBody, const BodyID &inBodyID);
76
78 Body * UnassignBodyID(const BodyID &inBodyID);
79
85 void UnassignBodyIDs(const BodyID *inBodyIDs, int inNumber, Body **outBodies);
86
89 void DestroyBody(const BodyID &inBodyID);
90
93 void DestroyBodies(const BodyID *inBodyIDs, int inNumber);
94
99 void AddBody(const BodyID &inBodyID, EActivation inActivationMode);
100
102 void RemoveBody(const BodyID &inBodyID);
103
105 bool IsAdded(const BodyID &inBodyID) const;
106
109 BodyID CreateAndAddBody(const BodyCreationSettings &inSettings, EActivation inActivationMode);
110
113 BodyID CreateAndAddSoftBody(const SoftBodyCreationSettings &inSettings, EActivation inActivationMode);
114
116 using AddState = void *;
117
120
124 AddState AddBodiesPrepare(BodyID *ioBodies, int inNumber);
125
128 void AddBodiesFinalize(BodyID *ioBodies, int inNumber, AddState inAddState, EActivation inActivationMode);
129
133 void AddBodiesAbort(BodyID *ioBodies, int inNumber, AddState inAddState);
134
137 void RemoveBodies(BodyID *ioBodies, int inNumber);
139
142 void ActivateBody(const BodyID &inBodyID);
143 void ActivateBodies(const BodyID *inBodyIDs, int inNumber);
144 void ActivateBodiesInAABox(const AABox &inBox, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter, const ObjectLayerFilter &inObjectLayerFilter);
145 void DeactivateBody(const BodyID &inBodyID);
146 void DeactivateBodies(const BodyID *inBodyIDs, int inNumber);
147 bool IsActive(const BodyID &inBodyID) const;
148 void ResetSleepTimer(const BodyID &inBodyID);
150
152 TwoBodyConstraint * CreateConstraint(const TwoBodyConstraintSettings *inSettings, const BodyID &inBodyID1, const BodyID &inBodyID2);
153
155 void ActivateConstraint(const TwoBodyConstraint *inConstraint);
156
159
161 RefConst<Shape> GetShape(const BodyID &inBodyID) const;
162
168 void SetShape(const BodyID &inBodyID, const Shape *inShape, bool inUpdateMassProperties, EActivation inActivationMode) const;
169
175 void NotifyShapeChanged(const BodyID &inBodyID, Vec3Arg inPreviousCenterOfMass, bool inUpdateMassProperties, EActivation inActivationMode) const;
177
180 void SetObjectLayer(const BodyID &inBodyID, ObjectLayer inLayer);
181 ObjectLayer GetObjectLayer(const BodyID &inBodyID) const;
183
186 void SetPositionAndRotation(const BodyID &inBodyID, RVec3Arg inPosition, QuatArg inRotation, EActivation inActivationMode);
187 void SetPositionAndRotationWhenChanged(const BodyID &inBodyID, RVec3Arg inPosition, QuatArg inRotation, EActivation inActivationMode);
188 void GetPositionAndRotation(const BodyID &inBodyID, RVec3 &outPosition, Quat &outRotation) const;
189 void SetPosition(const BodyID &inBodyID, RVec3Arg inPosition, EActivation inActivationMode);
190 RVec3 GetPosition(const BodyID &inBodyID) const;
191 RVec3 GetCenterOfMassPosition(const BodyID &inBodyID) const;
192 void SetRotation(const BodyID &inBodyID, QuatArg inRotation, EActivation inActivationMode);
193 Quat GetRotation(const BodyID &inBodyID) const;
194 RMat44 GetWorldTransform(const BodyID &inBodyID) const;
195 RMat44 GetCenterOfMassTransform(const BodyID &inBodyID) const;
197
199 void MoveKinematic(const BodyID &inBodyID, RVec3Arg inTargetPosition, QuatArg inTargetRotation, float inDeltaTime);
200
203 void SetLinearAndAngularVelocity(const BodyID &inBodyID, Vec3Arg inLinearVelocity, Vec3Arg inAngularVelocity);
204 void GetLinearAndAngularVelocity(const BodyID &inBodyID, Vec3 &outLinearVelocity, Vec3 &outAngularVelocity) const;
205 void SetLinearVelocity(const BodyID &inBodyID, Vec3Arg inLinearVelocity);
206 Vec3 GetLinearVelocity(const BodyID &inBodyID) const;
207 void AddLinearVelocity(const BodyID &inBodyID, Vec3Arg inLinearVelocity);
208 void AddLinearAndAngularVelocity(const BodyID &inBodyID, Vec3Arg inLinearVelocity, Vec3Arg inAngularVelocity);
209 void SetAngularVelocity(const BodyID &inBodyID, Vec3Arg inAngularVelocity);
210 Vec3 GetAngularVelocity(const BodyID &inBodyID) const;
211 Vec3 GetPointVelocity(const BodyID &inBodyID, RVec3Arg inPoint) const;
212
215 void SetPositionRotationAndVelocity(const BodyID &inBodyID, RVec3Arg inPosition, QuatArg inRotation, Vec3Arg inLinearVelocity, Vec3Arg inAngularVelocity);
216
219 void AddForce(const BodyID &inBodyID, Vec3Arg inForce, EActivation inActivationMode = EActivation::Activate);
220 void AddForce(const BodyID &inBodyID, Vec3Arg inForce, RVec3Arg inPoint, EActivation inActivationMode = EActivation::Activate);
221 void AddTorque(const BodyID &inBodyID, Vec3Arg inTorque, EActivation inActivationMode = EActivation::Activate);
222 void AddForceAndTorque(const BodyID &inBodyID, Vec3Arg inForce, Vec3Arg inTorque, EActivation inActivationMode = EActivation::Activate);
224
227 void AddImpulse(const BodyID &inBodyID, Vec3Arg inImpulse);
228 void AddImpulse(const BodyID &inBodyID, Vec3Arg inImpulse, RVec3Arg inPoint);
229 void AddAngularImpulse(const BodyID &inBodyID, Vec3Arg inAngularImpulse);
230 bool ApplyBuoyancyImpulse(const BodyID &inBodyID, RVec3Arg inSurfacePosition, Vec3Arg inSurfaceNormal, float inBuoyancy, float inLinearDrag, float inAngularDrag, Vec3Arg inFluidVelocity, Vec3Arg inGravity, float inDeltaTime);
232
235 EBodyType GetBodyType(const BodyID &inBodyID) const;
237
240 void SetMotionType(const BodyID &inBodyID, EMotionType inMotionType, EActivation inActivationMode);
241 EMotionType GetMotionType(const BodyID &inBodyID) const;
243
246 void SetMotionQuality(const BodyID &inBodyID, EMotionQuality inMotionQuality);
247 EMotionQuality GetMotionQuality(const BodyID &inBodyID) const;
249
251 Mat44 GetInverseInertia(const BodyID &inBodyID) const;
252
255 void SetRestitution(const BodyID &inBodyID, float inRestitution);
256 float GetRestitution(const BodyID &inBodyID) const;
258
261 void SetFriction(const BodyID &inBodyID, float inFriction);
262 float GetFriction(const BodyID &inBodyID) const;
264
267 void SetGravityFactor(const BodyID &inBodyID, float inGravityFactor);
268 float GetGravityFactor(const BodyID &inBodyID) const;
270
273 void SetUseManifoldReduction(const BodyID &inBodyID, bool inUseReduction);
274 bool GetUseManifoldReduction(const BodyID &inBodyID) const;
276
279 void SetCollisionGroup(const BodyID &inBodyID, const CollisionGroup &inCollisionGroup);
280 const CollisionGroup & GetCollisionGroup(const BodyID &inBodyID) const;
282
284 TransformedShape GetTransformedShape(const BodyID &inBodyID) const;
285
287 uint64 GetUserData(const BodyID &inBodyID) const;
288 void SetUserData(const BodyID &inBodyID, uint64 inUserData) const;
289
291 const PhysicsMaterial * GetMaterial(const BodyID &inBodyID, const SubShapeID &inSubShapeID) const;
292
294 void InvalidateContactCache(const BodyID &inBodyID);
295
296private:
298 JPH_INLINE void ActivateBodyInternal(Body &ioBody) const;
299
300 BodyLockInterface * mBodyLockInterface = nullptr;
301 BodyManager * mBodyManager = nullptr;
302 BroadPhase * mBroadPhase = nullptr;
303};
304
EBodyType
Type of body.
Definition BodyType.h:11
#define JPH_EXPORT
Definition Core.h:275
std::uint64_t uint64
Definition Core.h:491
#define JPH_NAMESPACE_END
Definition Core.h:419
#define JPH_NAMESPACE_BEGIN
Definition Core.h:413
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.
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
Axis aligned box.
Definition AABox.h:16
Settings for constructing a rigid body.
Definition BodyCreationSettings.h:31
Definition Body.h:39
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 Init(BodyLockInterface &inBodyLockInterface, BodyManager &inBodyManager, BroadPhase &inBroadPhase)
Initialize the interface (should only be called by PhysicsSystem)
Definition BodyInterface.h:39
void * AddState
Add state handle, used to keep track of a batch of bodies while adding them to the PhysicsSystem.
Definition BodyInterface.h:116
Base class interface for locking a body. Usually you will use BodyLockRead / BodyLockWrite / BodyLock...
Definition BodyLockInterface.h:17
Class that contains all bodies.
Definition BodyManager.h:44
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
Class that makes another class non-copyable. Usage: Inherit from NonCopyable.
Definition NonCopyable.h:11
Filter class for object layers.
Definition ObjectLayer.h:28
Definition PhysicsMaterial.h:23
Definition Quat.h:33
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
Definition TransformedShape.h:26
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
Definition Vec3.h:17