diff --git a/headers/game.h b/headers/game.h index 9e9f206..20a7b5a 100644 --- a/headers/game.h +++ b/headers/game.h @@ -14,7 +14,7 @@ #define GUARD_GAME_H #include #include "mingl/mingl.h" -#include "pixelManager/pixelManager.h" +#include "pixelManager.h" #include "utils.h" #include "playerDef.h" #include "player.h" diff --git a/headers/goodPixelManager.h b/headers/goodPixelManager.h new file mode 100644 index 0000000..e27087e --- /dev/null +++ b/headers/goodPixelManager.h @@ -0,0 +1,90 @@ +/*! + * + * @file goodPixelManager.h + * @author RUBINI Thomas + * @date January 2022 + * @version 1.0 + * @brief Manages screen display with async sprite loading + * + */ + + +#ifndef GUARD_GOODPIXELMANAGER_H +#define GUARD_GOODPIXELMANAGER_H + +#include "pixelManager.h" + + +/*! + * @class GoodPixelManager + * @brief Extension of the PixelManager class, which override + * the draw methods to use sprites instead of shapes + */ +class GoodPixelManager : public PixelManager{ + + /*! + * @brief loads sprites in parallel using multiple threads + * @param[out] tasks : vectot of task + * @fn void loadSprites(); + */ + void loadSprites(vector& tasks) override; + + /*! + * @brief sprite of the first player + */ + MySprite player1; + + /*! + * @brief sprite of the second player + */ + MySprite player2; + + /*! + * @brief sprite of the type A invader + */ + MySprite invaderA; + + /*! + * @brief sprite of the type B invader + */ + MySprite invaderB; + + /*! + * @brief sprite of the type B invader + */ + MySprite invaderC; + + /*! + * @brief sprite of the missile + */ + MySprite missile; + + /*! + * @brief sprite of the torpedo + */ + MySprite torpedo; + + /*! + * @brief sprite of the heart + */ + MySprite heart; + + void drawInvaderA(const Position& baseVector, unsigned size, const RGBAcolor& color) const override; + void drawInvaderB(const Position& baseVector, unsigned size, const RGBAcolor& color) const override; + void drawInvaderC(const Position& baseVector, unsigned size, const RGBAcolor& color) const override; + void drawPlayer(playerID pID, unsigned x, unsigned width, const RGBAcolor& color) const override; + void drawMissile(const Position& baseVector, unsigned width, const RGBAcolor& color) const override; + void drawTorpedo(const Position& baseVector, unsigned width, const RGBAcolor& color) const override; + void drawHeart(const Position& baseVector) const override; +public: + + /*! + * @brief constructor the pixel manager class + * @param[in] window : window of the pixel manager + * @fn GoodPixelManager(MinGL&); + */ + explicit GoodPixelManager(MinGL& window); +}; + + +#endif diff --git a/headers/pixelManager.h b/headers/pixelManager.h new file mode 100644 index 0000000..11e7748 --- /dev/null +++ b/headers/pixelManager.h @@ -0,0 +1,273 @@ +/*! + * + * @file pixelManager.h + * @author RUBINI Thomas + * @author SIMAILA Djalim + * @author FABRE Lucas + * @date January 2022 + * @version 1.0 + * @brief Manages screen display + * + */ + +#ifndef GUARD_PIXELMANAGER_H +#define GUARD_PIXELMANAGER_H + +#include +#include "mingl/mingl.h" +#include "mingl/shape/line.h" +#include "mingl/shape/triangle.h" +#include "mingl/shape/rectangle.h" +#include "mingl/shape/circle.h" +#include "mingl/gui/sprite.h" +#include "mingl/gui/text.h" +#include "utils.h" +#include "playMode.h" +#include "menu.h" +#include "scoresManager.h" +#include "mySprite.h" + +using namespace std; + +typedef nsGui::GlutFont::GlutFonts Font; + +/*! +* @class PixelManager +* @brief main display function, clear the window and calls sub display functions +*/ + +/* + * It's MinGL's fault. This is all I have to say + */ + +#define ADD_SPRITE_TASK(X) tasks.push_back((X).asyncLoad("assets/"#X".si2")); + +class PixelManager{ +public: + + /*! + * @brief display window + */ + MinGL& window; + + /*! + * @brief loads sprites in parallel using multiple threads + * @param[in] tasks : vectot of task + * @fn void loadSprites(); + */ + virtual void loadSprites(vector& tasks); + + /*! + * @brief sprite of the logo of the game + */ + MySprite logo; + + /*! + * @brief sprite of the background during menu + */ + MySprite menuBackground; + + /*! + * @brief sprite of the background during gameplay + */ + MySprite gameBackground; + + /*! + * @brief sprite of the right hand of god + */ + MySprite rightHand; + + /*! + * @brief sprite of the left hand of god + */ + MySprite leftHand; + + /*! + * @brief constructor the pixel manager class + * @param[in] window : window of the pixel manager + * @fn PixelManager(MinGL&); + */ + explicit PixelManager(MinGL& window); + + /*! + * @brief display a type A invader on screen + * @param[in] baseVector : pixel coordinate of the invader + * @param[in] size : size multiplicator of the invader + * @param[in] color : color multiplicaror of the invader + * @fn void drawInvaderA(const Position& baseVector, unsigned size, const RGBAcolor& color) const; + */ + virtual void drawInvaderA(const Position& baseVector, unsigned size, const RGBAcolor& color) const; + + /*! + * @brief display a type B invader on screen + * @param[in] baseVector : pixel coordinate of the invader + * @param[in] size : size multiplicator of the invader + * @param[in] color : color multiplicaror of the invader + * @fn void drawInvaderB(const Position& baseVector, unsigned size, const RGBAcolor& color) const; + */ + virtual void drawInvaderB(const Position& baseVector, unsigned size, const RGBAcolor& color) const; + + /*! + * @brief display a type C invader on screen + * @param[in] baseVector : pixel coordinate of the invader + * @param[in] size : size multiplicator of the invader + * @param[in] color : color multiplicaror of the invader + * @fn void drawInvaderC(const Position& baseVector, unsigned size, const RGBAcolor& color) const; + */ + virtual void drawInvaderC(const Position& baseVector, unsigned size, const RGBAcolor& color) const; + + /*! + * @brief display a player on screen + * @param[in] pID : the ID of the player to draw + * @param[in] x : horizontal position of the player + * @param[in] witdh : width of the player + * @param[in] color : color of the plater + * @fn void drawPlayer(unsigned x, unsigned width, const nsGraphics::RGBAcolor& color) const; + */ + virtual void drawPlayer(playerID pID, unsigned x, unsigned width, const nsGraphics::RGBAcolor& color) const; + + /*! + * @brief display a missile on screen + * @param[in] baseVector : pixel coordinates of the missile + * @param[in] width : width of the missle + * @param[in] color : color of the missile + * @fn void drawMissile(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const; + */ + virtual void drawMissile(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const; + + /*! + * @brief display a torpedo on screen + * @param[in] baseVector : pixel coordinates of the torpedo + * @param[in] width : width of the torpedo + * @param[in] color : color of the torpedo + * @fn void drawTorpedo(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const; + */ + virtual void drawTorpedo(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const; + +#define HEART_LENGTH 64 + + /*! + * @brief display a singular heart on screen + * @param[in] baseVector : pixel coordinates of the heart + * @fn void drawHeart(const Position& baseVector) const; + */ + virtual void drawHeart(const Position& baseVector) const; + + /*! + * @brief display a sprite on screen + * @param[in] msp : sprite to draw + * @param[in] pos : pixel coordinates to draw the sprite + * @fn void drawSprite(const MySprite& msp, const Position& pos = Position(0, 0)) const; + */ + void drawSprite(const MySprite& msp, const Position& pos) const; + + /*! + * @brief display a menu button on screen + * @param[in] baseVector : pixel coordinates of the button + * @param[in] text : text inside the button + * @param[in] color : color of the text inside the button + * @fn void displayButton(const Position& baseVector,const string& text,nsGraphics::RGBAcolor& color); + */ + void displayButton(const Position& baseVector,const string& text,nsGraphics::RGBAcolor& color); + + /*! + * @brief display text on screen + * @param[in] pos : pixel coordinates of the text + * @param[in] text : text to show on screen + * @param[in] color : color of the text to show + * @param[in] font : the glut font to use for the text + * @fn void drawText(const Position& pos, const string& text, const RGBAcolor& color = nsGraphics::KWhite, Font font = Font::BITMAP_TIMES_ROMAN_24) const; + */ + void drawText(const Position& pos, const string& text, const RGBAcolor& color = nsGraphics::KWhite, Font font = Font::BITMAP_TIMES_ROMAN_24) const; + + /*! + * @brief show the title screen of the game + * @return the playmode chosen inside the menu + * @fn PlayMode showInitialMenu(); + */ + PlayMode showInitialMenu(); + + /*! + * @brief show the menu after a player lose, or all invader has been defeated + * @return true if the player plays again, else false + * @param[in] rankings : the current top 5 score + * @param[in] winner : the winner of the game + * @fn bool showDeathMenu(); + */ + bool showDeathMenu(const vector& rankings,const WinValue& winner); + + /*! + * @brief give the height of the screen + * @return the height of the screen in pixel + * @fn unsigned getScreenHeight() const; + */ + unsigned getScreenHeight() const; + + /*! + * @brief give the width of the screen + * @return the width of the screen in pixel + * @fn unsigned getScreenWidth() const; + */ + unsigned getScreenWidth() const; + + /*! + * @brief clear the screen for a new frame + * @fn void startFrame() const; + */ + void startFrame() const; + + /*! + * @brief finish a frame render + * @fn void endFrame() const; + */ + void endFrame() const; + + /*! + * @brief display the player name selection menu + * @param[in] pID : player id + * @param[in] score : score of this player + * @param[out] name : name selected by the player + * @fn void askPlayerNameMenu(playerID pID, unsigned score, string& name); + */ + void askPlayerNameMenu(playerID pID, unsigned score, string& name); + + // y will be negative sometimes, so not unsigned + + /*! + * @brief display god's bar + * @param[in] y : god y pixel position + * @fn void drawGodBench(int y) const + */ + void drawGodBench(int y) const; + + /*! + * @brief display god's face + * @param[in] y : god's face y pixel position + * @param[in] angry : flag if god is angry or not + * @fn void drawGodFace(int y, bool angry=false) const; + */ + void drawGodFace(int y, bool angry=false) const; + +private: + + /*! + * @brief display a menu on screen + * @param[in] pos : pixel coordinates of the menu + * @param[in,out] currentMenu : menu struct conteining the menu option + * @fn void drawMenu(const Position& pos, Menu& currentMenu); + */ + void drawMenu(const Position& pos, Menu& currentMenu); + + /*! + * @brief display a menu on screen + * @param[in] pos : pixel coordinates of the menu + * @param[in,out] currentMenu : menu struct conteining the menu option + * @param[in] rankings : the current top 10 players + * @param[in] winner : the winner of the game + * @fn void drawMenu(const Position& pos, Menu& currentMenu); + */ + void drawMenu(const Position& pos, Menu& currentMenu, const vector& rankings, const WinValue& winner); +}; + + +#endif \ No newline at end of file diff --git a/headers/pixelManager/goodPixelManager.h b/headers/pixelManager/goodPixelManager.h index 276d161..e27087e 100644 --- a/headers/pixelManager/goodPixelManager.h +++ b/headers/pixelManager/goodPixelManager.h @@ -12,7 +12,7 @@ #ifndef GUARD_GOODPIXELMANAGER_H #define GUARD_GOODPIXELMANAGER_H -#include "pixelManager/pixelManager.h" +#include "pixelManager.h" /*! diff --git a/src/game/display.cpp b/src/display.cpp similarity index 100% rename from src/game/display.cpp rename to src/display.cpp diff --git a/src/pixelManager/drawEntities.cpp b/src/drawEntities.cpp similarity index 99% rename from src/pixelManager/drawEntities.cpp rename to src/drawEntities.cpp index 31a0c32..f62b54a 100644 --- a/src/pixelManager/drawEntities.cpp +++ b/src/drawEntities.cpp @@ -11,7 +11,7 @@ */ #include "mingl/gui/text.h" -#include "pixelManager/pixelManager.h" +#include "pixelManager.h" #include "utils.h" #include "god.h" diff --git a/src/pixelManager/drawMenus.cpp b/src/drawMenus.cpp similarity index 99% rename from src/pixelManager/drawMenus.cpp rename to src/drawMenus.cpp index 5c142c0..47ea800 100644 --- a/src/pixelManager/drawMenus.cpp +++ b/src/drawMenus.cpp @@ -13,7 +13,7 @@ #include #include "mingl/shape/rectangle.h" #include "playMode.h" -#include "pixelManager/pixelManager.h" +#include "pixelManager.h" #include "utils.h" using namespace nsShape; diff --git a/src/game/gameBasics.cpp b/src/gameBasics.cpp similarity index 99% rename from src/game/gameBasics.cpp rename to src/gameBasics.cpp index 492cd0c..6f17db1 100644 --- a/src/game/gameBasics.cpp +++ b/src/gameBasics.cpp @@ -13,7 +13,7 @@ #include #include "game.h" #include "playMode.h" -#include "pixelManager/goodPixelManager.h" +#include "goodPixelManager.h" #define WININIT window("SUPER Space Invader : Turbo Apocalypse DX - VS GOD", Position(1280, 720), Position(128, 128), nsGraphics::KBlack) diff --git a/src/game/gameManagers.cpp b/src/gameManagers.cpp similarity index 100% rename from src/game/gameManagers.cpp rename to src/gameManagers.cpp diff --git a/src/game/godManager.cpp b/src/godManager.cpp similarity index 100% rename from src/game/godManager.cpp rename to src/godManager.cpp diff --git a/src/pixelManager/goodPixelManager.cpp b/src/goodPixelManager.cpp similarity index 97% rename from src/pixelManager/goodPixelManager.cpp rename to src/goodPixelManager.cpp index a8cae12..fae26f6 100644 --- a/src/pixelManager/goodPixelManager.cpp +++ b/src/goodPixelManager.cpp @@ -1,4 +1,4 @@ -#include "pixelManager/goodPixelManager.h" +#include "goodPixelManager.h" void GoodPixelManager::loadSprites(vector& tasks) { PixelManager::loadSprites(tasks); diff --git a/src/pixelManager/pixelManager.cpp b/src/pixelManager.cpp similarity index 92% rename from src/pixelManager/pixelManager.cpp rename to src/pixelManager.cpp index aa84e76..432e86a 100644 --- a/src/pixelManager/pixelManager.cpp +++ b/src/pixelManager.cpp @@ -1,4 +1,4 @@ -#include "pixelManager/pixelManager.h" +#include "pixelManager.h" void PixelManager::loadSprites(vector& tasks){