Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
Character.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
9
11
14{
15public:
17
20
22 float mMass = 80.0f;
23
25 float mFriction = 0.2f;
26
28 float mGravityFactor = 1.0f;
29};
30
36{
37public:
39
46 Character(const CharacterSettings *inSettings, RVec3Arg inPosition, QuatArg inRotation, uint64 inUserData, PhysicsSystem *inSystem);
47
49 virtual ~Character() override;
50
52 void AddToPhysicsSystem(EActivation inActivationMode = EActivation::Activate, bool inLockBodies = true);
53
55 void RemoveFromPhysicsSystem(bool inLockBodies = true);
56
58 void Activate(bool inLockBodies = true);
59
63 void PostSimulation(float inMaxSeparationDistance, bool inLockBodies = true);
64
66 void SetLinearAndAngularVelocity(Vec3Arg inLinearVelocity, Vec3Arg inAngularVelocity, bool inLockBodies = true);
67
69 Vec3 GetLinearVelocity(bool inLockBodies = true) const;
70
72 void SetLinearVelocity(Vec3Arg inLinearVelocity, bool inLockBodies = true);
73
75 void AddLinearVelocity(Vec3Arg inLinearVelocity, bool inLockBodies = true);
76
78 void AddImpulse(Vec3Arg inImpulse, bool inLockBodies = true);
79
81 BodyID GetBodyID() const { return mBodyID; }
82
84 void GetPositionAndRotation(RVec3 &outPosition, Quat &outRotation, bool inLockBodies = true) const;
85
87 void SetPositionAndRotation(RVec3Arg inPosition, QuatArg inRotation, EActivation inActivationMode = EActivation::Activate, bool inLockBodies = true) const;
88
90 RVec3 GetPosition(bool inLockBodies = true) const;
91
93 void SetPosition(RVec3Arg inPostion, EActivation inActivationMode = EActivation::Activate, bool inLockBodies = true);
94
96 Quat GetRotation(bool inLockBodies = true) const;
97
99 void SetRotation(QuatArg inRotation, EActivation inActivationMode = EActivation::Activate, bool inLockBodies = true);
100
102 RVec3 GetCenterOfMassPosition(bool inLockBodies = true) const;
103
105 RMat44 GetWorldTransform(bool inLockBodies = true) const;
106
108 void SetLayer(ObjectLayer inLayer, bool inLockBodies = true);
109
112 bool SetShape(const Shape *inShape, float inMaxPenetrationDepth, bool inLockBodies = true);
113
123 void CheckCollision(RVec3Arg inPosition, QuatArg inRotation, Vec3Arg inMovementDirection, float inMaxSeparationDistance, const Shape *inShape, RVec3Arg inBaseOffset, CollideShapeCollector &ioCollector, bool inLockBodies = true) const;
124
125private:
127 void CheckCollision(RMat44Arg inCenterOfMassTransform, Vec3Arg inMovementDirection, float inMaxSeparationDistance, const Shape *inShape, RVec3Arg inBaseOffset, CollideShapeCollector &ioCollector, bool inLockBodies) const;
128
130 void CheckCollision(const Shape *inShape, float inMaxSeparationDistance, RVec3Arg inBaseOffset, CollideShapeCollector &ioCollector, bool inLockBodies) const;
131
133 BodyID mBodyID;
134
136 ObjectLayer mLayer;
137};
138
#define JPH_NAMESPACE_END
Definition: Core.h:240
uint64_t uint64
Definition: Core.h:313
#define JPH_NAMESPACE_BEGIN
Definition: Core.h:234
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.
#define JPH_OVERRIDE_NEW_DELETE
Macro to override the new and delete functions.
Definition: Memory.h:29
uint16 ObjectLayer
Definition: ObjectLayer.h:16
ID of a body. This is a way of reasoning about bodies in a multithreaded simulation while avoiding ra...
Definition: BodyID.h:13
Base class for character class.
Definition: CharacterBase.h:46
Base class for configuration of a character.
Definition: CharacterBase.h:21
Definition: Character.h:36
void SetLinearVelocity(Vec3Arg inLinearVelocity, bool inLockBodies=true)
Set the linear velocity of the character (m / s)
Definition: Character.cpp:219
bool SetShape(const Shape *inShape, float inMaxPenetrationDepth, bool inLockBodies=true)
Definition: Character.cpp:281
void SetPositionAndRotation(RVec3Arg inPosition, QuatArg inRotation, EActivation inActivationMode=EActivation::Activate, bool inLockBodies=true) const
Set the position / rotation of the body, optionally activating it.
Definition: Character.cpp:239
void CheckCollision(RVec3Arg inPosition, QuatArg inRotation, Vec3Arg inMovementDirection, float inMaxSeparationDistance, const Shape *inShape, RVec3Arg inBaseOffset, CollideShapeCollector &ioCollector, bool inLockBodies=true) const
Get all contacts for the character at a particular location.
Definition: Character.cpp:93
Vec3 GetLinearVelocity(bool inLockBodies=true) const
Get the linear velocity of the character (m / s)
Definition: Character.cpp:214
BodyID GetBodyID() const
Get the body associated with this character.
Definition: Character.h:81
void SetPosition(RVec3Arg inPostion, EActivation inActivationMode=EActivation::Activate, bool inLockBodies=true)
Set the position of the character, optionally activating it.
Definition: Character.cpp:249
void RemoveFromPhysicsSystem(bool inLockBodies=true)
Remove bodies and constraints from the system.
Definition: Character.cpp:62
virtual ~Character() override
Destructor.
Definition: Character.cpp:51
Quat GetRotation(bool inLockBodies=true) const
Get the rotation of the character.
Definition: Character.cpp:254
void PostSimulation(float inMaxSeparationDistance, bool inLockBodies=true)
Definition: Character.cpp:121
RMat44 GetWorldTransform(bool inLockBodies=true) const
Calculate the world transform of the character.
Definition: Character.cpp:269
void SetLinearAndAngularVelocity(Vec3Arg inLinearVelocity, Vec3Arg inAngularVelocity, bool inLockBodies=true)
Control the velocity of the character.
Definition: Character.cpp:209
void SetRotation(QuatArg inRotation, EActivation inActivationMode=EActivation::Activate, bool inLockBodies=true)
Set the rotation of the character, optionally activating it.
Definition: Character.cpp:259
RVec3 GetCenterOfMassPosition(bool inLockBodies=true) const
Position of the center of mass of the underlying rigid body.
Definition: Character.cpp:264
void AddImpulse(Vec3Arg inImpulse, bool inLockBodies=true)
Add impulse to the center of mass of the character.
Definition: Character.cpp:229
RVec3 GetPosition(bool inLockBodies=true) const
Get the position of the character.
Definition: Character.cpp:244
void SetLayer(ObjectLayer inLayer, bool inLockBodies=true)
Update the layer of the character.
Definition: Character.cpp:274
void GetPositionAndRotation(RVec3 &outPosition, Quat &outRotation, bool inLockBodies=true) const
Get position / rotation of the body.
Definition: Character.cpp:234
void AddToPhysicsSystem(EActivation inActivationMode=EActivation::Activate, bool inLockBodies=true)
Add bodies and constraints to the system and optionally activate the bodies.
Definition: Character.cpp:57
void AddLinearVelocity(Vec3Arg inLinearVelocity, bool inLockBodies=true)
Add world space linear velocity to current velocity (m / s)
Definition: Character.cpp:224
Contains the configuration of a character.
Definition: Character.h:14
float mGravityFactor
Value to multiply gravity with for this character.
Definition: Character.h:28
JPH_OVERRIDE_NEW_DELETE ObjectLayer mLayer
Layer that this character will be added to.
Definition: Character.h:19
float mMass
Mass of the character.
Definition: Character.h:22
float mFriction
Friction for the character.
Definition: Character.h:25
Virtual interface that allows collecting multiple collision results.
Definition: CollisionCollector.h:45
Holds a 4x4 matrix of floats, but supports also operations on the 3x3 upper left part of the matrix.
Definition: Mat44.h:13
Definition: PhysicsSystem.h:28
Definition: Quat.h:33
Base class for all shapes (collision volume of a body). Defines a virtual interface for collision det...
Definition: Shape.h:170
Definition: Vec3.h:16