GameStateManager.hxx 868 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #pragma once
  2. #ifndef SNAKE_GAMESTATEMANAGER_HXX
  3. #define SNAKE_GAMESTATEMANAGER_HXX
  4. #include "LoadingState.hxx"
  5. #include "SplashState.hxx"
  6. #include "MenuState.hxx"
  7. #include "DummyState.hxx"
  8. #include <stack>
  9. enum class GameStates {
  10. Loading,
  11. Splash,
  12. MainMenu,
  13. Game,
  14. GameOver,
  15. };
  16. class GameStateManager final {
  17. public:
  18. GameStateManager();
  19. ~GameStateManager();
  20. GameStateManager(GameStateManager const&) = delete;
  21. GameStateManager& operator=(GameStateManager) = delete;
  22. GameState* current();
  23. GameState* parent();
  24. void push_state(GameStates new_state);
  25. void pop_state();
  26. void replace_state(GameStates new_state);
  27. private:
  28. std::stack<GameStates> states_;
  29. GameState* enum_to_state(GameStates state);
  30. LoadingState loading_;
  31. SplashState splash_;
  32. MenuState menu_;
  33. DummyState dummy_;
  34. };
  35. #endif // SNAKE_GAMESTATEMANAGER_HXX