#ifndef FRONTEND_SCREENS_H_ #define FRONTEND_SCREENS_H_ #include #include "../settings.h" class Assets; class Level; class WorldRenderer; class Hud; class Engine; class Camera; class Batch2D; class LevelFrontend; class LevelController; class TextureAnimator; /// @brief Screen is a mainloop state class Screen { protected: Engine* engine; std::unique_ptr batch; public: Screen(Engine* engine); virtual ~Screen(); virtual void update(float delta) = 0; virtual void draw(float delta) = 0; virtual void onEngineShutdown() {}; }; class MenuScreen : public Screen { std::unique_ptr uicamera; public: MenuScreen(Engine* engine); ~MenuScreen(); void update(float delta) override; void draw(float delta) override; }; class LevelScreen : public Screen { std::unique_ptr frontend; std::unique_ptr hud; std::unique_ptr controller; std::unique_ptr worldRenderer; std::unique_ptr animator; bool hudVisible = true; void updateHotkeys(); public: LevelScreen(Engine* engine, Level* level); ~LevelScreen(); void update(float delta) override; void draw(float delta) override; void onEngineShutdown() override; LevelController* getLevelController() const; }; #endif // FRONTEND_SCREENS_H_