From 35a527101b00c0fc95f01d87c47181a35d46f4d3 Mon Sep 17 00:00:00 2001 From: ineslelin Date: Sat, 27 Jan 2024 17:29:14 +0100 Subject: [PATCH] left/right sliding collision possible now --- extern/libpng | 1 + extern/zlib | 1 + include/Game.h | 4 ++++ src/Game.cpp | 17 +++++++++++++++-- 4 files changed, 21 insertions(+), 2 deletions(-) create mode 160000 extern/libpng create mode 160000 extern/zlib diff --git a/extern/libpng b/extern/libpng new file mode 160000 index 0000000..71b9b5e --- /dev/null +++ b/extern/libpng @@ -0,0 +1 @@ +Subproject commit 71b9b5e16ef751d973a3935284382bc344ff9941 diff --git a/extern/zlib b/extern/zlib new file mode 160000 index 0000000..09155ea --- /dev/null +++ b/extern/zlib @@ -0,0 +1 @@ +Subproject commit 09155eaa2f9270dc4ed1fa13e2b4b2613e6e4851 diff --git a/include/Game.h b/include/Game.h index ed07f38..64f2ce2 100644 --- a/include/Game.h +++ b/include/Game.h @@ -4,6 +4,8 @@ #include #include +#include "Vector2D.h" + class AssetManager; class ColliderComponent; @@ -29,6 +31,8 @@ public: bool getWinner(); + void handleCollision(Vector2D& characterPos, SDL_Rect& characterCollider, SDL_Rect& componentCollider); + private: int counter = 0; bool isRunning = false; diff --git a/src/Game.cpp b/src/Game.cpp index 26fa8d0..8c8c911 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -158,11 +158,11 @@ void Game::update() { if (SDL_HasIntersection(&player.getComponent().collider, &cc->collider) && strcmp(cc->tag, "player") && cc->hasCollision) { - player.getComponent().position = playerPos; + handleCollision(player.getComponent().position, player.getComponent().collider, cc->collider); } if (SDL_HasIntersection(&enemy.getComponent().collider, &cc->collider) && strcmp(cc->tag, "enemy") && cc->hasCollision) { - enemy.getComponent().position = enemyPos; + handleCollision(enemy.getComponent().position, enemy.getComponent().collider, cc->collider); } } @@ -261,4 +261,17 @@ bool Game::running() const bool Game::getWinner() { return this->winner; +} + +void Game::handleCollision(Vector2D& characterPos, SDL_Rect& characterCollider, SDL_Rect& componentCollider) +{ + // collision to right of character + if (characterPos.x < componentCollider.x) + { + characterPos.x = componentCollider.x - characterCollider.w; + } + else // collision to left of character + { + characterPos.x = componentCollider.x + componentCollider.w; + } } \ No newline at end of file