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)));
|
||||
}
|
||||
|
|
|
@ -12,7 +12,8 @@ namespace gui {
|
|||
LOOT_GRAB=102,
|
||||
INV_GRAB=103,
|
||||
ITEM_PICKUP=104,
|
||||
END=105
|
||||
INV_PICKUP=105,
|
||||
END=106
|
||||
};
|
||||
|
||||
class DNDLoot : public DeadSimpleFSM<DNDState, Event> {
|
||||
|
@ -34,8 +35,9 @@ namespace gui {
|
|||
void LOOTING(Event ev, std::any data);
|
||||
void LOOT_GRAB(Event ev, std::any data);
|
||||
void INV_GRAB(Event ev, std::any data);
|
||||
void END(Event ev);
|
||||
void END(Event ev, std::any data={});
|
||||
void ITEM_PICKUP(Event ev, std::any data);
|
||||
void INV_PICKUP(Event ev, std::any data);
|
||||
void handle_mouse(Event ev, guecs::UI& gui);
|
||||
void mouse_action(bool hover);
|
||||
void render();
|
||||
|
|
|
@ -39,7 +39,7 @@ namespace gui {
|
|||
FSM_STATE(State, MOVING, ev);
|
||||
FSM_STATE(State, ATTACKING, ev);
|
||||
FSM_STATE(State, ROTATING, ev);
|
||||
FSM_STATE(State, IDLE, ev);
|
||||
FSM_STATE(State, IDLE, ev, data);
|
||||
FSM_STATE(State, IN_COMBAT, ev);
|
||||
FSM_STATE(State, COMBAT_ROTATE, ev);
|
||||
FSM_STATE(State, NEXT_LEVEL, ev);
|
||||
|
@ -120,7 +120,7 @@ namespace gui {
|
|||
}
|
||||
}
|
||||
|
||||
void FSM::IDLE(Event ev) {
|
||||
void FSM::IDLE(Event ev, std::any data) {
|
||||
using enum Event;
|
||||
|
||||
sound::stop("walk");
|
||||
|
@ -176,8 +176,8 @@ namespace gui {
|
|||
state(State::LOOTING);
|
||||
break;
|
||||
case INV_SELECT:
|
||||
dbc::log("Dropping/grabbing items not yet supported.");
|
||||
state(State::IDLE);
|
||||
$dnd_loot.event(Event::INV_SELECT, data);
|
||||
state(State::LOOTING);
|
||||
break;
|
||||
case MOUSE_CLICK:
|
||||
mouse_action(false);
|
||||
|
|
|
@ -61,7 +61,7 @@ namespace gui {
|
|||
void ATTACKING(Event );
|
||||
void MAPPING(Event);
|
||||
void ROTATING(Event );
|
||||
void IDLE(Event ev);
|
||||
void IDLE(Event ev, std::any data);
|
||||
void IN_COMBAT(Event ev);
|
||||
void COMBAT_ROTATE(Event ev);
|
||||
void NEXT_LEVEL(Event ev);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue