Merge remote-tracking branch 'origin/master'

This commit is contained in:
Thomas 2022-01-10 16:01:38 +01:00
commit f671227a8b
No known key found for this signature in database
GPG Key ID: E538821A6CDFDAD7
7 changed files with 62 additions and 12 deletions

View File

@ -8,10 +8,15 @@
# run for a pleasant experience it should be above 30 # run for a pleasant experience it should be above 30
# maxFPS: 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: general:
maxFPS: 30 maxFPS: 30
theme: bad theme: bad
############################# #############################
# # # #
# Player configuration # # Player configuration #

View File

@ -132,6 +132,12 @@ private:
// drawing methods // drawing methods
/*!
* @brief display players score on the screen
* @fn void displayScore();
*/
void displayScore() const;
/*! /*!
* @brief main display function, clear the window and calls sub display functions * @brief main display function, clear the window and calls sub display functions
* @param[in] fps : current screen refresh rate * @param[in] fps : current screen refresh rate

View File

@ -24,6 +24,7 @@
#include "utils.h" #include "utils.h"
#include "playMode.h" #include "playMode.h"
#include "menu.h" #include "menu.h"
#include "scoresManager.h"
#include "mySprite.h" #include "mySprite.h"
using namespace std; using namespace std;
@ -180,6 +181,14 @@ public:
*/ */
void displayMenu(const Position& pos, Menu& currentMenu); 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<ScoreLink>& rankings);
/*! /*!
* @brief display text on screen * @brief display text on screen
* @param[in] pos : pixel coordinates of the text * @param[in] pos : pixel coordinates of the text
@ -199,9 +208,10 @@ public:
/*! /*!
* @brief show the menu after a player lose, or all invader has been defeated * @brief show the menu after a player lose, or all invader has been defeated
* @return true if the player plays again, else false * @return true if the player plays again, else false
* @param[in] rankings : the current top 5 score
* @fn bool showDeathMenu(); * @fn bool showDeathMenu();
*/ */
bool showDeathMenu(); bool showDeathMenu(const vector<ScoreLink>& rankings);
/*! /*!
* @brief give the height of the screen * @brief give the height of the screen

View File

@ -1,6 +1,6 @@
/*! /*!
* *
* @file ScoreManager.h * @file scoresManager.h
* @author RUBINI Thomas * @author RUBINI Thomas
* @date January 2022 * @date January 2022
* @version 1.0 * @version 1.0

View File

@ -36,6 +36,7 @@ void Game::displayAll(unsigned fps) const {
displayGod(); displayGod();
displayScore();
DEBUG_INSTR( DEBUG_INSTR(
pm->drawText(Position(pm->getScreenWidth()-200, 20), "FPS : "+to_string(fps), nsGraphics::KWhite, Font::BITMAP_8_BY_13); pm->drawText(Position(pm->getScreenWidth()-200, 20), "FPS : "+to_string(fps), nsGraphics::KWhite, Font::BITMAP_8_BY_13);
@ -69,6 +70,17 @@ void Game::displayHearts(playerID pID) const {
} }
} }
void Game::displayScore() const{
unsigned margin = 0;
unsigned playerNumber = 1;
for (auto& player: players){
pm->drawText(Position(0,10+margin),"player "+to_string(playerNumber)+" :",nsGraphics::KWhite,Font::BITMAP_8_BY_13);
pm->drawText(Position(100,10+margin),to_string(player.score) ,nsGraphics::KWhite,Font::BITMAP_8_BY_13);
++playerNumber;
margin +=15;
}
}
void Game::displayInvader(const Position& pos, InvaderType type) const { void Game::displayInvader(const Position& pos, InvaderType type) const {
if(type==InvaderType::NONE)return; if(type==InvaderType::NONE)return;
const InvaderTypeDef& invDef = confData.invadersDef.at(type); const InvaderTypeDef& invDef = confData.invadersDef.at(type);

View File

@ -74,7 +74,7 @@ void Game::managedGames() {
enterGameLoop(); // will read the playMode enterGameLoop(); // will read the playMode
DEBUG_MSG("END End of game") DEBUG_MSG("END End of game")
handleScoreSaving(); handleScoreSaving();
if(!pm->showDeathMenu())playMode = PlayMode::NONE; if(!pm->showDeathMenu(sm.scores))playMode = PlayMode::NONE;
} }
} }
} }
@ -109,12 +109,6 @@ void Game::initGame(){
} }
/**
* Plays the game, and returns once the game is finished
*
* @return @WinValue::PLAYERS if the players won, @WinValue::INVADERS is the invaders won, WinValue::NOBODY else (also in case of error)
*/
#define START_TIMER() DEBUG_INSTR(debugTime = chrono::high_resolution_clock::now()) #define START_TIMER() DEBUG_INSTR(debugTime = chrono::high_resolution_clock::now())
#define PRINT_TIMER(X) DEBUG_MSG((X) << ": " << chrono::duration_cast<chrono::nanoseconds>(chrono::high_resolution_clock::now()-debugTime).count()) #define PRINT_TIMER(X) DEBUG_MSG((X) << ": " << chrono::duration_cast<chrono::nanoseconds>(chrono::high_resolution_clock::now()-debugTime).count())

View File

@ -40,6 +40,29 @@ void PixelManager::displayMenu(const Position& pos, Menu& currentMenu){
endFrame(); endFrame();
} }
void PixelManager::displayMenu(const Position& pos, Menu& currentMenu, const vector<ScoreLink>& 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(){ PlayMode PixelManager::showInitialMenu(){
vector<string> entries {"single player","multi player (local)","exit"}; vector<string> entries {"single player","multi player (local)","exit"};
Menu initial {entries,0,nsGraphics::KRed,nsGraphics::KWhite}; Menu initial {entries,0,nsGraphics::KRed,nsGraphics::KWhite};
@ -124,14 +147,14 @@ void PixelManager::askPlayerNameMenu(playerID pID, unsigned score, string& name)
exit(0); exit(0);
} }
bool PixelManager::showDeathMenu() { bool PixelManager::showDeathMenu(const vector<ScoreLink>& rankings) {
vector<string> entries {"retry","main menu"}; vector<string> entries {"retry","main menu"};
Menu death {entries,0,nsGraphics::KRed,nsGraphics::KWhite}; Menu death {entries,0,nsGraphics::KRed,nsGraphics::KWhite};
unsigned xOffset = getScreenHeight() / 2 ; unsigned xOffset = getScreenHeight() / 2 ;
unsigned yOffset = getScreenWidth() / 2 - 90; unsigned yOffset = getScreenWidth() / 2 - 90;
chrono::milliseconds waitTime = chrono::milliseconds(100); chrono::milliseconds waitTime = chrono::milliseconds(100);
while(window.isOpen()){ while(window.isOpen()){
displayMenu(Position(yOffset,xOffset),death); displayMenu(Position(yOffset,xOffset),death,rankings);
// go down // go down
if (window.isPressed({'s', false})){ if (window.isPressed({'s', false})){
++death.currentValue; ++death.currentValue;