Program Listing for File physics_collider_component.h¶
↰ Return to documentation for file (rootex\framework\components\physics\physics_collider_component.h
)
#pragma once
#include "component.h"
#include "components/transform_component.h"
#include "btBulletDynamicsCommon.h"
btTransform MatTobtTransform(Matrix const& mat);
Matrix BtTransformToMat(btTransform const& trans);
btVector3 VecTobtVector3(Vector3 const& vec3);
Vector3 BtVector3ToVec(btVector3 const& btvec);
enum PhysicsMaterial;
enum class CollisionMask : unsigned int
{
None = 0,
Player = 1 << 0,
Enemy = 1 << 1,
Architecture = 1 << 2,
TriggerVolume = 1 << 3,
Other = 1 << 4,
All = Player | Enemy | Architecture | TriggerVolume | Other
};
class PhysicsColliderComponent : public Component, public btMotionState
{
DEPENDS_ON(TransformComponent);
Ref<btCollisionShape> m_CollisionShape;
Ref<btRigidBody> m_Body;
btScalar m_Mass;
Vector3 m_Gravity;
Vector3 m_AngularFactor;
float m_Volume;
bool m_IsMoveable;
bool m_IsGeneratesHitEvents;
bool m_IsKinematic;
bool m_IsSleepable;
bool m_IsCCD;
unsigned int m_CollisionGroup;
unsigned int m_CollisionMask;
PhysicsMaterial m_Material;
btVector3 m_LocalInertia;
void getWorldTransform(btTransform& worldTrans) const override;
void setWorldTransform(const btTransform& worldTrans) override;
PhysicsColliderComponent(
const PhysicsMaterial& material,
float volume,
const Vector3& gravity,
const Vector3& angularFactor,
int collisionGroup,
int collisionMask,
bool isMoveable,
bool isKinematic,
bool generatesHitEvents,
bool canSleep,
bool isCCD,
const Ref<btCollisionShape>& collisionShape);
friend class ECSFactory;
public:
static const ComponentID s_ID = (ComponentID)ComponentIDs::PhysicsColliderComponent;
~PhysicsColliderComponent() = default;
ComponentID getComponentID() const { return s_ID; }
bool setupData() override;
void onRemove() override;
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 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);
virtual void highlight();
virtual const char* getName() const override { return "PhysicsColliderComponent"; };
virtual JSON::json getJSON() const override;
virtual void draw() override;
void displayCollisionLayers(unsigned int& collision);
};