Program Listing for File rigid_body_component.h¶
↰ Return to documentation for file (rootex/framework/components/physics/rigid_body_component.h
)
#pragma once
#include "component.h"
#include "components/space/transform_component.h"
#include "core/physics/bullet_conversions.h"
#include "collision_component.h"
#include "btBulletDynamicsCommon.h"
enum PhysicsMaterial;
class RigidBodyComponent : public CollisionComponent, public btMotionState
{
DEPENDS_ON(TransformComponent);
protected:
Ref<btCollisionShape> m_CollisionShape;
btRigidBody* m_Body = nullptr;
bool m_IsGeneratesHitEvents;
btScalar m_Mass;
Vector3 m_Gravity;
Vector3 m_AngularFactor;
Vector3 m_Offset;
float m_Volume;
bool m_IsMoveable;
bool m_IsKinematic;
bool m_IsSleepable;
bool m_IsCCD;
PhysicsMaterial m_Material;
btVector3 m_LocalInertia;
RigidBodyComponent(
Entity& owner,
const PhysicsMaterial& material,
float volume,
const Vector3& offset,
const Vector3& gravity,
const Vector3& angularFactor,
int collisionGroup,
int collisionMask,
bool isMoveable,
bool isKinematic,
bool generatesHitEvents,
bool canSleep,
bool isCCD,
const Ref<btCollisionShape>& collisionShape);
void getWorldTransform(btTransform& worldTrans) const override;
void setWorldTransform(const btTransform& worldTrans) override;
void updateTransform();
void handleHit(Hit* hit) override;
public:
virtual ~RigidBodyComponent() = default;
void applyForce(const Vector3& force);
void applyTorque(const Vector3& torque);
Vector3 getAngularFactor() const { return m_AngularFactor; }
void setAngularFactor(const Vector3& factors);
void setAxisLock(bool enabled);
Vector3 getOffset() const { return m_Offset; };
void setOffset(const Vector3& offset);
Vector3 getGravity() const { return m_Gravity; };
void setGravity(const Vector3& gravity);
PhysicsMaterial getMaterial() const;
Vector3 getVelocity();
void setVelocity(const Vector3& velocity);
Vector3 getAngularVelocity();
void setAngularVelocity(const Vector3& angularVel);
void translate(const Vector3& vec);
void setTransform(const Matrix& mat);
Matrix getTransform();
bool isMoveable() { return m_IsMoveable; }
void setMoveable(bool enabled);
bool canSleep() { return m_IsSleepable; }
void setSleepable(bool enabled);
bool isCCD() { return m_IsCCD; }
void setCCD(bool enabled);
bool isGeneratesHitEvents() { return m_IsGeneratesHitEvents; }
void setGeneratedHitEvents(bool enabled) { m_IsGeneratesHitEvents = enabled; }
bool isKinematic() { return m_IsKinematic; }
void setKinematic(bool enabled);
void setupRigidBody();
bool setupData() override;
JSON::json getJSON() const override;
void draw() override;
void highlight();
};