SUPER Space invader : Turbo edition DX - VS GOD 1.0.0
A simple space invader ripoff
drawEntities.cpp
Go to the documentation of this file.
1
13#include "mingl/gui/text.h"
15#include "utils.h"
16#include "god.h"
17
18using namespace nsShape;
19using namespace nsGui;
20
21
22PixelManager::PixelManager(MinGL& win) : window(win) {
23 window.initGlut();
24 window.initGraphic();
25}
26
27void PixelManager::drawHeart(const Position& baseVector) const {
28 window << Circle(Position(10, 10)+baseVector,10, nsGraphics::KRed);
29 window << Circle(Position(30, 10)+baseVector,10, nsGraphics::KRed);
30 window << Triangle(Position(0,10)+baseVector,Position(40,10)+baseVector,Position(20,40)+baseVector,nsGraphics::KRed);
31}
32
33void PixelManager::drawInvaderA(const Position& baseVector, unsigned size, const RGBAcolor& color) const {
34 float scale = size/(float)100;
35 window << Circle(Position(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KGray);
36 window << Triangle(Position(35*scale, 50*scale)+baseVector, Position(15*scale, 25*scale)+baseVector, Position(15*scale, 75*scale)+baseVector, nsGraphics::KBlack);
37 window << Triangle(Position(25*scale, 50*scale)+baseVector, Position(10*scale, 25*scale)+baseVector, Position(10*scale, 75*scale)+baseVector, nsGraphics::KGray);
38 window << Triangle(Position(65*scale, 50*scale)+baseVector, Position(85*scale, 25*scale)+baseVector, Position(85*scale, 75*scale)+baseVector, nsGraphics::KBlack);
39 window << Triangle(Position(75*scale, 50*scale)+baseVector, Position(90*scale, 25*scale)+baseVector, Position(90*scale, 75*scale)+baseVector, nsGraphics::KGray);
40 window << Rectangle(Position(35*scale, 65*scale)+baseVector, Position(65*scale, 72*scale)+baseVector, nsGraphics::KBlack);
41}
42
43void PixelManager::drawInvaderB(const Position& baseVector, unsigned size, const RGBAcolor& color) const {
44 float scale = size/(float)100;
45 window << Circle(Position(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KRed);
46 window << Rectangle(Position(25*scale, 30*scale)+baseVector, Position(45*scale, 40*scale)+baseVector, nsGraphics::KBlack);
47 window << Rectangle(Position(55*scale, 30*scale)+baseVector, Position(75*scale, 40*scale)+baseVector, nsGraphics::KBlack);
48 window << Rectangle(Position(35*scale, 65*scale)+baseVector, Position(65*scale, 72*scale)+baseVector, nsGraphics::KBlack);
49}
50
51void PixelManager::drawInvaderC(const Position& baseVector, unsigned size, const RGBAcolor& color) const {
52 float scale = size/(float)100;
53 window << Circle(Position(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KGreen);
54 window << Circle(Position(35*scale, 35*scale)+baseVector, 10*scale, nsGraphics::KBlack);
55 window << Circle(Position(65*scale, 35*scale)+baseVector, 10*scale, nsGraphics::KBlack);
56 window << Rectangle(Position(35*scale, 65*scale)+baseVector, Position(65*scale, 72*scale)+baseVector, nsGraphics::KBlack);
57}
58
59// playerID argument is unused here, so we don't even give it a name
60void PixelManager::drawPlayer(playerID, unsigned x, unsigned width, const nsGraphics::RGBAcolor& color) const {
61 width = width-10-10;
62 width = width/2;
63 window << Triangle(Position(0+x, 720), Position(5+x, 720), Position(5+x, 720-PLAYER_HEIGHT/2), color);
64 window << Rectangle(Position(5+x, 720), Position(5+width+x, 720-PLAYER_HEIGHT/2), color);
65 window << Rectangle(Position(5+width+x, 720), Position(15+width+x, 720-PLAYER_HEIGHT), color);
66 window << Rectangle(Position(15+width+x, 720), Position(15+width*2+x, 720-PLAYER_HEIGHT/2), color);
67 window << Triangle(Position(15+width*2+x, 720), Position(15+width*2+x, 720-PLAYER_HEIGHT/2), Position(20+width*2+x, 720), color);
68 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);
69 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);
70}
71
72void PixelManager::drawMissile(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const {
73 window << Rectangle(baseVector, baseVector + Position(width, width * PROJ_LENGTH_FACTOR), color);
74
75}
76
77void PixelManager::drawTorpedo(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const {
78 window << Rectangle(baseVector, baseVector + Position(width, width * PROJ_LENGTH_FACTOR), color);
79}
80
81void PixelManager::drawSprite(const MySprite& msp, const Position& pos) const {
82 // The sprite is associated with a Vec2D for whatever reason, so yeah, we modify it each time we draw it
83 msp.sp->setPosition(pos);
84 msp.sp->draw(window);
85}
86
87void PixelManager::drawGodBench(int y) const {
88 window << Rectangle(Position(0, y), Position(getScreenWidth(), y+GOD_BENCH_SIZE), nsGraphics::KGray);
89}
90
91void PixelManager::drawGodFace(int y, bool angry) const {
92 Text t(
94 angry ? ">w<" : ".w.",
95 nsGraphics::KBlue,
96 GlutFont::GlutFonts::BITMAP_TIMES_ROMAN_24,
97 Text::HorizontalAlignment::ALIGNH_CENTER
98 );
99
100 // computeHeight() returns a height bigger than the actual text size, that's why there's padding above it(
101 t.setPosition(t.getPosition()+Position(0, t.computeHeight()));
102 window << t;
103
104}
105
106void PixelManager::drawText(const Position& pos, const string& text, const nsGraphics::RGBAcolor& color, Font font) const {
107 window << Text(pos, text, color, font);
108}
optional< nsGui::Sprite > sp
optional actual Sprite We need to use an optional to init the object through a function,...
Definition: mySprite.h:20
void drawGodFace(int y, bool angry=false) const
display god's face
PixelManager(MinGL &window)
constructor the pixel manager class
void drawSprite(const MySprite &msp, const Position &pos) const
display a sprite on screen
virtual void drawPlayer(playerID pID, unsigned x, unsigned width, const nsGraphics::RGBAcolor &color) const
display a player on screen
void drawGodBench(int y) const
display god's bar
virtual void drawMissile(const Position &baseVector, unsigned width, const nsGraphics::RGBAcolor &color) const
display a missile on screen
void drawText(const Position &pos, const string &text, const RGBAcolor &color=nsGraphics::KWhite, Font font=Font::BITMAP_TIMES_ROMAN_24) const
display text on screen
virtual void drawInvaderB(const Position &baseVector, unsigned size, const RGBAcolor &color) const
display a type B invader on screen
virtual void drawHeart(const Position &baseVector) const
display a singular heart on screen
unsigned getScreenWidth() const
give the width of the screen
virtual void drawTorpedo(const Position &baseVector, unsigned width, const nsGraphics::RGBAcolor &color) const
display a torpedo on screen
virtual void drawInvaderA(const Position &baseVector, unsigned size, const RGBAcolor &color) const
display a type A invader on screen
MinGL & window
display window
Definition: pixelManager.h:51
virtual void drawInvaderC(const Position &baseVector, unsigned size, const RGBAcolor &color) const
display a type C invader on screen
Special entity known as "God"
#define GOD_BENCH_SIZE
Definition: god.h:34
Manages screen display.
nsGui::GlutFont::GlutFonts Font
Definition: pixelManager.h:32
utilies for the game
unsigned playerID
Definition: utils.h:52
#define PROJ_LENGTH_FACTOR
Definition: utils.h:20
#define PLAYER_HEIGHT
Definition: utils.h:19
nsGraphics::Vec2D Position
Definition: utils.h:51