Can now drag an item out of inventory and drop it.
This commit is contained in:
parent
87459d41bb
commit
68e50342e5
4 changed files with 41 additions and 9 deletions
|
@ -21,7 +21,8 @@ namespace gui {
|
|||
FSM_STATE(DNDState, LOOT_GRAB, ev, data);
|
||||
FSM_STATE(DNDState, INV_GRAB, ev, data);
|
||||
FSM_STATE(DNDState, ITEM_PICKUP, ev, data);
|
||||
FSM_STATE(DNDState, END, ev);
|
||||
FSM_STATE(DNDState, INV_PICKUP, ev, data);
|
||||
FSM_STATE(DNDState, END, ev, data);
|
||||
default:
|
||||
dbc::log(fmt::format("event received with data but state={} is not handled", int($state)));
|
||||
}
|
||||
|
@ -104,6 +105,22 @@ namespace gui {
|
|||
}
|
||||
}
|
||||
|
||||
void DNDLoot::INV_PICKUP(Event ev, std::any data) {
|
||||
using enum Event;
|
||||
(void)data;
|
||||
|
||||
switch(ev) {
|
||||
case MOUSE_CLICK:
|
||||
case MOUSE_DROP: {
|
||||
auto& grab = $status_ui.$gui.get<guecs::GrabSource>(*$grab_source);
|
||||
grab.commit();
|
||||
END(Event::CLOSE);
|
||||
} break;
|
||||
default:
|
||||
handle_mouse(ev, $status_ui.$gui);
|
||||
}
|
||||
}
|
||||
|
||||
void DNDLoot::ITEM_PICKUP(Event ev, std::any data) {
|
||||
using enum Event;
|
||||
|
||||
|
@ -123,7 +140,7 @@ namespace gui {
|
|||
}
|
||||
}
|
||||
|
||||
void DNDLoot::END(Event ev) {
|
||||
void DNDLoot::END(Event ev, std::any data) {
|
||||
using enum Event;
|
||||
|
||||
switch(ev) {
|
||||
|
@ -140,6 +157,17 @@ namespace gui {
|
|||
state(DNDState::ITEM_PICKUP);
|
||||
}
|
||||
} break;
|
||||
case INV_SELECT: {
|
||||
$grab_source = UISystem::loot_grab($status_ui.$gui, data);
|
||||
|
||||
if($grab_source) {
|
||||
auto& source = $status_ui.$gui.get<guecs::GrabSource>(*$grab_source);
|
||||
$grab_sprite = source.sprite;
|
||||
state(DNDState::INV_PICKUP);
|
||||
} else {
|
||||
dbc::log("inv slot empty");
|
||||
}
|
||||
} break;
|
||||
case LOOT_OPEN:
|
||||
open();
|
||||
state(DNDState::LOOTING);
|
||||
|
@ -149,6 +177,8 @@ namespace gui {
|
|||
close();
|
||||
state(DNDState::END);
|
||||
break;
|
||||
case TICK: // ignored
|
||||
break;
|
||||
default:
|
||||
dbc::sentinel(fmt::format("invalid event: {}", int(ev)));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue