diff --git a/Src/IAEngine/imp/cpp/Physics/Physics.cpp b/Src/IAEngine/imp/cpp/Physics/Physics.cpp index 3b79eef..55877ab 100644 --- a/Src/IAEngine/imp/cpp/Physics/Physics.cpp +++ b/Src/IAEngine/imp/cpp/Physics/Physics.cpp @@ -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);