Final Collisions
This commit is contained in:
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user