From 24918837c3ff9026d228657d14852c9cf39a5644 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Wed, 3 Feb 2021 01:11:31 -0500 Subject: Added camera system --- src/game.h | 48 +++++++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 27 deletions(-) (limited to 'src/game.h') 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 @@ #ifndef GAME_H_E6F1396E #define GAME_H_E6F1396E -#include +#include #include #include #include +#include #include "sprite.h" #include "map.h" #include "consts.h" -#include "transform_system.h" +#include "system.h" struct Input { bool left = false; @@ -20,7 +21,22 @@ struct Input { class Game { public: - Game() : transform_(*this) {} + template + void emplaceSystem() { + systems_.push_back(std::make_unique(*this)); + systemByKey_[T::Key] = systems_.back().get(); + } + + template + T& getSystem() { + return *dynamic_cast(systemByKey_.at(T::Key)); + } + + auto systems() { + return systems_ | ranges::views::transform([&] (std::unique_ptr& systemPtr) -> System& { + return *systemPtr; + }); + } int addSprite(Sprite sprite); @@ -42,9 +58,6 @@ public: }); } - TransformSystem& getTransformSystem() { return transform_; } - - void setSpriteState(int id, std::string state) { sprites_[id].setState(std::move(state)); } @@ -63,33 +76,14 @@ public: const Map& getMap() const { return *map_; } - // Camera - - const vec2i& getCameraPosition() const { return cameraPos_; } - - const vec2i& getFieldOfView() const { return cameraFov_; } - - void setFollowingSprite(int spriteId) { followingSprite_ = spriteId; } - - void lockCamera() { cameraLocked_ = true; } - - void unlockCamera() { cameraLocked_ = false; } - - void tick(); - private: - TransformSystem transform_; + std::list> systems_; + std::map systemByKey_; std::vector spriteIds_; std::vector sprites_; std::unique_ptr map_; - - // Camera - vec2i cameraPos_; - vec2i cameraFov_ { CANVAS_WIDTH, CANVAS_HEIGHT }; - int followingSprite_; - bool cameraLocked_ = true; }; #endif /* end of include guard: GAME_H_E6F1396E */ -- cgit 1.4.1