From b123c9a3f34dd4b041b4323b661ceb54c7b3c272 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 1 Jan 2022 20:31:57 +0100 Subject: [PATCH] We can finally pew pew --- config.yml | 6 ++++-- headers/configData.h | 3 +++ headers/pixel_manager.h | 13 ++++++++----- headers/utils.h | 2 +- src/configManagement.cpp | 2 ++ src/game_basics.cpp | 15 +++++++++++---- src/game_managers.cpp | 11 ++++++----- src/pixel_manager.cpp | 18 +++++++++++++----- src/utils.cpp | 8 ++++---- 9 files changed, 52 insertions(+), 26 deletions(-) diff --git a/config.yml b/config.yml index 2eef538..c6800ba 100644 --- a/config.yml +++ b/config.yml @@ -21,16 +21,18 @@ players: invaders: fireCooldown: 20 size: 15 - speed: 2 + speed: 0 distance: 10 # distance in pixels between invaders # Projectiles config projectiles: missiles: + color: yellow speed: 2 width: 10 torpedos: - speed: 2 + color: green + speed: 10 width: 10 points: diff --git a/headers/configData.h b/headers/configData.h index 78ce285..246f8b9 100644 --- a/headers/configData.h +++ b/headers/configData.h @@ -27,9 +27,12 @@ struct ConfigData { unsigned missilesWidth; unsigned missilesLength; // auto defined from width unsigned missilesSpeed; + nsGraphics::RGBAcolor missilesColor; + unsigned torpedosWidth; unsigned torpedosLength; // auto defined from width unsigned torpedosSpeed; + nsGraphics::RGBAcolor torpedosColor; }; #endif \ No newline at end of file diff --git a/headers/pixel_manager.h b/headers/pixel_manager.h index 1bf80f3..a64dadf 100644 --- a/headers/pixel_manager.h +++ b/headers/pixel_manager.h @@ -12,11 +12,13 @@ class PixelManager{ public: MinGL& window; explicit PixelManager(MinGL&); - void dessinerInvader1(const nsGraphics::Vec2D& baseVector, unsigned size); - void dessinerInvader2(const nsGraphics::Vec2D& baseVector, unsigned size); - void dessinerInvader3(const nsGraphics::Vec2D& baseVector, unsigned size); - void dessinerJoueur(const nsGraphics::Vec2D& baseVector, unsigned size, const nsGraphics::RGBAcolor&); - void dessinerSprite(const nsGraphics::Vec2D& baseVector,const std::string& spritePath); + void drawInvader1(const nsGraphics::Vec2D& baseVector, unsigned size); + void drawInvader2(const nsGraphics::Vec2D& baseVector, unsigned size); + void drawInvader3(const nsGraphics::Vec2D& baseVector, unsigned size); + void drawPlayer(const nsGraphics::Vec2D& baseVector, unsigned width, const nsGraphics::RGBAcolor &color); + void drawTorpedo(const nsGraphics::Vec2D& baseVector, unsigned width, const nsGraphics::RGBAcolor& color); + void drawMissile(const nsGraphics::Vec2D& baseVector, unsigned width, const nsGraphics::RGBAcolor& color); + void drawSprite(const nsGraphics::Vec2D& baseVector, const std::string& spritePath); unsigned showInitialMenu(); unsigned showDeathMenu(); @@ -24,6 +26,7 @@ public: unsigned getScreenWidth(); void startFrame(); void endFrame(); + }; diff --git a/headers/utils.h b/headers/utils.h index 9eea98c..b7766e6 100644 --- a/headers/utils.h +++ b/headers/utils.h @@ -23,6 +23,6 @@ typedef nsGraphics::Vec2D position; typedef unsigned playerID; // didn't want to use position because of the semantic with x and y -bool lineCollideCheck(unsigned start1, unsigned end1, unsigned start2, unsigned end2); +bool areLinesColliding(unsigned start1, unsigned end1, unsigned start2, unsigned end2); #endif \ No newline at end of file diff --git a/src/configManagement.cpp b/src/configManagement.cpp index a3c8418..3f29bd0 100644 --- a/src/configManagement.cpp +++ b/src/configManagement.cpp @@ -102,10 +102,12 @@ void ConfigBuilder::readConfig() { collectedData.missilesWidth = getInt("projectiles.missiles.width"); collectedData.missilesLength = collectedData.missilesWidth*PROJ_LENGTH_FACTOR; collectedData.missilesSpeed = getInt("projectiles.missiles.speed"); + collectedData.missilesColor = getColor("projectiles.missiles.color"); collectedData.torpedosWidth = getInt("projectiles.torpedos.width"); collectedData.torpedosLength = collectedData.torpedosWidth*PROJ_LENGTH_FACTOR; collectedData.torpedosSpeed = getInt("projectiles.missiles.speed"); + collectedData.torpedosColor = getColor("projectiles.torpedos.color"); } int ConfigBuilder::getInt(const configKey& key) { diff --git a/src/game_basics.cpp b/src/game_basics.cpp index e83aa7a..cc485f7 100644 --- a/src/game_basics.cpp +++ b/src/game_basics.cpp @@ -128,22 +128,29 @@ void Game::display() { ); switch(grid[i][j]){ case 0:{ - pm.dessinerInvader1(vec, confData.invadersSize); + pm.drawInvader1(vec, confData.invadersSize); break; } case 1:{ - pm.dessinerInvader2(vec, confData.invadersSize); + pm.drawInvader2(vec, confData.invadersSize); break; } case 2:{ - pm.dessinerInvader3(vec, confData.invadersSize); + pm.drawInvader3(vec, confData.invadersSize); break; } } } } + for(missile& miss : missiles){ + pm.drawTorpedo(miss, confData.missilesWidth, confData.missilesColor); + } + for(torpedo& tor : torpedos){ + pm.drawTorpedo(tor, confData.torpedosWidth, confData.torpedosColor); + } + for(size_t i=0;igetY() + confData.missilesLength < tor->getY()){ } - if(lineCollideCheck( // now check if they collide in X + if(areLinesColliding( // now check if they collide in X miss->getX(), miss->getX() + confData.missilesWidth, tor->getX(), tor->getX() + confData.torpedosWidth)){ missiles.erase(miss); @@ -123,7 +123,7 @@ bool Game::checkMissilesAndPlayers() { // now check collision on X (with both players) bool wasColliding = false; for(Player& p : players){ - if(lineCollideCheck( + if(areLinesColliding( miss_ite->getX(), miss_ite->getX() + confData.missilesWidth, p.x, p.x + confData.playersWidth)){ wasColliding = true; @@ -145,13 +145,14 @@ bool Game::checkTorpedosAndInvaders() { for(;i=tor_ite->getY() && pos.getY()<=tor_ite->getY()+confData.torpedosLength){ // now check collision on X - if(lineCollideCheck( // now check collision on X + if(areLinesColliding( // now check collision on X tor_ite->getX(), tor_ite->getX() + confData.torpedosWidth, pos.getX(), pos.getX() + confData.invadersSize)){ break; diff --git a/src/pixel_manager.cpp b/src/pixel_manager.cpp index e1c861b..f9e07f8 100644 --- a/src/pixel_manager.cpp +++ b/src/pixel_manager.cpp @@ -5,7 +5,7 @@ PixelManager::PixelManager(MinGL& a) : window(a) { window.initGlut(); window.initGraphic(); } -void PixelManager::dessinerInvader1(const nsGraphics::Vec2D& baseVector, unsigned size){ +void PixelManager::drawInvader1(const nsGraphics::Vec2D& baseVector, unsigned size){ float scale = size/(float)100; window << nsShape::Circle(nsGraphics::Vec2D(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KGray); window << nsShape::Triangle(nsGraphics::Vec2D(35*scale, 50*scale)+baseVector, nsGraphics::Vec2D(15*scale, 25*scale)+baseVector, nsGraphics::Vec2D(15*scale, 75*scale)+baseVector, nsGraphics::KBlack); @@ -16,7 +16,7 @@ void PixelManager::dessinerInvader1(const nsGraphics::Vec2D& baseVector, unsigne } -void PixelManager::dessinerInvader2(const nsGraphics::Vec2D& baseVector, unsigned size){ +void PixelManager::drawInvader2(const nsGraphics::Vec2D& baseVector, unsigned size){ float scale = size/(float)100; window << nsShape::Circle(nsGraphics::Vec2D(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KRed); window << nsShape::Rectangle(nsGraphics::Vec2D(25*scale, 30*scale)+baseVector, nsGraphics::Vec2D(45*scale, 40*scale)+baseVector, nsGraphics::KBlack); @@ -24,7 +24,7 @@ void PixelManager::dessinerInvader2(const nsGraphics::Vec2D& baseVector, unsigne window << nsShape::Rectangle(nsGraphics::Vec2D(35*scale, 65*scale)+baseVector, nsGraphics::Vec2D(65*scale, 72*scale)+baseVector, nsGraphics::KBlack); } -void PixelManager::dessinerInvader3(const nsGraphics::Vec2D& baseVector, unsigned size){ +void PixelManager::drawInvader3(const nsGraphics::Vec2D& baseVector, unsigned size){ float scale = size/(float)100; window << nsShape::Circle(nsGraphics::Vec2D(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KGreen); window << nsShape::Circle(nsGraphics::Vec2D(35*scale, 35*scale)+baseVector, 10*scale, nsGraphics::KBlack); @@ -32,7 +32,7 @@ void PixelManager::dessinerInvader3(const nsGraphics::Vec2D& baseVector, unsigne window << nsShape::Rectangle(nsGraphics::Vec2D(35*scale, 65*scale)+baseVector, nsGraphics::Vec2D(65*scale, 72*scale)+baseVector, nsGraphics::KBlack); } -void PixelManager::dessinerJoueur(const nsGraphics::Vec2D& baseVector, unsigned width, const nsGraphics::RGBAcolor& color){ +void PixelManager::drawPlayer(const nsGraphics::Vec2D& baseVector, unsigned width, const nsGraphics::RGBAcolor& color){ width = width-10-10; width = width/2; window << nsShape::Triangle(nsGraphics::Vec2D(0, 720)+baseVector, nsGraphics::Vec2D(5, 720)+baseVector, nsGraphics::Vec2D(5, 720-PLAYER_HEIGHT/2)+baseVector, color); @@ -44,7 +44,15 @@ void PixelManager::dessinerJoueur(const nsGraphics::Vec2D& baseVector, unsigned window << nsShape::Triangle(nsGraphics::Vec2D(15+width,720-PLAYER_HEIGHT/2)+baseVector, nsGraphics::Vec2D(15+width*2,720-PLAYER_HEIGHT/2)+baseVector, nsGraphics::Vec2D(15+width,720-PLAYER_HEIGHT*0.9)+baseVector, color); } -void PixelManager::dessinerSprite(const nsGraphics::Vec2D& baseVector, const std::string& spritePath){ +void PixelManager::drawMissile(const nsGraphics::Vec2D& baseVector, unsigned width, const nsGraphics::RGBAcolor& color){ + window << nsShape::Rectangle(baseVector, baseVector+position(width, width*PROJ_LENGTH_FACTOR), color); +} + +void PixelManager::drawTorpedo(const nsGraphics::Vec2D& baseVector, unsigned width, const nsGraphics::RGBAcolor& color){ + window << nsShape::Rectangle(baseVector, baseVector+position(width, width*PROJ_LENGTH_FACTOR), color); +} + +void PixelManager::drawSprite(const nsGraphics::Vec2D& baseVector, const std::string& spritePath){ nsGui::Sprite sprite(spritePath,baseVector); sprite.draw(window); } diff --git a/src/utils.cpp b/src/utils.cpp index b39d7ae..03a1dfb 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -1,6 +1,6 @@ #include "utils.h" -bool lineCollideCheck(unsigned start1, unsigned end1, unsigned start2, unsigned end2){ - return start1 < end2 != start2 < end1; - // if true, are colliding. I like truth tables -} \ No newline at end of file +bool areLinesColliding(unsigned start1, unsigned end1, unsigned start2, unsigned end2){ + return start1 < end2 == start2 < end1; + // if it returns true, lines are colliding. I like truth tables +}