Have an initial start screen and simple prototypes for other screens.
This commit is contained in:
parent
e113c0bc97
commit
d03020cfef
8 changed files with 139 additions and 53 deletions
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue