From 6c7e5ab4256d0ff1229345071b2bfa1b95fde78e Mon Sep 17 00:00:00 2001 From: pradyun Date: Sun, 12 Mar 2023 12:16:55 +1300 Subject: [PATCH] Basic collision detection implemented --- source/Sprite.cpp | 6 ++++++ source/Sprite.hpp | 3 +++ source/main.cpp | 24 +++++++++++++++++++----- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/source/Sprite.cpp b/source/Sprite.cpp index afa8e98..e09deda 100644 --- a/source/Sprite.cpp +++ b/source/Sprite.cpp @@ -37,9 +37,15 @@ void Sprite::move(float dx, float dy, bool overrideOOB) { } void Sprite::setCenter(float x, float y) { + this->center[0] = x; this->center[1] = y; + C2D_SpriteSetCenter(&this->spr, x, y); } +float* Sprite::getCenter() { + return this->center; +} + void Sprite::draw() { C2D_DrawSprite(&this->spr); } diff --git a/source/Sprite.hpp b/source/Sprite.hpp index 150efd1..e17aad5 100644 --- a/source/Sprite.hpp +++ b/source/Sprite.hpp @@ -23,6 +23,8 @@ public: float getPosY(); + float* getCenter(); + C2D_Sprite* getSpr(); void setSpr(C2D_Sprite* newSpr); @@ -31,6 +33,7 @@ public: private: float x, y; + float center[2]; }; #endif \ No newline at end of file diff --git a/source/main.cpp b/source/main.cpp index edadfcc..bfe81e9 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -56,6 +56,12 @@ static void initSprites() { } } +void introScene(); +void gameScene(); +void gameOverScene(); + +void (*() currentPhase = &gameScene; + int main(int argc, char* argv[]) { @@ -100,6 +106,7 @@ int main(int argc, char* argv[]) { C2D_SpriteSetScale(&sprites[SPR_BG].spr, 2.7778, 2.7907); // scale image to 400x240 (3ds screen res) size_t score = 0; + bool gameOver = false; // Main loop while (aptMainLoop()) { @@ -118,7 +125,7 @@ int main(int argc, char* argv[]) { - if (kDown & KEY_A) { + if (!gameOver && (kDown & KEY_A)) { v = -5.5; sprites[SPR_BIRD].move(0, v); } @@ -126,8 +133,18 @@ int main(int argc, char* argv[]) { for (int i = 0; i < NUM_PIPES; i++) { pipes[i].move(pipeSpeed, 0, true); + // collision detection + if (pipes[i].getPosX() == sprites[SPR_BIRD].getPosX() && + (sprites[SPR_BIRD].getPosY() > pipes[i].getPosY() + 41.5 || + sprites[SPR_BIRD].getPosY() < pipes[i].getPosY() - 41.5)) + { + gameOver = true; + break; + + } + // inc score - if (pipes[i].getPosX() == sprites[SPR_BIRD].getPosX()) + if (!gameOver && (pipes[i].getPosX() == sprites[SPR_BIRD].getPosX())) score++; // send pipes back to front of screen @@ -160,10 +177,7 @@ int main(int argc, char* argv[]) { C2D_TargetClear(bottom, C2D_Color32f(0.3294f, 0.7529f, 0.7882f, 1.0f)); C2D_SceneBegin(bottom); - // drawSprite(SPR_SCORECARD); sprites[SPR_SCORECARD].draw(); - // C2D_DrawSprite(&scoreSprite->spr); - C2D_DrawText(&scoreText, 0, 240, 88, 0.0f, 0.9f, 0.9f); C3D_FrameEnd(0);