#pragma once #include #include #include #include #include "SFMLOrthogonalLayer.hpp" #include "Launcher.hpp" #include "Player.hpp" #include "IEntity.hpp" #include "BlockLayer.hpp" #include "Collider.hpp" #include "Grid.hpp" #include "Spike.hpp" #include "Sand.hpp" #include "Fruit.hpp" #define LAYER_COUNT 3 class Core { public: Core() = delete; Core(sf::RenderWindow* window); virtual ~Core(); score_t getScore(); // TODO why can't I set this to const??; bool hasQuit(); void run(); private: void registerEntity(IEntity* entity); void deregisterEntity(IEntity* entity); void events(); void update(float delta); void reset(); enum State { SPLASH, INGAME, END }; State m_state; std::vector m_entities; score_t m_score; bool m_running; bool m_paused; Collider m_collider; Renderer m_renderer; std::vector m_spikes; std::vector m_sand; std::vector m_fruit; sf::RenderWindow* m_window; Player m_player; BlockLayer m_blockLayer; Grid m_grid; sf::Sound m_music; sf::Sprite m_background; tmx::Map m_map; std::array m_layer; sf::Clock m_interlude_clock; sf::Clock m_fruit_clock; sf::Clock m_global_clock; sf::Sprite m_splash; bool m_victory; sf::Text m_victory_text; };