#pragma once #include #include class Crawler; namespace States{ enum State{ GAME_RUN, MAIN_MENU, }; }; class GameState{ public: inline static GameState*STATE=nullptr; inline static std::mapstates; static void Initialize(); virtual void OnStateChange(GameState*prevState)=0; virtual void OnUserUpdate(Crawler*game)=0; virtual void Draw(Crawler*game)=0; static inline void ChangeState(States::State newState){ GameState*prevState=STATE; if(!states.count(newState)){ std::cout<<"WARNING! State not defined for state "<OnStateChange(prevState); } }; class State_GameRun:public GameState{ virtual void OnStateChange(GameState*prevState)override; virtual void OnUserUpdate(Crawler*game)override; virtual void Draw(Crawler*game)override; }; class State_MainMenu:public GameState{ virtual void OnStateChange(GameState*prevState)override; virtual void OnUserUpdate(Crawler*game)override; virtual void Draw(Crawler*game)override; };