main.cxx 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. start = end;
  25. state->update(gsm, delta_time);
  26. state->render(renderer);
  27. }
  28. }
  29. int main(int argc, char** argv) try
  30. {
  31. SDL sdl{};
  32. SDLWindow window{
  33. "Snake",
  34. SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
  35. 0, 0,
  36. SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_BORDERLESS
  37. };
  38. SDLRenderer renderer{window};
  39. main_loop(renderer);
  40. return EXIT_SUCCESS;
  41. } catch (std::exception const& ex) {
  42. SDL_LogError(SDL_LOG_CATEGORY_ERROR, "%s", ex.what());
  43. return EXIT_FAILURE;
  44. }