From 1e6892f6b1de9ba1d73c9345a545c7875dee9465 Mon Sep 17 00:00:00 2001 From: SIMAILA Djalim Date: Mon, 10 Jan 2022 15:31:07 +0100 Subject: [PATCH] end menu score display --- config.yml | 5 +++++ headers/pixelManager/pixelManager.h | 12 +++++++++++- headers/scoresManager.h | 2 +- src/game/gameBasics.cpp | 2 +- src/pixelManager/drawMenus.cpp | 27 +++++++++++++++++++++++++-- 5 files changed, 43 insertions(+), 5 deletions(-) diff --git a/config.yml b/config.yml index 786204f..08ae95f 100644 --- a/config.yml +++ b/config.yml @@ -8,10 +8,15 @@ # run for a pleasant experience it should be above 30 # maxFPS: 30 # +# The theme setting deffines which theme will be used during gameplay sesssion. +# For a more custom experience use the 'bad' theme, for a more eye pleasant +# experience use the 'good' theme. +# general: maxFPS: 30 theme: bad + ############################# # # # Player configuration # diff --git a/headers/pixelManager/pixelManager.h b/headers/pixelManager/pixelManager.h index 6658037..192eaa6 100644 --- a/headers/pixelManager/pixelManager.h +++ b/headers/pixelManager/pixelManager.h @@ -24,6 +24,7 @@ #include "utils.h" #include "playMode.h" #include "menu.h" +#include "scoresManager.h" #include "mySprite.h" using namespace std; @@ -178,6 +179,14 @@ public: */ void displayMenu(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 + * @fn void displayMenu(const Position& pos, Menu& currentMenu); + */ + void displayMenu(const Position& pos, Menu& currentMenu, const vector& rankings); /*! * @brief display text on screen * @param[in] pos : pixel coordinates of the text @@ -197,9 +206,10 @@ public: /*! * @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 * @fn bool showDeathMenu(); */ - bool showDeathMenu(); + bool showDeathMenu(const vector& rankings); /*! * @brief give the height of the screen diff --git a/headers/scoresManager.h b/headers/scoresManager.h index 9be7cd9..6e578b2 100644 --- a/headers/scoresManager.h +++ b/headers/scoresManager.h @@ -1,6 +1,6 @@ /*! * - * @file ScoreManager.h + * @file scoresManager.h * @author RUBINI Thomas * @date January 2022 * @version 1.0 diff --git a/src/game/gameBasics.cpp b/src/game/gameBasics.cpp index ad9666d..7a53c77 100644 --- a/src/game/gameBasics.cpp +++ b/src/game/gameBasics.cpp @@ -73,7 +73,7 @@ void Game::managedGames() { enterGameLoop(); // will read the playMode handleScoreSaving(); cout << "END OF GAME" << endl; - if(!pm->showDeathMenu())playMode = PlayMode::NONE; + if(!pm->showDeathMenu(sm.scores))playMode = PlayMode::NONE; } } } diff --git a/src/pixelManager/drawMenus.cpp b/src/pixelManager/drawMenus.cpp index ba575bb..aeb5b0d 100644 --- a/src/pixelManager/drawMenus.cpp +++ b/src/pixelManager/drawMenus.cpp @@ -40,6 +40,29 @@ void PixelManager::displayMenu(const Position& pos, Menu& currentMenu){ endFrame(); } + +void PixelManager::displayMenu(const Position& pos, Menu& currentMenu, const vector& rankings){ + startFrame(); + drawSprite(menuBackground); + drawSprite(logo,Position(100,50)); + drawText(Position(1150, 700), "version 1.0.0"); + unsigned margin = 0; + unsigned cpt = 0; + for(string& value : currentMenu.entries ){ + displayButton(Position(0,0+margin)+ pos, value, (currentMenu.currentValue == cpt) ? currentMenu.selectedColor : currentMenu.unSelectedColor ); + ++cpt; + margin += 50; + } + margin = 0; + drawText(Position(0,350), "Top 10 des meilleurs joueurs",nsGraphics::KWhite); + for (auto& value: rankings){ + drawText(Position(0,400+margin),value.name,nsGraphics::KWhite); + drawText(Position(140,400+margin),to_string(value.score),nsGraphics::KWhite); + margin += 50; + } + endFrame(); +} + PlayMode PixelManager::showInitialMenu(){ vector entries {"single player","multi player (local)","exit"}; Menu initial {entries,0,nsGraphics::KRed,nsGraphics::KWhite}; @@ -124,14 +147,14 @@ void PixelManager::askPlayerNameMenu(playerID pID, unsigned score, string& name) exit(0); } -bool PixelManager::showDeathMenu() { +bool PixelManager::showDeathMenu(const vector& rankings) { vector entries {"retry","main menu"}; Menu death {entries,0,nsGraphics::KRed,nsGraphics::KWhite}; unsigned xOffset = getScreenHeight() / 2 ; unsigned yOffset = getScreenWidth() / 2 - 90; chrono::milliseconds waitTime = chrono::milliseconds(100); while(window.isOpen()){ - displayMenu(Position(yOffset,xOffset),death); + displayMenu(Position(yOffset,xOffset),death,rankings); // go down if (window.isPressed({'s', false})){ ++death.currentValue;