Have an initial start screen and simple prototypes for other screens.

This commit is contained in:
Zed A. Shaw 2026-04-01 15:31:36 -04:00
parent e113c0bc97
commit d03020cfef
8 changed files with 139 additions and 53 deletions

View file

@ -25,11 +25,13 @@ namespace gui {
$window.setVerticalSyncEnabled(VSYNC);
if(FRAME_LIMIT) $window.setFramerateLimit(FRAME_LIMIT);
$window.setPosition({0,0});
}
void FSM::event(Event ev, std::any data) {
switch($state) {
FSM_STATE(State, START, ev);
FSM_STATE(State, START_SCREEN, ev);
FSM_STATE(State, MOVING, ev);
FSM_STATE(State, ATTACKING, ev, data);
FSM_STATE(State, ROTATING, ev);
@ -44,13 +46,39 @@ namespace gui {
$main_ui.init();
$loot_ui.init();
for(auto& [name, scene] : $scenes) {
scene->init();
}
// BUG: maybe this is a function on main_ui?
auto cell = $main_ui.overlay_cell("left");
$debug_ui.init(cell);
$status_ui.init();
run_systems();
state(State::IDLE);
$cur_scene = $scenes["STARTING"];
dbc::check($cur_scene != nullptr, "No STARTING scene?!");
state(State::START_SCREEN);
}
void FSM::START_SCREEN(Event ev) {
using enum Event;
switch(ev) {
case MOUSE_CLICK:
dbc::log("CLICK!");
$cur_scene = nullptr;
state(State::IDLE);
break;
case MOUSE_MOVE: {
} break;
case TICK:
break;
default:
dbc::log($F("unhandled event: {}", int(ev)));
break;
}
}
void FSM::MOVING(Event ) {
@ -295,17 +323,22 @@ namespace gui {
void FSM::draw_gui() {
if($debug_ui.active) {
debug_render();
} else {
$main_ui.render();
}
$status_ui.render($window);
if($loot_ui.active) $loot_ui.render($window);
if(in_state(State::LOOTING)) $dnd_loot.render();
if($cur_scene != nullptr) {
$cur_scene->render($window);
} else {
$main_ui.render();
$status_ui.render($window);
if($loot_ui.active) $loot_ui.render($window);
if(in_state(State::LOOTING)) $dnd_loot.render();
}
}
void FSM::update() {
if($cur_scene != nullptr) {
$cur_scene->update();
}
}
void FSM::render() {