main.cxx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "SDL.hxx"
  2. #include "SDLWindow.hxx"
  3. #include "SDLRenderer.hxx"
  4. #include "game/AssetManager.hxx"
  5. #include "game/GameStateManager.hxx"
  6. #include <cstdlib>
  7. void main_loop(SDLRenderer& renderer)
  8. {
  9. using namespace std::chrono;
  10. AssetManager am{renderer};
  11. GameStateManager gsm{};
  12. auto start = high_resolution_clock::now();
  13. for (;;) {
  14. SDL_Event evt;
  15. while (SDL_PollEvent(&evt)!=0) {
  16. if (evt.type==SDL_QUIT)
  17. return;
  18. }
  19. auto const state = gsm.current();
  20. if (state==nullptr)
  21. return;
  22. auto const end = high_resolution_clock::now();
  23. auto const delta_time = duration_cast<milliseconds>(end-start);
  24. state->update(gsm, delta_time);
  25. state->render(renderer);
  26. }
  27. }
  28. int main(int argc, char** argv) try
  29. {
  30. SDL sdl{};
  31. SDLWindow window{
  32. "Snake",
  33. SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
  34. 0, 0,
  35. SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_BORDERLESS
  36. };
  37. SDLRenderer renderer{window};
  38. main_loop(renderer);
  39. return EXIT_SUCCESS;
  40. } catch (std::exception const& ex) {
  41. SDL_LogError(SDL_LOG_CATEGORY_ERROR, "%s", ex.what());
  42. return EXIT_FAILURE;
  43. }