Boss fight now reuses the combat_ui.cpp to do the combat panel, so next is making it work with the mechanics I want but no art.
This commit is contained in:
parent
6ec43026b6
commit
8a828fbd31
11 changed files with 107 additions and 91 deletions
57
gui/fsm.cpp
57
gui/fsm.cpp
|
|
@ -20,6 +20,7 @@ namespace gui {
|
|||
FSM::FSM() :
|
||||
$window(sf::VideoMode({SCREEN_WIDTH, SCREEN_HEIGHT}), "Zed's Raycaster Thing"),
|
||||
$main_ui($window),
|
||||
$combat_ui(false),
|
||||
$font{FONT_FILE_NAME},
|
||||
$dnd_loot($status_ui, $loot_ui, $window, $router)
|
||||
{
|
||||
|
|
@ -35,7 +36,7 @@ namespace gui {
|
|||
FSM_STATE(State, IDLE, ev, data);
|
||||
FSM_STATE(State, IN_COMBAT, ev);
|
||||
FSM_STATE(State, COMBAT_ROTATE, ev);
|
||||
FSM_STATE(State, NEXT_LEVEL, ev);
|
||||
FSM_STATE(State, BOSS_FIGHT, ev);
|
||||
FSM_STATE(State, END, ev);
|
||||
FSM_STATE(State, LOOTING, ev, data);
|
||||
}
|
||||
|
|
@ -50,12 +51,8 @@ namespace gui {
|
|||
auto cell = $main_ui.overlay_cell("left");
|
||||
$debug_ui.init(cell);
|
||||
|
||||
$combat_ui.init();
|
||||
$combat_ui.init(COMBAT_UI_X, COMBAT_UI_Y, COMBAT_UI_WIDTH, COMBAT_UI_HEIGHT);
|
||||
$status_ui.init();
|
||||
|
||||
$boss_fight_ui = GameDB::create_bossfight();
|
||||
$boss_fight_ui->init();
|
||||
|
||||
$map_ui.init();
|
||||
$map_ui.log(L"Welcome to the game!");
|
||||
|
||||
|
|
@ -169,9 +166,10 @@ namespace gui {
|
|||
case CLOSE:
|
||||
dbc::log("Nothing to close.");
|
||||
break;
|
||||
case STAIRS_DOWN:
|
||||
case BOSS_START:
|
||||
sound::stop("ambient");
|
||||
state(State::NEXT_LEVEL);
|
||||
next_level(true);
|
||||
state(State::BOSS_FIGHT);
|
||||
break;
|
||||
case LOOT_ITEM:
|
||||
$dnd_loot.event(Event::LOOT_ITEM);
|
||||
|
|
@ -207,13 +205,16 @@ namespace gui {
|
|||
}
|
||||
}
|
||||
|
||||
void FSM::NEXT_LEVEL(Event ev) {
|
||||
void FSM::BOSS_FIGHT(Event ev) {
|
||||
dbc::check($boss_fight_ui != nullptr, "$boss_fight_ui not initialized");
|
||||
using enum Event;
|
||||
|
||||
switch(ev) {
|
||||
case STAIRS_DOWN:
|
||||
// this is only if using the debug X key to skip it
|
||||
case BOSS_START:
|
||||
case BOSS_END:
|
||||
sound::play("ambient");
|
||||
next_level();
|
||||
next_level(false);
|
||||
state(State::IDLE);
|
||||
break;
|
||||
case MOUSE_CLICK: {
|
||||
|
|
@ -221,7 +222,7 @@ namespace gui {
|
|||
$boss_fight_ui->mouse(pos.x, pos.y, guecs::NO_MODS);
|
||||
|
||||
if($boss_fight_ui->boss_dead()) {
|
||||
event(Event::STAIRS_DOWN);
|
||||
event(Event::BOSS_END);
|
||||
}
|
||||
} break;
|
||||
default:
|
||||
|
|
@ -362,7 +363,7 @@ namespace gui {
|
|||
$main_ui.toggle_mind_reading();
|
||||
break;
|
||||
case KEY::X:
|
||||
event(Event::STAIRS_DOWN);
|
||||
event(Event::BOSS_START);
|
||||
break;
|
||||
case KEY::F5:
|
||||
take_screenshot();
|
||||
|
|
@ -384,7 +385,7 @@ namespace gui {
|
|||
}
|
||||
|
||||
void FSM::draw_gui() {
|
||||
if(in_state(State::NEXT_LEVEL)) {
|
||||
if(in_state(State::BOSS_FIGHT)) {
|
||||
$boss_fight_ui->render($window);
|
||||
} else {
|
||||
if($debug_ui.active) {
|
||||
|
|
@ -406,7 +407,7 @@ namespace gui {
|
|||
}
|
||||
|
||||
void FSM::render() {
|
||||
if(in_state(State::NEXT_LEVEL)) {
|
||||
if(in_state(State::BOSS_FIGHT)) {
|
||||
$window.clear();
|
||||
$boss_fight_ui->render($window);
|
||||
} else {
|
||||
|
|
@ -502,14 +503,14 @@ namespace gui {
|
|||
System::player_status();
|
||||
break;
|
||||
case eGUI::NEW_RITUAL:
|
||||
$combat_ui.init();
|
||||
$combat_ui.init(COMBAT_UI_X, COMBAT_UI_Y, COMBAT_UI_WIDTH, COMBAT_UI_HEIGHT);
|
||||
break;
|
||||
case eGUI::ATTACK:
|
||||
$temp_attack_id = std::any_cast<int>(data);
|
||||
event(Event::ATTACK);
|
||||
break;
|
||||
case eGUI::STAIRS_DOWN:
|
||||
event(Event::STAIRS_DOWN);
|
||||
event(Event::BOSS_START);
|
||||
break;
|
||||
case eGUI::DEATH: {
|
||||
$status_ui.update();
|
||||
|
|
@ -541,17 +542,17 @@ namespace gui {
|
|||
dbc::check(worked, "Failed to write screenshot.png");
|
||||
}
|
||||
|
||||
void FSM::next_level() {
|
||||
dbc::log("current_level: Yep, next is called...");
|
||||
GameDB::create_level();
|
||||
|
||||
$status_ui.update_level();
|
||||
$combat_ui.update_level();
|
||||
$main_ui.update_level();
|
||||
$loot_ui.update_level();
|
||||
|
||||
$boss_fight_ui = GameDB::create_bossfight();
|
||||
$boss_fight_ui->init();
|
||||
void FSM::next_level(bool bossfight) {
|
||||
if(bossfight) {
|
||||
$boss_fight_ui = GameDB::create_bossfight();
|
||||
$boss_fight_ui->init();
|
||||
} else {
|
||||
GameDB::create_level();
|
||||
$status_ui.update_level();
|
||||
$combat_ui.update_level();
|
||||
$main_ui.update_level();
|
||||
$loot_ui.update_level();
|
||||
}
|
||||
|
||||
run_systems();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue