Basic loot UI mostly working. Each time you open there's a torch and you can place it visually on any slot on your character.
This commit is contained in:
parent
4b34de2109
commit
5c47a0151c
13 changed files with 123 additions and 46 deletions
34
gui/fsm.cpp
34
gui/fsm.cpp
|
@ -38,8 +38,16 @@ namespace gui {
|
|||
FSM_STATE(State, IN_COMBAT, ev);
|
||||
FSM_STATE(State, COMBAT_ROTATE, ev);
|
||||
FSM_STATE(State, NEXT_LEVEL, ev);
|
||||
FSM_STATE(State, LOOTING, ev);
|
||||
FSM_STATE(State, END, ev);
|
||||
FSM_STATE(State, LOOTING, ev, std::make_any<bool>(true));
|
||||
}
|
||||
}
|
||||
|
||||
void FSM::event(Event ev, std::any data) {
|
||||
switch($state) {
|
||||
FSM_STATE(State, LOOTING, ev, data);
|
||||
default:
|
||||
dbc::log(fmt::format("event given with data but event={} is not handled", int(ev)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -110,7 +118,7 @@ namespace gui {
|
|||
}
|
||||
}
|
||||
|
||||
void FSM::LOOTING(Event ev) {
|
||||
void FSM::LOOTING(Event ev, std::any data) {
|
||||
using enum Event;
|
||||
|
||||
switch(ev) {
|
||||
|
@ -118,6 +126,19 @@ namespace gui {
|
|||
$loot_ui.active = false;
|
||||
state(State::IDLE);
|
||||
break;
|
||||
case LOOT_SELECT: {
|
||||
int slot_id = std::any_cast<int>(data);
|
||||
|
||||
if(auto entity = $loot_ui.select_slot(slot_id)) {
|
||||
fmt::println("LOOT SELECT slot={} has entity={}", slot_id, entity.value());
|
||||
$status_ui.select_slot(slot_id, entity.value());
|
||||
}
|
||||
} break;
|
||||
case LOOT_PLACE: {
|
||||
std::string slot_name = std::any_cast<std::string>(data);
|
||||
int slot_id = $status_ui.place_slot(slot_name);
|
||||
$loot_ui.remove_slot(slot_id);
|
||||
} break;
|
||||
case TICK:
|
||||
// do nothing
|
||||
break;
|
||||
|
@ -190,6 +211,9 @@ namespace gui {
|
|||
state(State::LOOTING);
|
||||
|
||||
} break;
|
||||
case LOOT_PLACE:
|
||||
// ignored
|
||||
break;
|
||||
default:
|
||||
dbc::sentinel("unhandled event in IDLE");
|
||||
}
|
||||
|
@ -439,6 +463,12 @@ namespace gui {
|
|||
// BUG: need to resolve GUI events vs. FSM events better
|
||||
event(Event::LOOT_OPEN);
|
||||
break;
|
||||
case eGUI::LOOT_SELECT:
|
||||
event(Event::LOOT_SELECT, data);
|
||||
break;
|
||||
case eGUI::LOOT_PLACE:
|
||||
event(Event::LOOT_PLACE, data);
|
||||
break;
|
||||
case eGUI::LOOT: {
|
||||
$map_ui.log(L"You picked up an item.");
|
||||
} break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue