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)
{
const auto comp = g_physicsComponents[handle];
const auto middle = comp->GetNode()->GetPosition() + movement + collider.Position + collider.Size / 2.0f;
const auto halfSize = collider.Size / 2.0f;
const auto pos = comp->GetNode()->GetPosition() + movement + collider.Position;
for (const auto &t : g_physicsComponents)
{
if (t == comp)
continue;
for (const auto &tc : t->Colliders())
{
BOOL isColliding = false;
const auto tMiddle = t->GetNode()->GetPosition() + tc.Position + tc.Size / 2.0f;
const auto tHalfSize = tc.Size / 2.0f;
const auto rectSide = GetRectSide(tMiddle - middle);
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)
const auto tPos = t->GetNode()->GetPosition() + tc.Position;
const auto xColliding = ((pos.x + collider.Size.x) >= tPos.x) && ((tPos.x + tc.Size.x) >= pos.x);
const auto yColliding = ((pos.y + collider.Size.y) >= tPos.y) && ((tPos.y + tc.Size.y) >= pos.y);
if (xColliding && yColliding)
{
// Collision callback
comp->OnCollision(t);