From f538e95623520f8901581a0dc5a2bf30e95fe456 Mon Sep 17 00:00:00 2001 From: Benedikt Galbavy Date: Sun, 28 Jan 2024 15:19:27 +0100 Subject: [PATCH] Hotfix collision to the right breaks sliding --- src/CollisionHandler.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/CollisionHandler.cpp b/src/CollisionHandler.cpp index a96f54a..b809f31 100644 --- a/src/CollisionHandler.cpp +++ b/src/CollisionHandler.cpp @@ -8,6 +8,7 @@ #include #include +#include IntersectionBitSet CollisionHandler::getIntersection(Entity* entityA, Entity* entityB) { @@ -31,17 +32,25 @@ IntersectionBitSet CollisionHandler::getIntersection(Entity* entityA, Entity* en std::bitset intersections; // checks all 4 directions to allow checking full overlap - if (colliderA->x + posModA.x < colliderB->x + colliderB->w + posModB.x) - intersections.set((size_t) direction::LEFT) = 1; + if (colliderA->x + posModA.x < colliderB->x + colliderB->w + posModB.x && + colliderA->x + posModA.x > colliderB->x + posModB.x) { + printf("%zu left\n", (size_t) direction::LEFT); + intersections.set((size_t) direction::LEFT); + } - if (colliderA->x + colliderA->w + posModA.x > colliderB->x + posModB.x) - intersections.set((size_t) direction::RIGHT) = 1; + if (colliderA->x + colliderA->w + posModA.x < colliderB->x + colliderB->w + posModB.x && + colliderA->x + colliderA->w + posModA.x > colliderB->x + posModB.x) { + printf("%zu right\n", (size_t) direction::RIGHT); + intersections.set((size_t) direction::RIGHT); + } - if (colliderA->y + posModA.y < colliderB->y + colliderB->h + posModB.y) - intersections.set((size_t) direction::UP) = 1; + if (colliderA->y + posModA.y < colliderB->y + colliderB->h + posModB.y && + colliderA->y + posModA.y > colliderB->y + posModB.y) + intersections.set((size_t) direction::UP); - if (colliderA->y + colliderA->h + posModA.y > colliderB->y + posModB.y) - intersections.set((size_t) direction::DOWN) = 1; + if (colliderA->y + colliderA->h + posModA.y < colliderB->y + colliderB->h + posModB.y && + colliderA->y + colliderA->h + posModA.y > colliderB->y + posModB.y) + intersections.set((size_t) direction::DOWN); return intersections; }