GameStateManager.hxx 1009 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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 "GameOverState.hxx"
  9. #include "HighScoreState.hxx"
  10. #include "DummyState.hxx"
  11. #include <stack>
  12. #include <boost/noncopyable.hpp>
  13. enum class GameStates {
  14. Loading,
  15. Splash,
  16. MainMenu,
  17. Game,
  18. GameOver,
  19. HighScores,
  20. Credits,
  21. };
  22. class GameStateManager final : private boost::noncopyable {
  23. public:
  24. GameStateManager();
  25. ~GameStateManager();
  26. GameState* current();
  27. GameState* parent();
  28. void push_state(GameStates new_state);
  29. void pop_state();
  30. void replace_state(GameStates new_state);
  31. private:
  32. std::stack<GameStates> states_;
  33. GameState* enum_to_state(GameStates state);
  34. LoadingState loading_;
  35. SplashState splash_;
  36. MenuState menu_;
  37. PlayingState game_;
  38. GameOverState game_over_;
  39. HighScoreState high_score_;
  40. DummyState dummy_;
  41. };
  42. #endif // SNAKE_GAMESTATEMANAGER_HXX