MenuState.cxx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "MenuState.hxx"
  2. #include "GameStateManager.hxx"
  3. #include "../SDLRenderer.hxx"
  4. void MenuState::update(GameStateManager& gsm, std::chrono::milliseconds delta_time)
  5. {
  6. (void) delta_time;
  7. new_game_button_.set_on_click([&gsm] {
  8. gsm.replace_state(GameStates::Game);
  9. });
  10. quit_button_.set_on_click([&gsm] {
  11. while (gsm.current()!=nullptr) {
  12. gsm.pop_state();
  13. }
  14. });
  15. new_game_button_.update();
  16. quit_button_.update();
  17. auto const key_state = SDL_GetKeyboardState(nullptr);
  18. auto const escape_pressed = !!key_state[SDL_SCANCODE_ESCAPE];
  19. if (!escape_pressed && escape_pressed_) {
  20. gsm.pop_state();
  21. }
  22. escape_pressed_ = escape_pressed;
  23. }
  24. void MenuState::render(SDLRenderer& renderer)
  25. {
  26. int screen_w, screen_h;
  27. SDL_GetRendererOutputSize(renderer, &screen_w, &screen_h);
  28. int const x = (screen_w-BUTTON_WIDTH)/2;
  29. int const y = (screen_h-(2*BUTTON_HEIGHT+20))/2;
  30. new_game_button_.move(x, y);
  31. quit_button_.move(x, y+BUTTON_HEIGHT+20);
  32. SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
  33. SDL_RenderClear(renderer);
  34. new_game_button_.render(renderer);
  35. quit_button_.render(renderer);
  36. SDL_RenderPresent(renderer);
  37. }