Final Collisions

This commit is contained in:
Isuru Samarathunga
2025-09-29 15:52:27 +05:30
parent 9269306146
commit 9038fa54b0

View File

@ -109,35 +109,17 @@ namespace ia::iae
BOOL Physics::CanMove(IN Handle handle, IN CONST PhysicsComponent::Collider &collider, IN glm::vec2 movement) BOOL Physics::CanMove(IN Handle handle, IN CONST PhysicsComponent::Collider &collider, IN glm::vec2 movement)
{ {
const auto comp = g_physicsComponents[handle]; const auto comp = g_physicsComponents[handle];
const auto middle = comp->GetNode()->GetPosition() + movement + collider.Position + collider.Size / 2.0f; const auto pos = comp->GetNode()->GetPosition() + movement + collider.Position;
const auto halfSize = collider.Size / 2.0f;
for (const auto &t : g_physicsComponents) for (const auto &t : g_physicsComponents)
{ {
if (t == comp) if (t == comp)
continue; continue;
for (const auto &tc : t->Colliders()) for (const auto &tc : t->Colliders())
{ {
BOOL isColliding = false; const auto tPos = t->GetNode()->GetPosition() + tc.Position;
const auto tMiddle = t->GetNode()->GetPosition() + tc.Position + tc.Size / 2.0f; const auto xColliding = ((pos.x + collider.Size.x) >= tPos.x) && ((tPos.x + tc.Size.x) >= pos.x);
const auto tHalfSize = tc.Size / 2.0f; const auto yColliding = ((pos.y + collider.Size.y) >= tPos.y) && ((tPos.y + tc.Size.y) >= pos.y);
const auto rectSide = GetRectSide(tMiddle - middle); if (xColliding && yColliding)
switch (rectSide)
{
case RectSide::LEFT:
case RectSide::RIGHT:
isColliding = ((tHalfSize.x + halfSize.x) >= abs(tMiddle.x - middle.x));
break;
case RectSide::TOP:
case RectSide::BOTTOM:
isColliding = ((tHalfSize.y + halfSize.y) >= abs(tMiddle.y - middle.y));
break;
default:
isColliding = false;
break;
}
if (isColliding)
{ {
// Collision callback // Collision callback
comp->OnCollision(t); comp->OnCollision(t);