Moved Renderer::draw's functionality into Field::draw
authorNolan Eakins <nolan@eakins.net>
Fri, 19 Dec 2003 23:59:10 +0000 (23:59 +0000)
committerNolan Eakins <nolan@eakins.net>
Fri, 19 Dec 2003 23:59:10 +0000 (23:59 +0000)
Made the menu popup when a mouse button is pressed

src/Field.cpp
src/Field.hpp
src/Menu.cpp
src/OptionsMenu.cpp
src/Renderer.cpp
src/Renderer.hpp
src/main.cpp

index ad28c7e..121307a 100644 (file)
@@ -1,5 +1,7 @@
-/* $Header: /home/cvsroot/pong/src/Field.cpp,v 1.6 2003/12/19 22:07:06 nolan Exp $
+/* $Header: /home/cvsroot/pong/src/Field.cpp,v 1.7 2003/12/19 23:59:10 nolan Exp $
  */
+#include "Renderer.hpp"
+#include "Color.hpp"
 #include "Field.hpp"
 #include "Entity.hpp"
 
@@ -13,6 +15,12 @@ Field::Field(ConfigFile &config, Mixer *m)
 {
   _width = config.get("gfx", "width", 800);
   _height = config.get("gfx", "height", 600);
+
+  if(!_title_screen.load("data/title.bmp")) {
+    throw Exception("Error loading \"data/title.bmp\"");
+  }
+  _title_screen.setOrigin(_title_screen.getWidth() / 2,
+                         _title_screen.getHeight() / 2);
 }
 
 void Field::start(PlayerNum player)
@@ -101,6 +109,38 @@ void Field::update(float dt) // dt is in seconds
   }
 }
 
+void Field::draw(Renderer &renderer, float dt)
+{
+  //Field::State state = field.state();
+
+  //SDL_FillRect(_screen, NULL, SDL_MapRGB(_screen->format, 0, 0, 0));
+  renderer.drawRect(Color(0, 0, 0), 0, 0,
+                   renderer.getWidth(), renderer.getHeight());
+
+  SDL_Rect dst;
+  if(state() == Field::TITLE) {
+    renderer.drawImage(_title_screen, renderer.getWidth() / 2,
+             renderer.getHeight() / 2,
+             renderer.getWidth(), renderer.getHeight());
+  }
+  else {
+    renderer.drawImage(player1.image(), 0, player1.pos());
+    renderer.drawImage(player2.image(),
+             renderer.getWidth() - player2.width(),
+             player2.pos());
+    renderer.drawImage(ball.image(), ball.pos(0),
+             ball.pos(1));
+
+    if(state() == Field::SCORE || state() == Field::WIN ||
+       state() == Field::PAUSED) {
+      renderer.drawScore(player1.score(), player2.score());
+    }
+  }
+
+  if(renderer.getShowTime())
+    renderer.print(0, 16, var_str("Time: %.2f", time()));
+}
+
 void Field::pause(bool yes)
 {
   if(yes && _state == PLAYING)
index e89ff0c..599e1db 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/pong/src/Field.hpp,v 1.6 2003/12/19 22:07:06 nolan Exp $
+/* $Header: /home/cvsroot/pong/src/Field.hpp,v 1.7 2003/12/19 23:59:10 nolan Exp $
  */
 #ifndef _FIELD_HPP_
 #define _FIELD_HPP_
@@ -8,6 +8,7 @@
 #include "Ball.hpp"
 #include "Paddle.hpp"
 
+class Renderer;
 class Entity;
 
 class Field
@@ -30,6 +31,8 @@ public:
   void start(bool blue, bool red);
 
   void update(float dt); // dt is in seconds
+  void draw(Renderer &renderer, float dt);
+
   void pause(bool yes);
   bool paused();
   void reset();
@@ -54,6 +57,7 @@ private:
   float _time;
   float _height, _width;
   PlayerNum _last_score;
+  Image _title_screen;
 };
 
 #endif
