87 lines
1.8 KiB
Plaintext
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
|