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
|
#ifndef GAME_H_7D2B65AE
#define GAME_H_7D2B65AE
#include <tuple>
#include <set>
#include <random>
#include <list>
#include "map.h"
const int GAME_WIDTH = 640*2;
const int GAME_HEIGHT = 480*2;
const int TILE_WIDTH = 8*2;
const int TILE_HEIGHT = TILE_WIDTH;
const int INIT_ZOOM = 10;
const int ZOOM_X_FACTOR = 8;
const int ZOOM_Y_FACTOR = 6;
const int RADIUS = 8;
enum class Tile {
Floor,
Wall,
Dust,
Lamp
};
enum class Source {
None,
Dust,
Lamp,
Player
};
enum class LoseState {
None,
PoppingLamps,
PoppingPlayer,
Outro
};
struct Input {
bool left = false;
bool right = false;
bool up = false;
bool down = false;
};
using coord = std::tuple<int, int>;
struct Kickup {
int x;
int y;
size_t cur;
size_t radius;
size_t chain;
std::set<coord> done;
std::set<coord> front;
};
struct MapData {
Tile tile = Tile::Floor;
bool lit = false;
bool wasLit = false;
size_t dustLife = 0;
Source lightType = Source::None;
int lightRadius = 0;
std::set<coord> litTiles;
};
class Game {
public:
Game(std::mt19937& rng) :
rng(rng),
map(
-INIT_ZOOM * ZOOM_X_FACTOR / 2,
-INIT_ZOOM * ZOOM_Y_FACTOR / 2,
INIT_ZOOM * ZOOM_X_FACTOR,
INIT_ZOOM * ZOOM_Y_FACTOR)
{
}
std::mt19937& rng;
Map<MapData> map;
std::list<Kickup> kickups;
int litSpots = 0;
bool dirtyLighting = true;
size_t numLamps = 0;
size_t numDust = 0;
int player_x = 0;
int player_y = 0;
bool renderPlayer = true;
int curZoom = INIT_ZOOM;
int maxZoom = INIT_ZOOM;
bool zooming = false;
//size_t oldZoom;
int zoomProgress = 0;
bool firstInput = false;
Input lastInput;
};
#endif /* end of include guard: GAME_H_7D2B65AE */
|