diff --git a/a8/collision.cc b/a8/collision.cc index 7341d15..80cd40c 100644 --- a/a8/collision.cc +++ b/a8/collision.cc @@ -183,6 +183,32 @@ namespace a8 return false; } + bool IntersectAabbArc(a8::Vec2 a_min, a8::Vec2 a_max, a8::Vec2 b_pos, float width) + { + return false; + } + + bool IntersectCircleArc(a8::Vec2 a_pos, + float a_rad, + a8::Vec2 b_pos, + float b_rad, + float b_angle, + float b_width, + float b_height) + { + float distance = b_pos.Distance(a_pos); + float _min = b_rad - b_height / 2 - a_rad; + float _max = b_rad + b_height / 2 + a_rad; + if (distance < _min) { + return false; + } + if (distance > _max) { + return false; + } + float angle = (a_pos - b_pos).CalcAngleEx(a8::Vec2::UP); + return false; + } + bool IntersectCircleCircle(a8::Vec2 a_pos, float a_rad, a8::Vec2 b_pos, float b_rad) { float t = a_rad + b_rad; diff --git a/a8/collision.h b/a8/collision.h index e43ca69..127c9c4 100644 --- a/a8/collision.h +++ b/a8/collision.h @@ -10,7 +10,20 @@ namespace a8 bool IntersectAabbCircle(a8::Vec2 a_min, a8::Vec2 a_max, a8::Vec2 b_pos, float b_rad); bool IntersectAabbAabb(a8::Vec2 a_min, a8::Vec2 a_max, a8::Vec2 b_min, a8::Vec2 b_max); bool IntersectAabbObb(a8::Vec2 a_min, a8::Vec2 a_max, a8::Vec2 b_pos, float rotate); + bool IntersectAabbArc(a8::Vec2 a_min, + a8::Vec2 a_max, + a8::Vec2 b_pos, + float b_rad, + float b_width, + float b_height); bool IntersectCircleCircle(a8::Vec2 a_pos, float a_rad, a8::Vec2 b_pos, float b_rad); + bool IntersectCircleArc(a8::Vec2 a_pos, + float a_rad, + a8::Vec2 b_pos, + float b_rad, + float b_angle, + float b_width, + float b_height); bool IntersectSectorCircle(a8::Vec2 a_pos, float angle, float a_rad, a8::Vec2 b_pos, float b_rad); bool IntersectSectorAabb(a8::Vec2 a_pos, float angle, float a_rad, a8::Vec2 b_min, a8::Vec2 b_max); bool CircleContainCircle(a8::Vec2 a_pos, float a_rad, a8::Vec2 b_pos, float b_rad);