Level traversal works, but it's very immediate. Next is a little 'confirm level' modal and a transition screen.

This commit is contained in:
Zed A. Shaw 2025-02-24 23:26:50 -05:00
parent 1886c99920
commit 29e6d45dc6
14 changed files with 98 additions and 43 deletions

View file

@ -14,7 +14,7 @@ namespace gui {
FSM::FSM() :
$window(sf::VideoMode({SCREEN_WIDTH, SCREEN_HEIGHT}), "Zed's Raycaster Thing"),
$main_ui($window, $levels.current()),
$main_ui($window),
$renderer($window),
$level($levels.current()),
$map_ui($level),
@ -34,12 +34,13 @@ namespace gui {
FSM_STATE(State, IDLE, ev);
FSM_STATE(State, IN_COMBAT, ev);
FSM_STATE(State, COMBAT_ROTATE, ev);
FSM_STATE(State, NEXT_LEVEL, ev);
FSM_STATE(State, END, ev);
}
}
void FSM::START(Event ) {
$main_ui.generate_map();
$main_ui.update_level($level);
$level.world->set_the<Debug>({});
$main_ui.init();
@ -160,6 +161,9 @@ namespace gui {
case CLOSE:
dbc::log("Nothing to close.");
break;
case STAIRS_DOWN:
state(State::NEXT_LEVEL);
break;
case STOP_COMBAT:
case TICK:
// do nothing
@ -169,6 +173,18 @@ namespace gui {
}
}
void FSM::NEXT_LEVEL(Event ev) {
using enum Event;
switch(ev) {
case TICK:
next_level();
state(State::IDLE);
default:
break; // do nothing for now
}
}
void FSM::IN_COMBAT(Event ev) {
using enum Event;
@ -342,11 +358,13 @@ namespace gui {
// std::string(item.data["name"])));
$status_ui.log("You picked up an item.");
$status_ui.update();
}
break;
} break;
case eGUI::ATTACK:
event(Event::ATTACK);
break;
case eGUI::STAIRS_DOWN:
event(Event::STAIRS_DOWN);
break;
case eGUI::DEATH: {
$status_ui.update();
if(entity != player.entity) {
@ -366,4 +384,16 @@ namespace gui {
}
}
}
void FSM::next_level() {
$levels.create_level($level.world);
$level = $levels.next();
$status_ui.update_level($level);
$combat_ui.update_level($level);
$map_ui.update_level($level);
$main_ui.update_level($level);
run_systems();
}
}