main.cxx 1.1 KB

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