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)
|
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user