2023-10-05 01:35:31 -05:00
|
|
|
#pragma once
|
2023-10-05 02:03:59 -05:00
|
|
|
#include <map>
|
|
|
|
#include <iostream>
|
2023-11-09 01:41:05 -06:00
|
|
|
#include "Crawler.h"
|
2023-10-05 01:35:31 -05:00
|
|
|
|
2023-11-09 01:41:05 -06:00
|
|
|
INCLUDE_game
|
2023-10-05 01:35:31 -05:00
|
|
|
|
|
|
|
namespace States{
|
|
|
|
enum State{
|
2023-10-05 02:03:59 -05:00
|
|
|
GAME_RUN,
|
2023-10-29 14:50:22 -05:00
|
|
|
OVERWORLD_MAP,
|
2023-10-05 02:03:59 -05:00
|
|
|
MAIN_MENU,
|
2023-10-05 01:35:31 -05:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
class GameState{
|
|
|
|
public:
|
|
|
|
inline static GameState*STATE=nullptr;
|
|
|
|
inline static std::map<States::State,GameState*>states;
|
2023-10-05 02:03:59 -05:00
|
|
|
static void Initialize();
|
2023-10-05 01:35:31 -05:00
|
|
|
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;
|
2023-10-05 02:03:59 -05:00
|
|
|
if(!states.count(newState)){
|
|
|
|
std::cout<<"WARNING! State not defined for state "<<newState<<"!"<<std::endl;
|
|
|
|
throw;
|
|
|
|
}
|
|
|
|
STATE=states.at(newState);
|
2023-11-09 01:41:05 -06:00
|
|
|
game->camera.SetTarget(game->GetPlayer()->GetPos());
|
2023-10-05 01:35:31 -05:00
|
|
|
STATE->OnStateChange(prevState);
|
|
|
|
}
|
|
|
|
};
|