#ifndef GAME_H_E6F1396E #define GAME_H_E6F1396E #include #include #include #include #include "sprite.h" #include "map.h" #include "consts.h" #include "transform_system.h" struct Input { bool left = false; bool right = false; bool up = false; bool down = false; }; class Game { public: Game() : transform_(*this) {} int addSprite(Sprite sprite); const Sprite& getSprite(int id) const { return sprites_.at(id); } Sprite& getSprite(int id) { return sprites_.at(id); } const std::vector& getSprites() { return spriteIds_; } auto spriteView() const { return ranges::views::transform([&] (int id) -> const Sprite& { return sprites_.at(id); }); } TransformSystem& getTransformSystem() { return transform_; } void setSpriteState(int id, std::string state) { sprites_[id].setState(std::move(state)); } void setSpriteDirection(int id, Direction dir) { sprites_[id].setDirection(dir); } void tickSpriteAnim() { for (Sprite& sprite : sprites_) { sprite.tickAnim(); } } void setMap(std::unique_ptr map) { map_ = std::move(map); } 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::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 */