#pragma once enum ColliderType_e { CT_None, CT_Aabb, CT_Circle }; class Entity; class ColliderComponent { public: Entity* owner = nullptr; ColliderType_e type = CT_None; bool active = true; bool Intersect(ColliderComponent* b); bool IntersectEx(const a8::Vec2& pos, ColliderComponent* b); bool IntersectSegment(a8::Vec2& p0, a8::Vec2& p1); bool CalcSafePoint(ColliderComponent* b, a8::Vec2& new_pos); bool CalcSafePointEx(const a8::Vec2& a_pos, ColliderComponent* b, a8::Vec2& new_pos); }; class AabbCollider : public ColliderComponent { public: a8::Vec2 _min; a8::Vec2 _max; AabbCollider() { type = CT_Aabb; }; }; class CircleCollider : public ColliderComponent { public: a8::Vec2 pos; float rad = 0.0f; CircleCollider() { type = CT_Circle; }; }; void DestoryCollider(ColliderComponent* collider);