Program Listing for File collision_component.h

Return to documentation for file (rootex/framework/components/physics/collision_component.h)

#pragma once

#include "common/types.h"
#include "component.h"
#include "hit.h"

#include "btBulletCollisionCommon.h"

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 CollisionComponent : public Component
{
protected:
    Ref<btCollisionObject> m_CollisionObject;
    unsigned int m_CollisionGroup;
    unsigned int m_CollisionMask;

    void detachCollisionObject();
    void attachCollisionObject();

public:
    CollisionComponent(Entity& owner, int collisionGroup, int collisionMask);
    virtual ~CollisionComponent() = default;

    virtual void handleHit(Hit* h);

    void onRemove() override;
    JSON::json getJSON() const override;
    void draw() override;
    void displayCollisionLayers(unsigned int& collision);
};