-
Notifications
You must be signed in to change notification settings - Fork 0
/
game.h
111 lines (76 loc) · 1.53 KB
/
game.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#ifndef __GAME_H__
#define __GAME_H__
#include <vector>
#include <SFML/Graphics.hpp>
#include "cell.h"
#include "utils.h"
#include "gameBoard.h"
/**
* Utility structure representing
* a text box on the screen.
*/
struct TextBox {
sf::Font font;
std::string prefix;
std::string buffer;
TextBox();
void
Draw(sf::RenderTarget& texture) const;
void
Clear();
};
/**
* Main game class, containing the basic infrastructure
* like the game loop, lists of entities,
* basic event handlers, and so on.
*/
class Game {
private:
/*
* These variables together represent the state with
* regard to user input.
*
* This is ugly. TODO: A state machine with well
* defined transitions
*/
bool _running;
bool _collectInput;
bool _collectJump;
bool _collectCentre;
bool _buildingPattern;
int _patternIndex;
TextBox _inputBuffer;
GameBoard _gameBoard;
/*
* Builtin and user-defined configurations of cells that
* get treated as one.
*/
std::vector<CellSet> _patterns;
CellSet *_activePattern;
sf::RenderWindow _window;
// Information about the window view.
ViewInfo _view;
void
LoadPatterns(const std::string& patternFileName);
void
RotateActivePattern();
void
ApplyPatternAtMouse();
void
ActOnInput();
void
ExitBuildMode();
/*
* Resets the various state buffers.
*/
void
ClearState();
void
Draw();
public:
Game(const CellSet& startingPoints,
const std::string& patternFileName);
void
Start();
};
#endif