GameStateManager.hxx 867 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 "PlayingState.hxx"
  8. #include "DummyState.hxx"
  9. #include <stack>
  10. #include <boost/noncopyable.hpp>
  11. enum class GameStates {
  12. Loading,
  13. Splash,
  14. MainMenu,
  15. Game,
  16. GameOver,
  17. };
  18. class GameStateManager final : private boost::noncopyable {
  19. public:
  20. GameStateManager();
  21. ~GameStateManager();
  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. PlayingState game_;
  34. DummyState dummy_;
  35. };
  36. #endif // SNAKE_GAMESTATEMANAGER_HXX