aozhiwei d4790c4b5b 1
2022-09-22 21:41:36 +08:00

76 lines
1.4 KiB
C++

#pragma once
enum ColliderType_e
{
CT_None,
CT_Aabb,
CT_Circle,
CT_Obb,
CT_Arc
};
class Entity;
class ColliderComponent
{
public:
Entity* owner = nullptr;
ColliderType_e type = CT_None;
bool active = true;
int tag = 0;
int param1 = 0;
int param2 = 0;
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; };
void MoveCenter(float x, float y);
};
class ObbCollider : public ColliderComponent
{
public:
float rotate = 0;
ObbCollider() { type = CT_Obb; };
};
class CircleCollider : public ColliderComponent
{
public:
a8::Vec2 pos;
float rad = 0.0f;
CircleCollider() { type = CT_Circle; };
};
class ArcCollider : public ColliderComponent
{
public:
float width = 0.0f;
ArcCollider() { type = CT_Arc; };
};
void DestoryCollider(ColliderComponent* collider);
/*
--圆与旋转矩形碰撞
--rx ry 圆坐标
--r 圆半径
--dx dy 矩形坐标
--dw dh 矩形长宽
--dro 矩形旋转角度
*/
bool Check2dRotationRectangle(float rx, float ry, float r, float dx, float dy, float dw, float dh, float dro);