our_dick/game_state.TODO
2020-10-11 12:36:05 -07:00

87 lines
1.8 KiB
Plaintext

observer
virtual on_notify(const event& e)
observer_subject
std::vector<observer*> m_observers
notify(const event& e)
for(observer : m_observers)
observer.on_notify(e);
void add_observer(observer* obs)
m_observers.push_back(obs);
void remove_observer(
game : public observer
game_state_manager
resource_manager
queue<input_event>
bool m_game_over
on_notify(const event& e)override{
if(e.type == should_close)
m_game_over = true;
}
game_state_manager : public observer_subject
stack<unique_ptr<game_state_iface>> stack
update(double time, queue<input_event>&){
stack.top()->update(time, queue);
}
draw(){
stack.top()->draw();
}
void pop_state()
void push_state()
void replace_state()
game_state_iface
game_state_manager* m_owner
virtual enter()
virtual leave()
virtual update(float time, queue<input_event>&)
virtual draw()
play_state : public game_state_iface
scene game_scene
renderer_handle
enter()override
leave()override
update(float time, queue<input_event>&)override{
if(event == PRESS_PAUSE_BUTTON)
m_owner->push_state(new pause_state(this))
}
draw()override
pause_state : public game_state_iface
scene pause_menu
play_state* under_state
renderer_handle
pause_state(play_state* last_state)
enter()override
leave()override
update(float time, queue<input_event>&)override{
if(event == PRESS_RESUME_BUTTON)
m_owner->pop_state()
else if(event == PRESS_EXIT_BUTTON)
m_owner->notify(should_close_event{});
}
draw()override{
under_state->draw();
//draw this state over that state
}
main_menu_state : public game_state_iface
scene main_menu
renderer handle
enter()override
leave()override
update(float time, queue<input_event>&)override{
if(event == CLICK_ON_START_BUTTON)
m_owner->replace_state(new play_state);
}
draw()override