2#include "utilities/Stream.hpp"
3#ifdef StevEngine_PHYSICS
4#include "main/Component.hpp"
5#include "utilities/Vector3.hpp"
6#include "utilities/Quaternion.hpp"
7#include "physics/Colliders.hpp"
8#include "physics/Layers.hpp"
12#include <Jolt/Physics/Collision/Shape/StaticCompoundShape.h>
13#include <Jolt/Physics/Body/BodyManager.h>
14#include <Jolt/Physics/Body/BodyCreationSettings.h>
16#define RIGIDBODY_TYPE "RigidBody"
18namespace StevEngine::Physics {
40 double gravityFactor = 1.0,
41 double linearDamping = 0.0,
42 double angularDamping = 0.0,
43 JPH::EAllowedDOFs allowedDOFs = JPH::EAllowedDOFs::All,
44 double maxLinearVelocity = 0.0,
45 double maxAngularVelocity = 0.0
47 this->LinearDamping = linearDamping;
48 this->AngularDamping = angularDamping;
49 this->MaxLinearVelocity = maxLinearVelocity;
50 this->MaxAngularVelocity = maxAngularVelocity;
51 this->GravityFactor = gravityFactor;
52 this->AllowedDOFs = allowedDOFs;
63 friend class Collider;
67 JPH::Body*
GetBody()
const {
return body; }
73 static const bool unique =
true;
75 std::vector<Collider*> colliders;
77 JPH::Ref<JPH::Shape> shape;
98 std::string
GetType()
const {
return RIGIDBODY_TYPE; }
121 void Update(
double deltaTime);
147 void TransformUpdate(
bool position,
bool rotation,
bool scale);
185 void SetFriction(
float inFriction) {
return body->SetFriction(inFriction); }
Component()
Create new component.
Definition Component.cpp:10
static bool RegisterComponentType(std::string type)
Register a component type for creation.
Definition Component.hpp:133
Core game object class.
Definition GameObject.hpp:35
Physics collision layer.
Definition Layers.hpp:25
void SetLinearVelocity(Utilities::Vector3 inLinearVelocity)
Set the linear velocity.
Definition RigidBody.hpp:197
const Layer * layer
Physics collision layer.
Definition RigidBody.hpp:69
void AddImpulse(Utilities::Vector3 inImpulse)
Add linear impulse to center of mass.
Definition RigidBody.hpp:260
void Deactivate()
Clean up when deactivated.
Definition RigidBody.cpp:46
Utilities::Vector3 GetPointVelocity(Utilities::Vector3 inPoint) const
Get velocity of a point in world space.
Definition RigidBody.hpp:235
Utilities::Vector3 GetAngularVelocity() const
Get the current angular velocity.
Definition RigidBody.hpp:209
void AddTorque(Utilities::Vector3 inTorque)
Add torque around center of mass.
Definition RigidBody.hpp:254
~RigidBody()
Clean up resources.
Definition RigidBody.cpp:101
void SetFriction(float inFriction)
Set the friction coefficient.
Definition RigidBody.hpp:185
RigidBody(JPH::EMotionType motionType, Layer *layer, float mass=1000)
Create rigid body.
Definition RigidBody.cpp:14
void AddForce(Utilities::Vector3 inForce)
Add force to center of mass.
Definition RigidBody.hpp:241
Utilities::Vector3 GetLinearVelocity() const
Get the current linear velocity.
Definition RigidBody.hpp:191
JPH::Body * GetBody() const
Get Jolt physics body.
Definition RigidBody.hpp:67
bool IsDynamic() const
Check if this is a dynamic body.
Definition RigidBody.hpp:173
bool IsStatic() const
Check if this is a static body.
Definition RigidBody.hpp:161
Utilities::Stream Export(Utilities::StreamType type) const
Serialize component to a stream.
Definition RigidBody.cpp:106
void SetMotionProperties(MotionProperties properties)
Set motion properties.
Definition RigidBody.cpp:89
const float mass
Body mass in kg.
Definition RigidBody.hpp:70
void AddAngularImpulse(Utilities::Vector3 inAngularImpulse)
Add angular impulse around center of mass.
Definition RigidBody.hpp:273
bool IsKinematic() const
Check if this is a kinematic body.
Definition RigidBody.hpp:167
float GetFriction() const
Get the friction coefficient.
Definition RigidBody.hpp:179
const JPH::EMotionType motionType
Motion type (static/dynamic/kinematic)
Definition RigidBody.hpp:68
void SetAngularVelocityClamped(Utilities::Vector3 inAngularVelocity)
Set angular velocity clamped to the maximum configured value.
Definition RigidBody.hpp:221
Utilities::Vector3 GetPointVelocityCOM(Utilities::Vector3 inPointRelativeToCOM) const
Get velocity of a point relative to center of mass.
Definition RigidBody.hpp:228
void AddImpulse(Utilities::Vector3 inImpulse, Utilities::Vector3 inPosition)
Add linear impulse at specified world space position.
Definition RigidBody.hpp:267
void SetAngularVelocity(Utilities::Vector3 inAngularVelocity)
Set the angular velocity.
Definition RigidBody.hpp:215
void Start()
Initialize component.
Definition RigidBody.cpp:17
void SetLinearVelocityClamped(Utilities::Vector3 inLinearVelocity)
Set linear velocity clamped to the maximum configured value.
Definition RigidBody.hpp:203
void MoveKinematic(Utilities::Vector3 inTargetPosition, Utilities::Quaternion inTargetRotation, float inDeltaTime)
Move kinematic body towards target transform.
Definition RigidBody.hpp:281
std::string GetType() const
Get component type.
Definition RigidBody.hpp:98
void Update(double deltaTime)
Update transform from physics.
Definition RigidBody.cpp:50
void AddForce(Utilities::Vector3 inForce, Utilities::Vector3 inPosition)
Add force at specified world space position.
Definition RigidBody.hpp:248
bool IsActive() const
Check if body is currently active in the physics simulation.
Definition RigidBody.hpp:155
Quaternion for 3D rotations.
Definition Quaternion.hpp:19
Stream for serialization of data.
Definition Stream.hpp:20
3D vector class
Definition Vector3.hpp:19
Motion properties configuration for rigid bodies.
Definition RigidBody.hpp:22
JPH::EAllowedDOFs AllowedDOFs
Allowed degrees of freedom.
Definition RigidBody.hpp:28
double LinearDamping
Linear velocity damping factor.
Definition RigidBody.hpp:23
double GravityFactor
Gravity influence multiplier.
Definition RigidBody.hpp:27
double AngularDamping
Angular velocity damping factor.
Definition RigidBody.hpp:24
double MaxLinearVelocity
Maximum linear velocity.
Definition RigidBody.hpp:25
MotionProperties(double gravityFactor=1.0, double linearDamping=0.0, double angularDamping=0.0, JPH::EAllowedDOFs allowedDOFs=JPH::EAllowedDOFs::All, double maxLinearVelocity=0.0, double maxAngularVelocity=0.0)
Create motion properties configuration.
Definition RigidBody.hpp:39
double MaxAngularVelocity
Maximum angular velocity.
Definition RigidBody.hpp:26