index 3249c7a..c8f1b42 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/pong/src/Menu.cpp,v 1.20 2003/12/19 22:07:06 nolan Exp $
+/* $Header: /home/cvsroot/pong/src/Menu.cpp,v 1.21 2003/12/19 23:59:10 nolan Exp $
  */
 #include <SDL.h>
 #include "Exception.hpp"
@@ -593,6 +593,12 @@ bool MenuStack::handle(SDL_Event &event)
 
     return true;
   }
+  else {
+    if(event.type == SDL_MOUSEBUTTONDOWN) {
+      active(true);
+      return true;
+    }
+  }
 
   return false;
 }
index 20d336c..dcbbade 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/pong/src/OptionsMenu.cpp,v 1.12 2003/12/19 22:07:06 nolan Exp $
+/* $Header: /home/cvsroot/pong/src/OptionsMenu.cpp,v 1.13 2003/12/19 23:59:10 nolan Exp $
  */
 #include "Renderer.hpp"
 #include "Color.hpp"
@@ -231,6 +231,7 @@ void ApplyCB::operator () ()
 
 #ifdef DEBUG
   cout << "Fullscreen? " << _parent.getVidFullscreen() << endl;
+  cout << "BPP: " << _renderer.getBpp() << endl;
 #endif
   if(!_renderer.open(width, height,
                     _renderer.getBpp(), _parent.getVidFullscreen())) {
index 4e6b968..4e3709d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/pong/src/Renderer.cpp,v 1.16 2003/12/18 06:13:27 nolan Exp $
+/* $Header: /home/cvsroot/pong/src/Renderer.cpp,v 1.17 2003/12/19 23:59:10 nolan Exp $
  */
 #include <assert.h>
 #include <SDL.h>
@@ -35,7 +35,6 @@ Renderer::Renderer(ConfigFile &config)
   //_field.width(_width);
 
   char *paths[NUM_IMAGES] = {
-    "data/title.bmp",
     "data/font.bmp",
     "data/digits.bmp"
   };
@@ -50,8 +49,6 @@ Renderer::Renderer(ConfigFile &config)
     }
   }
 
-  _images[TITLE].setOrigin(_images[TITLE].getWidth() / 2,
-                          _images[TITLE].getHeight() / 2);
   _images[DIGITS].setColorKey(0, 0, 0);
   _images[FONT].setColorKey(0, 0, 0);
   /*SDL_SetColorKey(_images[DIGITS], SDL_SRCCOLORKEY|SDL_RLEACCEL,
@@ -231,49 +228,10 @@ void Renderer::drawDigit(int digit, int x, int y)
   SDL_BlitSurface(_images[DIGITS].getSurface(), &src, _screen, &dst);
 }
 
-void Renderer::draw(Field &field, float dt)
+void Renderer::draw(float dt)
 {
-  Field::State state = field.state();
-
-  //assert(_screen->format);
-  SDL_FillRect(_screen, NULL, SDL_MapRGB(_screen->format, 0, 0, 0));
-
-  SDL_Rect dst;
-  if(state == Field::TITLE) {
-    /*dst.x = _screen->w / 2 - _images[TITLE]->w / 2;
-      dst.y = _screen->h / 2 - _images[TITLE]->h / 2;
-      SDL_BlitSurface(_images[TITLE], NULL, _screen, &dst);*/
-    drawImage(_images[TITLE], _screen->w / 2, _screen->h / 2,
-             _screen->w, _screen->h);
-  }
-  else {
-    drawImage(field.player1.image(), 0, field.player1.pos());
-    drawImage(field.player2.image(),
-             _screen->w - field.player2.width(),
-             field.player2.pos());
-    drawImage(field.ball.image(), field.ball.pos(0),
-             field.ball.pos(1));
-
-    //dst.x = (int)field.ball.pos(0) - (int)field.ball.image()->w / 2;
-    //dst.y = (int)field.ball.pos(1) - (int)field.ball.image()->h / 2;
-    //SDL_BlitSurface(field.ball.image(), NULL, _screen, &dst);
-
-    if(state == Field::SCORE || state == Field::WIN ||
-       state == Field::PAUSED) {
-      dst.y = _screen->h / 2 - _images[DIGITS].getHeight() / 2;
-      dst.x = (int)(_screen->w / 2 - _images[DIGITS].getWidth() /
-                   10 * 1.5 - _images[DIGITS].getWidth() / 10);
-      drawDigit(field.player1.score(), dst.x, dst.y);
-      dst.x = (int)(_screen->w / 2 + _images[DIGITS].getWidth() /
-                   10 * 1.5);
-      drawDigit(field.player2.score(), dst.x, dst.y);
-    }
-  }
-
   if(_show_fps)
     print(0, 0, var_str("FPS: %.2f", 1.0f / dt));
