Now have all four screens showing up when needed, but now need to a way to restart the game.
This commit is contained in:
parent
d03020cfef
commit
903fad871f
11 changed files with 110 additions and 26 deletions
|
|
@ -31,7 +31,10 @@ namespace gui {
|
|||
void FSM::event(Event ev, std::any data) {
|
||||
switch($state) {
|
||||
FSM_STATE(State, START, ev);
|
||||
FSM_STATE(State, START_SCREEN, ev);
|
||||
FSM_STATE(State, START_SCENE, ev);
|
||||
FSM_STATE(State, DEATH_SCENE, ev);
|
||||
FSM_STATE(State, WIN_SCENE, ev);
|
||||
FSM_STATE(State, NEXT_LEVEL_SCENE, ev);
|
||||
FSM_STATE(State, MOVING, ev);
|
||||
FSM_STATE(State, ATTACKING, ev, data);
|
||||
FSM_STATE(State, ROTATING, ev);
|
||||
|
|
@ -56,19 +59,16 @@ namespace gui {
|
|||
$status_ui.init();
|
||||
run_systems();
|
||||
|
||||
$cur_scene = $scenes["STARTING"];
|
||||
dbc::check($cur_scene != nullptr, "No STARTING scene?!");
|
||||
|
||||
state(State::START_SCREEN);
|
||||
show_scene("STARTING");
|
||||
state(State::START_SCENE);
|
||||
}
|
||||
|
||||
void FSM::START_SCREEN(Event ev) {
|
||||
void FSM::START_SCENE(Event ev) {
|
||||
using enum Event;
|
||||
|
||||
switch(ev) {
|
||||
case MOUSE_CLICK:
|
||||
dbc::log("CLICK!");
|
||||
$cur_scene = nullptr;
|
||||
close_scene();
|
||||
state(State::IDLE);
|
||||
break;
|
||||
case MOUSE_MOVE: {
|
||||
|
|
@ -81,6 +81,46 @@ namespace gui {
|
|||
}
|
||||
}
|
||||
|
||||
void FSM::DEATH_SCENE(Event ev) {
|
||||
using enum Event;
|
||||
|
||||
switch(ev) {
|
||||
case MOUSE_CLICK:
|
||||
show_scene("STARTING");
|
||||
state(State::START_SCENE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void FSM::WIN_SCENE(Event ev) {
|
||||
using enum Event;
|
||||
|
||||
switch(ev) {
|
||||
case MOUSE_CLICK:
|
||||
show_scene("STARTING");
|
||||
state(State::START_SCENE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void FSM::NEXT_LEVEL_SCENE(Event ev) {
|
||||
using enum Event;
|
||||
|
||||
switch(ev) {
|
||||
case MOUSE_CLICK:
|
||||
next_level();
|
||||
close_scene();
|
||||
state(State::IDLE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void FSM::MOVING(Event ) {
|
||||
// this should be an optional that returns a point
|
||||
if(auto move_to = $main_ui.play_move()) {
|
||||
|
|
@ -417,15 +457,17 @@ namespace gui {
|
|||
event(Event::ATTACK, data);
|
||||
break;
|
||||
case eGUI::STAIRS_DOWN:
|
||||
next_level();
|
||||
state(State::IDLE);
|
||||
show_scene("NEXT_LEVEL");
|
||||
state(State::NEXT_LEVEL_SCENE);
|
||||
break;
|
||||
case eGUI::DEATH: {
|
||||
$status_ui.update();
|
||||
|
||||
if(entity != player.entity) {
|
||||
$main_ui.dead_entity(entity);
|
||||
} else {
|
||||
dbc::log("NEED TO HANDLE PLAYER DYING.");
|
||||
show_scene("DEATH");
|
||||
state(State::DEATH_SCENE);
|
||||
}
|
||||
} break;
|
||||
case eGUI::NOOP: {
|
||||
|
|
@ -459,4 +501,13 @@ namespace gui {
|
|||
|
||||
run_systems();
|
||||
}
|
||||
|
||||
void FSM::show_scene(const std::string& name) {
|
||||
dbc::check($scenes.contains(name), $F("$scenes does not contain {}", name));
|
||||
$cur_scene = $scenes[name];
|
||||
}
|
||||
|
||||
void FSM::close_scene() {
|
||||
$cur_scene = nullptr;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue