d3cb8b37233edf0e03d6976fa561ee841e51576c
Stefan Schuermans base class for games

Stefan Schuermans authored 5 years ago

1) /* Blinker
2)    Copyright 2011-2019 Stefan Schuermans <stefan@blinkenarea.org>
3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4)    a blinkenarea.org project */
5) 
6) #ifndef BLINKER_GAME_H
7) #define BLINKER_GAME_H
8) 
9) #include <string>
10) #include <vector>
11) 
12) #include <BlinkenLib/BlinkenFrame.h>
13) 
14) #include "Color.h"
15) #include "ColorFile.h"
16) #include "File.h"
17) #include "Format.h"
18) #include "FormatFile.h"
19) #include "Mgrs.h"
20) #include "Module.h"
21) #include "OutStreamFile.h"
22) 
23) namespace Blinker {
24) 
25) /// base class for games
26) class Game: public Module
27) {
28) protected:
29)   /// raw color data matching image buffer
30)   typedef std::vector<unsigned char> ColorData;
31) 
32) public:
33)   /**
34)    * @brief constructor
35)    * @param[in] name module name
36)    * @param[in] mgrs managers
37)    * @param[in] dirBase base directory
38)    */
39)   Game(const std::string &name, Mgrs &mgrs, const Directory &dirBase);
40) 
41)   /// virtual destructor
42)   virtual ~Game();
43) 
44) private:
45)   /// copy constructor disabled
46)   Game(const Game &that);
47) 
48)   /// assignment operator disabled
49)   const Game & operator=(const Game &that);
50) 
51) public:
52)   /// check for update of configuration
Stefan Schuermans begin of Pong game

Stefan Schuermans authored 5 years ago

53)   virtual void updateConfig() final;
54) 
55)   /// check for update of configuration (derived game), return true on update
56)   virtual bool updateConfigGame() = 0;
Stefan Schuermans base class for games

Stefan Schuermans authored 5 years ago

57) 
58) protected:
59)   /// re-initialize game (e.g. due to config change)
60)   virtual void reinitialize() = 0;
61) 
62)   /// redraw current game image, expected to call sendFrame() at end
63)   virtual void redraw() = 0;
64) 
65)   /// activate game: set up image buffer, call redraw()
66)   void activate();
67) 
68)   /// deactivate game: tear down image buffer, deactivate output
69)   void deactivate();
70) 
71)   /// check if integer is between minimum and maximum values
72)   static bool checkLimitInt(int i, int min, int max)
73)   {
74)     return i >= min && i <= max;
75)   }
76) 
77)   /// limit integer to minimum and maximum values
78)   static void limitInt(int &i, int min, int max)
79)   {
80)     if (i < min) {
81)       i = min;
82)     }
83)     if (i > max) {
84)       i = max;
85)     }
86)   }
87) 
88)   /// check if range of two integers is nonEmpty and limit the integers
89)   static bool checkIntRangeLimit(int &i1, int &i2, int min, int max)
90)   {
91)     if (i1 > i2) {
92)       return false;
93)     }
94)     limitInt(i1, min, max);
95)     limitInt(i2, min, max);
96)     return true;
97)   }
98) 
99)   /// set pixel in image buffer
100)   void pixel(int y, int x, ColorData const &cd);
101) 
102)   /// draw horizontal line to image buffer
103)   void lineHor(int y, int x1, int x2, ColorData const &cd);
104) 
105)   /// draw vertical line to image buffer
106)   void lineVert(int y1, int y2, int x, ColorData const &cd);
107) 
108)   /// draw non-filled rectangle to image buffer
109)   void rect(int y1, int y2, int x1, int x2, ColorData const &cd);
110) 
111)   /// draw filled rectangle to image buffer
112)   void rectFill(int y1, int y2, int x1, int x2, ColorData const &cd);
113) 
Stefan Schuermans begin of Pong game

Stefan Schuermans authored 5 years ago

114)   /// process update of color file, return true on update
115)   bool colorUpdate(ColorFile &colorFile, ColorData &data) const;
116) 
Stefan Schuermans base class for games

Stefan Schuermans authored 5 years ago

117)   /// convert color to raw color data
Stefan Schuermans begin of Pong game

Stefan Schuermans authored 5 years ago

118)   void color2data(ColorFile const &colorFile, ColorData &data) const;