X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FApplication.hpp;h=bae8435a0084811151300e825b9c5fec402f35d8;hb=afd253b2dd10fdf2d4655d3d4a5766e6aa8c1a2c;hp=c8236ffbf27a72281364c87a69454103845a358a;hpb=b7d09e1e35ef90282c97509e0020b20db3c7ea9f;p=blank.git diff --git a/src/app/Application.hpp b/src/app/Application.hpp index c8236ff..bae8435 100644 --- a/src/app/Application.hpp +++ b/src/app/Application.hpp @@ -1,36 +1,28 @@ #ifndef BLANK_APP_APPLICATION_HPP_ #define BLANK_APP_APPLICATION_HPP_ -#include "init.hpp" -#include "RandomWalk.hpp" -#include "../graphics/BlockLighting.hpp" -#include "../graphics/Camera.hpp" -#include "../graphics/DirectionalLighting.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(); - }; - - explicit Application(const Config &); + explicit Application(Environment &); + ~Application(); Application(const Application &) = delete; Application &operator =(const Application &) = delete; /// run until user quits void Run(); + /// evaluate a single frame of dt milliseconds void Loop(int dt); /// run for n frames @@ -40,29 +32,24 @@ public: /// run for n frames, assuming t milliseconds for each void RunS(size_t n, size_t t); + /// 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(); - static Entity &MakeTestEntity(World &); + void PushState(State *); + State *PopState(); + State *SwitchState(State *); + State &GetState(); + bool HasState() const noexcept; private: - InitSDL init_sdl; - InitIMG init_img; - InitGL init_gl; - Window window; - GLContext ctx; - InitGLEW init_glew; - BlockLighting chunk_prog; - DirectionalLighting entity_prog; - - Camera cam; - World world; - Interface interface; - - RandomWalk test_controller; - - bool running; + Environment &env; + std::stack states; };