Deep RTS
Game.h
Go to the documentation of this file.
1//
2// Created by Per-Arne on 23.02.2017.
3//
4
5#ifndef WARC2SIM_GAME_H
6#define WARC2SIM_GAME_H
7
8#include <memory>
9#include <map>
10#include <unordered_map>
11#include <iostream>
12#include <chrono>
13#include "Player.h"
14#include "Map.h"
15#include "Tilemap.h"
16#include "Config.h"
17#include <xtensor/xarray.hpp>
18#include <cstdint>
19#include <opencv2/core/mat.hpp>
20
21class BaseGUI;
22
23class Game {
25 std::chrono::high_resolution_clock::time_point now;
26 std::chrono::high_resolution_clock::time_point _update_next;
27 std::chrono::high_resolution_clock::time_point _stats_next;
28
29 std::chrono::nanoseconds _update_interval{};
30
31 uint32_t _update_delta = 0;
32
34 void timerInit();
35
37 bool running{};
38
39
41 void _internalInit();
42
43public:
45 std::unique_ptr<BaseGUI> gui;
46
48 explicit Game(const std::string& map_file);
49 Game(const std::string& map_file, Config config);
51
52
60
63
65 xt::xarray<double, xt::layout_type::row_major> state;
66
69
72
74 std::vector<Player> players;
75
77 std::vector<Unit> units;
78
79 std::unordered_map<std::string, Unit*> unitsNameMap;
80
82 uint32_t id{};
83
85 uint64_t ticks = 0;
86
88 uint32_t episode = 1;
89
91 uint32_t max_fps{};
92
93
95 uint32_t currentFPS = 0;
96
97
99 bool terminal = false;
100
103
109
111 Unit &getUnit(int idx);
112
113 uint32_t getMaxFPS() const;
114
115
116 uint32_t getFPS() const;
117
118
119 uint64_t getGameDuration() const;
120
121 uint64_t getTicks() const ;
122
123 uint32_t getWidth() const;
124
125 uint32_t getHeight() const;
126
127 uint32_t getEpisode() const;
128
129 uint32_t getId() const;
130
131 long getTicksModifier() const;
132
133 Unit* getUnitByNameID(const std::string& nameID);
134
140
142 void setMaxFPS(int fps_);
143
145 void setSelectedPlayer(Player &player);
146
152 // Add a player to the game
153 Player &addPlayer();
154
155 // Insert a player using a precreated object. specifically useful for python
156 void insertPlayer(Player &player);
157
159 void tick();
160
162 virtual void update();
163 virtual void _update();
164
166 const cv::Mat& render();
167
169 virtual const cv::Mat& _render() const;
170
172 void caption();
173
174 virtual void _caption() const;
175
176 // Enables the running flag and updates the clock
177 void start();
178
179 // Disables the running flag
180 void stop();
181
182 // Resets the game
183 void reset();
184 virtual void _reset();
185
186 // Returns true if the game is in an terminal state
187 bool isTerminal();
188
194 // Unit Events
195 virtual void _onUnitCreate(const Unit& unit) const;
196 virtual void _onUnitDestroy(const Unit& unit) const;
197
198 // Resource Events
199 virtual void _onResourceGather(const Tile& tile, const Unit& unit) const;
200 virtual void _onResourceDepleted(const Tile& tile, const Unit& unit) const;
201
202 virtual void _onEpisodeStart() const;
203 virtual void _onEpisodeEnd() const;
204
205 virtual void _onTileChange(const Tile &) const;
206 virtual void _onUnitAttack(const Unit& unit) const;
207
209 const cv::Mat renderPlaceholder;
210
211
212};
213
214
215#endif //WARC2SIM_GAME_H
Definition: BaseGUI.h:14
Definition: Config.h:8
Definition: Game.h:23
Unit * getUnitByNameID(const std::string &nameID)
Definition: Game.cpp:224
uint32_t episode
Game Episode.
Definition: Game.h:88
long getTicksModifier() const
Definition: Game.cpp:263
Unit & getUnit(int idx)
Get a Unit via index.
Definition: Game.cpp:218
virtual void _update()
Definition: Game.cpp:330
virtual void _onUnitCreate(const Unit &unit) const
Definition: Game.cpp:276
void stop()
Definition: Game.cpp:77
virtual void _reset()
Definition: Game.cpp:331
virtual void _onResourceDepleted(const Tile &tile, const Unit &unit) const
Definition: Game.cpp:309
uint32_t getWidth() const
Definition: Game.cpp:233
void reset()
Definition: Game.cpp:81
bool terminal
Game terminal flag.
Definition: Game.h:99
void start()
Definition: Game.cpp:72
std::vector< Player > players
List of Players inside the game session.
Definition: Game.h:74
std::unordered_map< std::string, Unit * > unitsNameMap
Definition: Game.h:79
std::unique_ptr< BaseGUI > gui
GUI Pointer.
Definition: Game.h:45
uint32_t getEpisode() const
Definition: Game.cpp:251
void caption()
Print the Game Statistics.
Definition: Game.cpp:141
virtual void _onEpisodeEnd() const
Definition: Game.cpp:286
bool isTerminal()
Definition: Game.cpp:166
StateManager stateManager
Game State Manager.
Definition: Game.h:71
const cv::Mat renderPlaceholder
empty opencv container in case of no GUI
Definition: Game.h:209
Tilemap tilemap
Game Tilemap (Order 3)
Definition: Game.h:68
virtual void _caption() const
Definition: Game.cpp:329
virtual void _onUnitDestroy(const Unit &unit) const
Definition: Game.cpp:290
Player * selectedPlayer
Selected player.
Definition: Game.h:102
virtual void update()
Game Update Function.
Definition: Game.cpp:111
Player & addPlayer()
Definition: Game.cpp:193
uint32_t getHeight() const
Definition: Game.cpp:237
void insertPlayer(Player &player)
Definition: Game.cpp:206
xt::xarray< double, xt::layout_type::row_major > state
Game state (Order 2)
Definition: Game.h:65
Game(const std::string &map_file)
Game Constructor.
Definition: Game.cpp:12
virtual void _onUnitAttack(const Unit &unit) const
Definition: Game.cpp:314
uint32_t max_fps
Game Max FPS.
Definition: Game.h:91
virtual const cv::Mat & _render() const
Game Render implementation.
Definition: Game.cpp:322
void setSelectedPlayer(Player &player)
Set selected player.
Definition: Game.cpp:271
virtual void _onResourceGather(const Tile &tile, const Unit &unit) const
Definition: Game.cpp:302
uint64_t ticks
Game Episode Ticks.
Definition: Game.h:85
uint64_t getTicks() const
Definition: Game.cpp:255
Map map
Const Map (Order 1)
Definition: Game.h:62
uint32_t getId() const
Definition: Game.cpp:267
virtual void _onTileChange(const Tile &) const
Definition: Game.cpp:295
uint64_t getGameDuration() const
Definition: Game.cpp:259
std::vector< Unit > units
List of Units inside the game session.
Definition: Game.h:77
uint32_t getMaxFPS() const
Definition: Game.cpp:241
uint32_t getFPS() const
Definition: Game.cpp:247
uint32_t currentFPS
Game Current FPS.
Definition: Game.h:95
const Config config
Definition: Game.h:59
void setMaxFPS(int fps_)
Set the Game FPS.
Definition: Game.cpp:61
virtual void _onEpisodeStart() const
Definition: Game.cpp:282
void tick()
Game Tick Function.
Definition: Game.cpp:155
const cv::Mat & render()
Game Render Function.
Definition: Game.cpp:136
Definition: Map.h:44
Definition: Player.h:18
Definition: StateManager.h:15
Definition: Tile.h:21
Definition: Tilemap.h:16
Definition: Unit.h:25