From 98ba22e7064db57316dfff1ae127feb3dceeb73e Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Thu, 31 Jul 2014 13:58:22 +0200 Subject: Initial commit --- docs/html/_game_panel_8cpp_source.html | 240 +++++++++++++++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 docs/html/_game_panel_8cpp_source.html (limited to 'docs/html/_game_panel_8cpp_source.html') diff --git a/docs/html/_game_panel_8cpp_source.html b/docs/html/_game_panel_8cpp_source.html new file mode 100644 index 0000000..3511c39 --- /dev/null +++ b/docs/html/_game_panel_8cpp_source.html @@ -0,0 +1,240 @@ + + + + +Rally X: source/presentation/GamePanel.cpp Source File + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + +
+
Rally X + +
+
ELEN3009 Project by Justin Wernick and David Schneider
+
+
+ + + + + +
+
+
source/presentation/GamePanel.cpp
+
+
+Go to the documentation of this file.
00001 #include "GamePanel.h"
+00002 
+00003 GamePanel::GamePanel(ALLEGRO_BITMAP* back, ALLEGRO_BITMAP* front, int x, int y, int width, int height)
+00004     :ScreenPanel(back, front, x, y, width, height),
+00005     _mazeblockWidth(_width/BLOCKS_PER_ROW),
+00006     _offsetX(0),
+00007     _offsetY(0),
+00008     _bitmapStore(_mazeblockWidth)
+00009 {
+00010 }
+00011 
+00012 void GamePanel::draw(const Maze& maze, const list<PlayerCar>& players, const list<EnemyCar>& enemies, const list<Checkpoint>& checkpoints, const list<Rock>& rocks, const list<Smokescreen>& smokescreens, const list<DestroyedObjectPopup>& popups)
+00013 {
+00014     ALLEGRO_BITMAP* prev_draw = al_get_target_bitmap();
+00015     al_set_target_bitmap(_back);
+00016 
+00017     al_clear_to_color(BLANK);
+00018 
+00019     float _maxOffsetX = getPanelX(maze.width()) - _width;
+00020     float _maxOffsetY = getPanelY(maze.height()) - _height;
+00021 
+00022     if (!players.empty())
+00023     {
+00024         _offsetX = getPanelX(players.front().x()) - _width/2;
+00025         if (_offsetX < 0) _offsetX = 0;
+00026         else if (_offsetX > _maxOffsetX) _offsetX = _maxOffsetX;
+00027 
+00028         _offsetY = getPanelY(players.front().y()) - _height/2;
+00029         if (_offsetY < 0) _offsetY = 0;
+00030         else if (_offsetY > _maxOffsetY) _offsetY = _maxOffsetY;
+00031     }
+00032 
+00033     draw(maze);
+00034 
+00035     for (list<PlayerCar>::const_iterator iter = players.begin(); iter != players.end(); ++iter)
+00036     {
+00037         draw(*iter);
+00038     }
+00039     for (list<EnemyCar>::const_iterator iter = enemies.begin(); iter != enemies.end(); ++iter)
+00040     {
+00041         draw(*iter);
+00042     }
+00043     for (list<Checkpoint>::const_iterator iter = checkpoints.begin(); iter != checkpoints.end(); ++iter)
+00044     {
+00045         draw(*iter);
+00046     }
+00047     for (list<Rock>::const_iterator iter = rocks.begin(); iter != rocks.end(); ++iter)
+00048     {
+00049         draw(*iter);
+00050     }
+00051     for (list<Smokescreen>::const_iterator iter = smokescreens.begin(); iter != smokescreens.end(); ++iter)
+00052     {
+00053         draw(*iter);
+00054     }
+00055     for (list<DestroyedObjectPopup>::const_iterator iter = popups.begin(); iter != popups.end(); ++iter)
+00056     {
+00057         draw(*iter);
+00058     }
+00059 
+00060     al_set_target_bitmap(prev_draw);
+00061 }
+00062 
+00063 void GamePanel::draw(const Maze& maze)
+00064 {
+00065     //only draws a parts of the maze that would appear on the screen
+00066     int minX = floor((_offsetX-_mazeblockWidth)/_mazeblockWidth);
+00067     int maxX = ceil((_offsetX+_width)/_mazeblockWidth);
+00068     int minY = floor((_offsetY-_mazeblockWidth)/_mazeblockWidth);
+00069     int maxY = ceil((_offsetY+_height)/_mazeblockWidth);
+00070 
+00071     ALLEGRO_BITMAP* wallBitmap = _bitmapStore.getBitmap(BitmapStore::MAZE_WALL);
+00072     ALLEGRO_BITMAP* floorBitmap = _bitmapStore.getBitmap(BitmapStore::MAZE_FLOOR);
+00073     //used to only have one al_draw_bitmap command
+00074     ALLEGRO_BITMAP* currentBitmap = floorBitmap;
+00075     for (int x=minX; x<maxX&&x<maze.width(); ++x)
+00076     {
+00077         for (int y=minY; y<maxY&&y<maze.height(); ++y)
+00078         {
+00079             if (maze.getSolid(x,y))
+00080             {
+00081                 currentBitmap = wallBitmap;
+00082             }
+00083             else
+00084             {
+00085                 currentBitmap = floorBitmap;
+00086             }
+00087             al_draw_bitmap(currentBitmap, getPanelX(x)-_offsetX, getPanelY(y)-_offsetY, 0);
+00088         }
+00089     }
+00090 }
+00091 
+00092 void GamePanel::draw(const GameObject& object)
+00093 {
+00094     //only draws a gameobject if it would appear on the screen
+00095     if (object.x() < (_offsetX-_mazeblockWidth)/_mazeblockWidth) return;
+00096     if (object.x() > (_offsetX+_width)/_mazeblockWidth) return;
+00097     if (object.y() < (_offsetY-_mazeblockWidth)/_mazeblockWidth) return;
+00098     if (object.y() > (_offsetY+_height)/_mazeblockWidth) return;
+00099 
+00100     ALLEGRO_BITMAP* bitmap = _bitmapStore.getBitmap(object.image());
+00101 
+00102     float angle = 0;
+00103     switch(object.facing())
+00104     {
+00105         case Maze::UP:
+00106             angle = 0;
+00107             break;
+00108         case Maze::RIGHT:
+00109             angle = ALLEGRO_PI/2;
+00110             break;
+00111         case Maze::DOWN:
+00112             angle = ALLEGRO_PI;
+00113             break;
+00114         case Maze::LEFT:
+00115             angle = 3*ALLEGRO_PI/2;
+00116             break;
+00117     }
+00118 
+00119     float objectX = getPanelX(object.x());
+00120     float objectY = getPanelY(object.y());
+00121     float center = _mazeblockWidth/2;
+00122 
+00123     al_draw_rotated_bitmap(bitmap, center , center , objectX+center-_offsetX, objectY+center-_offsetY, angle, 0);
+00124 }
+00125 
+00126 float GamePanel::getPanelX(const double& x) const
+00127 {
+00128     return static_cast<float>(x*_mazeblockWidth);
+00129 }
+00130 float GamePanel::getPanelY(const double& y) const
+00131 {
+00132     return static_cast<float>(y*_mazeblockWidth);
+00133 }
+
+
+ +
+ All Classes Files Functions Variables Typedefs Enumerations Enumerator
+ + +
+ +
+ + + + + + + -- cgit v1.2.3