From 0f6ba6c7c663583d38a9734161d7db9428ca875f Mon Sep 17 00:00:00 2001 From: Claudio Hoffmann <hoffmanncl72341@th-nuernberg.de> Date: Sat, 16 Jan 2021 01:51:48 +0100 Subject: [PATCH] Level: Take collision widths and heights directly from a PixelBuffer --- Level.cpp | 20 ++++++++++---------- Level.hpp | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Level.cpp b/Level.cpp index 4d99516..fa15d5c 100644 --- a/Level.cpp +++ b/Level.cpp @@ -190,10 +190,10 @@ void Level::doDoSteps(FloatSeconds const &frame_time) } } -bool Level::collHelper(Position const& vecPos, int vecWidth, int vecHeigth, float buffPosX, float buffPosY, int buffWidth, int buffHeigth) +bool Level::collHelper(Position const& vecPos, PixelBuffer const& vecBuf, float buffPosX, float buffPosY, int buffWidth, int buffHeigth) { - for(int x = static_cast<int>(vecPos.X); x <= static_cast<int>(vecPos.X) + vecWidth; ++x){ - for(int y = static_cast<int>(vecPos.Y); y <= static_cast<int>(vecPos.Y) + vecHeigth; ++y){ + for(int x = static_cast<int>(vecPos.X); x <= static_cast<int>(vecPos.X) + vecBuf.w(); ++x){ + for(int y = static_cast<int>(vecPos.Y); y <= static_cast<int>(vecPos.Y) + vecBuf.h(); ++y){ if((x >= buffPosX && x <= buffPosX + buffWidth)&&(y >= buffPosY && y <= buffPosY + buffHeigth)){ return true; } @@ -205,13 +205,13 @@ bool Level::collHelper(Position const& vecPos, int vecWidth, int vecHeigth, floa bool Level::checkCollision(float posX, float posY, int bufferWidth, int bufferHeigth) { for(auto i = this->wallVector.begin(); i != this->wallVector.end(); i++ ){ - if(collHelper(i->getTopLeft(), i->getWallBuffer().w(), i->getWallBuffer().h(), posX, posY, bufferWidth, bufferHeigth)) return true; + if(collHelper(i->getTopLeft(), i->getWallBuffer(), posX, posY, bufferWidth, bufferHeigth)) return true; } for(auto i = this->borders.begin(); i != this->borders.end(); i++ ){ - if(collHelper(i->getTopLeft(), i->getWallBuffer().w(), i->getWallBuffer().h(), posX, posY, bufferWidth, bufferHeigth)) return true; + if(collHelper(i->getTopLeft(), i->getWallBuffer(), posX, posY, bufferWidth, bufferHeigth)) return true; } for(auto i = this->sceneryVector.begin(); i != this->sceneryVector.end(); i++ ){ - if(collHelper(i->getTopLeft(), i->getSceneryBuffer(i->getSceneryType()).w(), i->getSceneryBuffer(i->getSceneryType()).h(), posX, posY, bufferWidth, bufferHeigth)) return true; + if(collHelper(i->getTopLeft(), i->getSceneryBuffer(i->getSceneryType()), posX, posY, bufferWidth, bufferHeigth)) return true; } return false; } @@ -219,7 +219,7 @@ bool Level::checkCollision(float posX, float posY, int bufferWidth, int bufferHe /*Hauerch71498 Hitdetection*/ bool Level::HitEnemy(float posX, float posY, int bufferWidth, int bufferHeigth) { - if(collHelper(player.getTopLeft(),player.getBuffer().w(),player.getBuffer().h(),posX,posY,bufferWidth,bufferHeigth)) + if(collHelper(player.getTopLeft(),player.getBuffer(),posX,posY,bufferWidth,bufferHeigth)) { player.takeDamage(); return true; @@ -230,7 +230,7 @@ bool Level::HitEnemy(float posX, float posY, int bufferWidth, int bufferHeigth) bool Level::HitPlayer(float posX, float posY, int bufferWidth, int bufferHeigth) { for(auto &i : this->enemyVector){ - if(i != nullptr && collHelper(i->getTopLeft(), i->getCurrentSprite().w(), i->getCurrentSprite().h(), posX, posY, bufferWidth, bufferHeigth)) + if(i != nullptr && collHelper(i->getTopLeft(), i->getCurrentSprite(), posX, posY, bufferWidth, bufferHeigth)) { //HauerCh71498 //{ @@ -250,14 +250,14 @@ bool Level::HitPlayer(float posX, float posY, int bufferWidth, int bufferHeigth) bool Level::HitObstacle(float posX, float posY, int bufferWidth, int bufferHeigth) { for(auto &i : wallVector){ - if(collHelper(i.getTopLeft(), i.getWallBuffer().w(), i.getWallBuffer().h(), posX, posY, bufferWidth, bufferHeigth)) + if(collHelper(i.getTopLeft(), i.getWallBuffer(), posX, posY, bufferWidth, bufferHeigth)) { i.takeDamage(); return true; } } for(auto &i : sceneryVector) { - if(collHelper(i.getTopLeft(), i.getSceneryBuffer(i.getSceneryType()).w(), i.getSceneryBuffer(i.getSceneryType()).h(), posX, posY, bufferWidth, bufferHeigth)) + if(collHelper(i.getTopLeft(), i.getSceneryBuffer(i.getSceneryType()), posX, posY, bufferWidth, bufferHeigth)) { i.takeDamage(); return true; diff --git a/Level.hpp b/Level.hpp index 26c30aa..58f7f01 100644 --- a/Level.hpp +++ b/Level.hpp @@ -158,7 +158,7 @@ private: std::vector<std::unique_ptr<Enemy>> enemyVector; std::vector<std::unique_ptr<Projectile>> projectileVector; std::vector<std::unique_ptr<Enemy>> trooperSpawner; - bool collHelper(Position const& vecPos, int vecWidth, int vecHeigth, float buffPosX, float buffPosY, int buffWidth, int buffHeigth); + bool collHelper(Position const& vecPos, PixelBuffer const& vecBuf, float buffPosX, float buffPosY, int buffWidth, int buffHeigth); int score = 0; //hauerch71498 }; -- GitLab