-  if(_show_time)
-    print(0, 16, var_str("Time: %.2f", field.time()));
 }
 
 void Renderer::screenShot()
@@ -312,6 +270,9 @@ bool Renderer::open(int width, int height, int bpp, bool fullscreen)
 
     _screen = SDL_SetVideoMode(width, height, bpp, flags);
     if(_screen == NULL) {
+#ifdef DEBUG
+      cout << "Renderer::open: " << SDL_GetError() << endl;
+#endif
       _screen = SDL_SetVideoMode(_width, _height, _bpp, flags);
       if(_screen == NULL) {
        throw Exception(var_str("Unable to reset video mode: %s",
@@ -330,3 +291,14 @@ bool Renderer::open(int width, int height, int bpp, bool fullscreen)
   }
   return true;
 }
+
+void Renderer::drawScore(int p1score, int p2score)
+{
+  int y = getHeight() / 2 - _images[DIGITS].getHeight() / 2;
+  int x = (int)(getWidth() / 2 - _images[DIGITS].getWidth() /
+               10 * 1.5 - _images[DIGITS].getWidth() / 10);
+  drawDigit(p1score, x, y);
+  x = (int)(getWidth() / 2 + _images[DIGITS].getWidth() /
+               10 * 1.5);
+  drawDigit(p2score, x, y);
+}
index 06bad09..715120f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/pong/src/Renderer.hpp,v 1.11 2003/12/18 07:13:14 nolan Exp $
+/* $Header: /home/cvsroot/pong/src/Renderer.hpp,v 1.12 2003/12/19 23:59:10 nolan Exp $
  */
 #ifndef _RENDERER_HPP_
 #define _RENDERER_HPP_
@@ -13,7 +13,7 @@ class Color;
 class Renderer
 {
 public:
-  enum Images { TITLE, FONT, DIGITS, NUM_IMAGES };
+  enum Images { FONT, DIGITS, NUM_IMAGES };
 
   Renderer(ConfigFile &config);
   ~Renderer();
@@ -30,7 +30,8 @@ public:
                 int w = 0, int h = 0);
   void drawImage(Image &image, SDL_Rect *src, SDL_Rect *dst);
   void drawDigit(int digit, int x, int y);
-  void draw(Field &field, float dt = 0.0f);
+  void drawScore(int p1score, int p2score);
+  void draw(float dt = 0.0f);
 
   void flip();
 
index 4f322c6..7a4f685 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/pong/src/main.cpp,v 1.21 2003/12/19 22:07:06 nolan Exp $
+/* $Header: /home/cvsroot/pong/src/main.cpp,v 1.22 2003/12/19 23:59:10 nolan Exp $
  */
 #include "headers.hpp"
 #include <streambuf>
@@ -133,7 +133,8 @@ int main(int argc, char *argv[])
       field.update(dt);
       last_time = cur_time;
 
-      renderer.draw(field, dt);
+      field.draw(renderer, dt);
+      renderer.draw(dt);
       menu.draw(renderer, dt);
       renderer.flip();