summary refs log tree commit diff stats
path: root/src/game.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/game.h')
-rw-r--r--src/game.h48
1 files changed, 21 insertions, 27 deletions
diff --git a/src/game.h b/src/game.h index 189cabb..f89c707 100644 --- a/src/game.h +++ b/src/game.h
@@ -1,14 +1,15 @@
1#ifndef GAME_H_E6F1396E 1#ifndef GAME_H_E6F1396E
2#define GAME_H_E6F1396E 2#define GAME_H_E6F1396E
3 3
4#include <set> 4#include <list>
5#include <range/v3/all.hpp> 5#include <range/v3/all.hpp>
6#include <vector> 6#include <vector>
7#include <memory> 7#include <memory>
8#include <map>
8#include "sprite.h" 9#include "sprite.h"
9#include "map.h" 10#include "map.h"
10#include "consts.h" 11#include "consts.h"
11#include "transform_system.h" 12#include "system.h"
12 13
13struct Input { 14struct Input {
14 bool left = false; 15 bool left = false;
@@ -20,7 +21,22 @@ struct Input {
20class Game { 21class Game {
21public: 22public:
22 23
23 Game() : transform_(*this) {} 24 template <typename T>
25 void emplaceSystem() {
26 systems_.push_back(std::make_unique<T>(*this));
27 systemByKey_[T::Key] = systems_.back().get();
28 }
29
30 template <typename T>
31 T& getSystem() {
32 return *dynamic_cast<T*>(systemByKey_.at(T::Key));
33 }
34
35 auto systems() {
36 return systems_ | ranges::views::transform([&] (std::unique_ptr<System>& systemPtr) -> System& {
37 return *systemPtr;
38 });
39 }
24 40
25 int addSprite(Sprite sprite); 41 int addSprite(Sprite sprite);
26 42
@@ -42,9 +58,6 @@ public:
42 }); 58 });
43 } 59 }
44 60
45 TransformSystem& getTransformSystem() { return transform_; }
46
47
48 void setSpriteState(int id, std::string state) { 61 void setSpriteState(int id, std::string state) {
49 sprites_[id].setState(std::move(state)); 62 sprites_[id].setState(std::move(state));
50 } 63 }
@@ -63,33 +76,14 @@ public:
63 76
64 const Map& getMap() const { return *map_; } 77 const Map& getMap() const { return *map_; }
65 78
66 // Camera
67
68 const vec2i& getCameraPosition() const { return cameraPos_; }
69
70 const vec2i& getFieldOfView() const { return cameraFov_; }
71
72 void setFollowingSprite(int spriteId) { followingSprite_ = spriteId; }
73
74 void lockCamera() { cameraLocked_ = true; }
75
76 void unlockCamera() { cameraLocked_ = false; }
77
78 void tick();
79
80private: 79private:
81 80
82 TransformSystem transform_; 81 std::list<std::unique_ptr<System>> systems_;
82 std::map<SystemKey, System*> systemByKey_;
83 83
84 std::vector<int> spriteIds_; 84 std::vector<int> spriteIds_;
85 std::vector<Sprite> sprites_; 85 std::vector<Sprite> sprites_;
86 std::unique_ptr<Map> map_; 86 std::unique_ptr<Map> map_;
87
88 // Camera
89 vec2i cameraPos_;
90 vec2i cameraFov_ { CANVAS_WIDTH, CANVAS_HEIGHT };
91 int followingSprite_;
92 bool cameraLocked_ = true;
93}; 87};
94 88
95#endif /* end of include guard: GAME_H_E6F1396E */ 89#endif /* end of include guard: GAME_H_E6F1396E */