From 52d9972c93beb597bd17c6cacf8dea66dc7258a7 Mon Sep 17 00:00:00 2001 From: imuny <92868641+imuny0@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:20:37 +0100 Subject: [PATCH] drawmenu --- TODO_LUCAS.txt | 2 ++ headers/menu.h | 13 +++++++++++ headers/pixelManager.h | 6 ++++- src/entityDraw.cpp | 4 ++++ src/menuDraw.cpp | 53 ++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 headers/menu.h diff --git a/TODO_LUCAS.txt b/TODO_LUCAS.txt index 231d360..e16cb89 100644 --- a/TODO_LUCAS.txt +++ b/TODO_LUCAS.txt @@ -2,3 +2,5 @@ nom du joueur ecran 100*100 sans effacer le reste le joueur est gros basevector a change en variable x projectile style fusée + + diff --git a/headers/menu.h b/headers/menu.h new file mode 100644 index 0000000..d5c192e --- /dev/null +++ b/headers/menu.h @@ -0,0 +1,13 @@ +#ifndef GUARD_MENU_H +#define GUARD_MENU_H +#include"vector" +#include"string" + +struct Menu{ + vector entries; + size_t currentValue = 0; + nsGraphics::RGBAcolor selectedColor; + nsGraphics::RGBAcolor unSelectedColor; +}; + +#endif \ No newline at end of file diff --git a/headers/pixelManager.h b/headers/pixelManager.h index 1591b53..701b2a2 100644 --- a/headers/pixelManager.h +++ b/headers/pixelManager.h @@ -11,6 +11,7 @@ #include "mingl/gui/text.h" #include "utils.h" #include "playMode.h" +#include "menu.h" using namespace std; @@ -45,11 +46,14 @@ public: void drawMissile(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const; void drawTorpedo(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const; void drawSprite(const nsGui::Sprite& sprite, const Position& pos) const; + void displayButton(const Position& baseVector,const string& text,nsGraphics::RGBAcolor& color); + void displayText(const Position& pos, const string& text,const nsGraphics::RGBAcolor& color = nsGraphics::KWhite) const; + void displayMenu(const Position& pos, Menu& currentMenu); void drawBackground() const; void drawFPS(unsigned fps) const; - PlayMode showInitialMenu() const; + PlayMode showInitialMenu(); bool showDeathMenu() const; unsigned getScreenHeight() const; unsigned getScreenWidth() const; diff --git a/src/entityDraw.cpp b/src/entityDraw.cpp index 7c660ad..0af959e 100644 --- a/src/entityDraw.cpp +++ b/src/entityDraw.cpp @@ -108,6 +108,10 @@ void PixelManager::drawGodLeftHand(const Position& pos, bool closed) const { } } +void PixelManager::displayText(const Position& pos, const string& text,const nsGraphics::RGBAcolor& color) const { + window << nsGui::Text(pos, text, color); +} + void PixelManager::drawFPS(unsigned fps) const { window << nsGui::Text(Position(getScreenWidth()-100, 10), "FPS : "+ to_string(fps), nsGraphics::KWhite); } diff --git a/src/menuDraw.cpp b/src/menuDraw.cpp index 730d35a..e35c140 100644 --- a/src/menuDraw.cpp +++ b/src/menuDraw.cpp @@ -2,11 +2,60 @@ #include "pixelManager.h" #include "utils.h" #include "god.h" +#include "mingl/shape/rectangle.h" -PlayMode PixelManager::showInitialMenu() const { - return PlayMode::SINGLE; +using namespace nsShape; +using namespace nsGraphics; + +void PixelManager::displayButton(const Position& baseVector,const string& text,nsGraphics::RGBAcolor& color){ + window << Rectangle(Position(190, 430)+baseVector, Position(310, 465)+baseVector, KGray); + window << Rectangle(Position(188, 428)+baseVector, Position(312, 467)+baseVector, KBlack); + window << nsGui::Text(Vec2D(200, 450)+baseVector, text, color); } +void PixelManager::displayMenu(const Position& pos, Menu& currentMenu){ + startFrame(); + size_t margin = 0; + size_t cpt = 0; + for(auto& value : currentMenu.entries ){ + displayButton(Position(0,0+margin)+ pos, value, (currentMenu.currentValue == cpt) ? currentMenu.selectedColor : currentMenu.unSelectedColor ); + ++cpt; + margin += 50; + } + endFrame(); +} + +PlayMode PixelManager::showInitialMenu(){ + //return PlayMode::SINGLE; // will remove + vector entries {"single player","multi player (local)","EXIT"}; + Menu initial {entries,0,nsGraphics::KRed,nsGraphics::KWhite}; + while(true){ + displayMenu(Position(100,100),initial); + // dessends + if (window.isPressed({'s', false})){ + ++initial.currentValue; + if (initial.currentValue > initial.entries.size()) initial.currentValue = 0; + } + // monte + if (window.isPressed({'z', false})) + if (initial.currentValue == 0) initial.currentValue = initial.entries.size()-1; + else --initial.currentValue; + + + else if (window.isPressed({13, false})){ + switch(initial.currentValue){ + case 0: + return PlayMode::SINGLE; + case 1: + return PlayMode::TWO_LOCAL; + case 2: + return PlayMode::EXIT; + } + } + } +} + + bool PixelManager::showDeathMenu() const { return true; }