X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FApplication.hpp;h=bae8435a0084811151300e825b9c5fec402f35d8;hb=afd253b2dd10fdf2d4655d3d4a5766e6aa8c1a2c;hp=973234916a3afa541c2f2e41a544ef455e340521;hpb=aefc5482b27e3d259b6c9f3f1e4cdd9ef2e6a8d2;p=blank.git diff --git a/src/app/Application.hpp b/src/app/Application.hpp index 9732349..bae8435 100644 --- a/src/app/Application.hpp +++ b/src/app/Application.hpp @@ -1,34 +1,20 @@ #ifndef BLANK_APP_APPLICATION_HPP_ #define BLANK_APP_APPLICATION_HPP_ -#include "Assets.hpp" -#include "FrameCounter.hpp" -#include "../ai/Spawner.hpp" -#include "../audio/Audio.hpp" -#include "../graphics/Viewport.hpp" -#include "../ui/Interface.hpp" -#include "../world/World.hpp" - #include +#include namespace blank { +class Environment; +class State; class Window; class Application { public: - struct Config { - bool vsync = true; - bool doublebuf = true; - int multisampling = 1; - - Interface::Config interface = Interface::Config(); - World::Config world = World::Config(); - }; - - Application(Window &, const Config &); + explicit Application(Environment &); ~Application(); Application(const Application &) = delete; @@ -48,25 +34,22 @@ public: /// process all events in SDL's queue void HandleEvents(); + void Handle(const SDL_Event &); void Handle(const SDL_WindowEvent &); /// integrate to the next step with dt milliseconds passed void Update(int dt); /// push the current state to display void Render(); -private: - Window &window; - Viewport viewport; - Assets assets; - Audio audio; - FrameCounter counter; + void PushState(State *); + State *PopState(); + State *SwitchState(State *); + State &GetState(); + bool HasState() const noexcept; - World world; - Interface interface; - - Spawner spawner; - - bool running; +private: + Environment &env; + std::stack states; };