diff options
| author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-03 01:11:31 -0500 |
|---|---|---|
| committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-03 01:11:31 -0500 |
| commit | 24918837c3ff9026d228657d14852c9cf39a5644 (patch) | |
| tree | be131a43eb30f164bd70f542cfcaec688fbc3d51 /src/game.h | |
| parent | f449345e3aeb599eb497dfeeac7027cf4d1de515 (diff) | |
| download | tanetane-24918837c3ff9026d228657d14852c9cf39a5644.tar.gz tanetane-24918837c3ff9026d228657d14852c9cf39a5644.tar.bz2 tanetane-24918837c3ff9026d228657d14852c9cf39a5644.zip | |
Added camera system
Diffstat (limited to 'src/game.h')
| -rw-r--r-- | src/game.h | 48 |
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 | ||
| 13 | struct Input { | 14 | struct Input { |
| 14 | bool left = false; | 15 | bool left = false; |
| @@ -20,7 +21,22 @@ struct Input { | |||
| 20 | class Game { | 21 | class Game { |
| 21 | public: | 22 | public: |
| 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 | |||
| 80 | private: | 79 | private: |
| 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 */ |
