GameStateManager.hxx 949 B

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