diff --git a/src/drawEntity.cpp b/src/drawEntity.cpp new file mode 100644 index 0000000..0af959e --- /dev/null +++ b/src/drawEntity.cpp @@ -0,0 +1,130 @@ +#include +#include "pixelManager.h" +#include "utils.h" +#include "god.h" + +using namespace nsShape; + + +PixelManager::PixelManager(MinGL& a) : window(a) { + window.initGlut(); + window.initGraphic(); +} + +void PixelManager::drawInvaderA(const Position& baseVector, unsigned size, const RGBAcolor& color) const { + float scale = size/(float)100; + window << Circle(Position(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KGray); + window << Triangle(Position(35*scale, 50*scale)+baseVector, Position(15*scale, 25*scale)+baseVector, Position(15*scale, 75*scale)+baseVector, nsGraphics::KBlack); + window << Triangle(Position(25*scale, 50*scale)+baseVector, Position(10*scale, 25*scale)+baseVector, Position(10*scale, 75*scale)+baseVector, nsGraphics::KGray); + window << Triangle(Position(65*scale, 50*scale)+baseVector, Position(85*scale, 25*scale)+baseVector, Position(85*scale, 75*scale)+baseVector, nsGraphics::KBlack); + window << Triangle(Position(75*scale, 50*scale)+baseVector, Position(90*scale, 25*scale)+baseVector, Position(90*scale, 75*scale)+baseVector, nsGraphics::KGray); + window << Rectangle(Position(35*scale, 65*scale)+baseVector, Position(65*scale, 72*scale)+baseVector, nsGraphics::KBlack); +} + +void PixelManager::drawInvaderB(const Position& baseVector, unsigned size, const RGBAcolor& color) const { + float scale = size/(float)100; + window << Circle(Position(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KRed); + window << Rectangle(Position(25*scale, 30*scale)+baseVector, Position(45*scale, 40*scale)+baseVector, nsGraphics::KBlack); + window << Rectangle(Position(55*scale, 30*scale)+baseVector, Position(75*scale, 40*scale)+baseVector, nsGraphics::KBlack); + window << Rectangle(Position(35*scale, 65*scale)+baseVector, Position(65*scale, 72*scale)+baseVector, nsGraphics::KBlack); +} + +void PixelManager::drawInvaderC(const Position& baseVector, unsigned size, const RGBAcolor& color) const { + float scale = size/(float)100; + window << Circle(Position(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KGreen); + window << Circle(Position(35*scale, 35*scale)+baseVector, 10*scale, nsGraphics::KBlack); + window << Circle(Position(65*scale, 35*scale)+baseVector, 10*scale, nsGraphics::KBlack); + window << Rectangle(Position(35*scale, 65*scale)+baseVector, Position(65*scale, 72*scale)+baseVector, nsGraphics::KBlack); +} + +void PixelManager::drawPlayer(unsigned x, unsigned width, const nsGraphics::RGBAcolor& color) const { + width = width-10-10; + width = width/2; + window << Triangle(Position(0+x, 720), Position(5+x, 720), Position(5+x, 720-PLAYER_HEIGHT/2), color); + window << Rectangle(Position(5+x, 720), Position(5+width+x, 720-PLAYER_HEIGHT/2), color); + window << Rectangle(Position(5+width+x, 720), Position(15+width+x, 720-PLAYER_HEIGHT), color); + window << Rectangle(Position(15+width+x, 720), Position(15+width*2+x, 720-PLAYER_HEIGHT/2), color); + window << Triangle(Position(15+width*2+x, 720), Position(15+width*2+x, 720-PLAYER_HEIGHT/2), Position(20+width*2+x, 720), color); + window << Triangle(Position(5+x,720-PLAYER_HEIGHT/2), Position(5+width+x,720-PLAYER_HEIGHT/2), Position(5+width+x,720-PLAYER_HEIGHT*0.9), color); + window << Triangle(Position(15+width+x,720-PLAYER_HEIGHT/2), Position(15+width*2+x,720-PLAYER_HEIGHT/2), Position(15+width+x,720-PLAYER_HEIGHT*0.9), color); +} + +void PixelManager::askPlayerNameMenu(playerID pID, string& name) const { + cout << "ask for player " << (pID+1) << endl; + name = "Thomas"; +} + +void PixelManager::drawMissile(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const { + window << Rectangle(baseVector, baseVector + Position(width, width * PROJ_LENGTH_FACTOR), color); +} + +void PixelManager::drawTorpedo(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const { + window << Rectangle(baseVector, baseVector + Position(width, width * PROJ_LENGTH_FACTOR), color); +} + +void PixelManager::drawSprite(const nsGui::Sprite& sprite, const Position& pos) const { + // see pixelManager.h for the explanation of this hack + const_cast(sprite).setPosition(pos); + sprite.draw(window); +} + +void PixelManager::drawBackground() const { + background.draw(window); +} + +unsigned PixelManager::getScreenHeight() const { + return window.getWindowSize().getY(); +} + +unsigned PixelManager::getScreenWidth() const { + return window.getWindowSize().getX(); +} + +void PixelManager::startFrame() const { + window.clearScreen(); +} + +void PixelManager::endFrame() const { + window.finishFrame(); +} + +void PixelManager::drawGodBench(int y) const { + window << Rectangle(Position(0, y), Position(getScreenWidth(), y+GOD_BENCH_SIZE), nsGraphics::KGray); +} + +void PixelManager::drawGodRightHand(const Position& pos, bool closed) const { + if(closed){ + drawSprite(rightHandClosed, pos); + }else{ + drawSprite(rightHandOpen, pos); + } +} + +void PixelManager::drawGodLeftHand(const Position& pos, bool closed) const { + if(closed){ + drawSprite(leftHandClosed, pos); + }else{ + drawSprite(leftHandOpen, pos); + } +} + +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); +} + +vector +PixelManager::mirrorData(const vector& inPixels, unsigned rowSize) { + vector outPixels; + outPixels.reserve(inPixels.size()); + + for(unsigned i=0;i +#include "pixelManager.h" +#include "utils.h" +#include "god.h" +#include "mingl/shape/rectangle.h" + +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; +} + + +