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
|
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)
|