GameStateManager.hxx 892 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. HighScores,
  18. Credits,
  19. };
  20. class GameStateManager final : private boost::noncopyable {
  21. public:
  22. GameStateManager();
  23. ~GameStateManager();
  24. GameState* current();
  25. GameState* parent();
  26. void push_state(GameStates new_state);
  27. void pop_state();
  28. void replace_state(GameStates new_state);
  29. private:
  30. std::stack<GameStates> states_;
  31. GameState* enum_to_state(GameStates state);
  32. LoadingState loading_;
  33. SplashState splash_;
  34. MenuState menu_;
  35. PlayingState game_;
  36. DummyState dummy_;
  37. };
  38. #endif // SNAKE_GAMESTATEMANAGER_HXX