|
|
@ -1,3 +1,4 @@ |
|
|
|
|
|
|
|
#define FSM_DEBUG 1 |
|
|
|
#include "gui/guecstra.hpp" |
|
|
|
#include "gui/guecstra.hpp" |
|
|
|
#include "gui/dnd_loot.hpp" |
|
|
|
#include "gui/dnd_loot.hpp" |
|
|
|
#include "gui/uisystems.hpp" |
|
|
|
#include "gui/uisystems.hpp" |
|
|
@ -19,6 +20,7 @@ namespace gui { |
|
|
|
FSM_STATE(DNDState, LOOTING, ev, data); |
|
|
|
FSM_STATE(DNDState, LOOTING, ev, data); |
|
|
|
FSM_STATE(DNDState, LOOT_GRAB, ev, data); |
|
|
|
FSM_STATE(DNDState, LOOT_GRAB, ev, data); |
|
|
|
FSM_STATE(DNDState, INV_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, END, ev); |
|
|
|
default: |
|
|
|
default: |
|
|
|
dbc::log(fmt::format("event received with data but state={} is not handled", int($state))); |
|
|
|
dbc::log(fmt::format("event received with data but state={} is not handled", int($state))); |
|
|
@ -105,15 +107,35 @@ namespace gui { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void DNDLoot::END(Event ev) { |
|
|
|
void DNDLoot::ITEM_PICKUP(Event ev, std::any data) { |
|
|
|
using enum Event; |
|
|
|
using enum Event; |
|
|
|
|
|
|
|
|
|
|
|
switch(ev) { |
|
|
|
switch(ev) { |
|
|
|
|
|
|
|
case INV_SELECT: |
|
|
|
|
|
|
|
if(UISystem::loot_drop($loot_ui.$gui, |
|
|
|
|
|
|
|
$status_ui.$gui, $grab_source, data)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
state(DNDState::END); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
case LOOT_ITEM: |
|
|
|
case LOOT_ITEM: |
|
|
|
$loot_ui.active = true; |
|
|
|
dbc::log("PUT IT BACK!"); |
|
|
|
$grab_source = std::nullopt; |
|
|
|
|
|
|
|
state(DNDState::LOOTING); |
|
|
|
|
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
handle_mouse(ev, $loot_ui.$gui); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void DNDLoot::END(Event ev) { |
|
|
|
|
|
|
|
using enum Event; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch(ev) { |
|
|
|
|
|
|
|
case LOOT_ITEM: { |
|
|
|
|
|
|
|
// NOTE: if > 1 items, go to LOOT_OPEN instead
|
|
|
|
|
|
|
|
auto gui_id = $loot_ui.$gui.entity("item_0"); |
|
|
|
|
|
|
|
$grab_source = UISystem::loot_grab($loot_ui.$gui, gui_id); |
|
|
|
|
|
|
|
if($grab_source) state(DNDState::ITEM_PICKUP); |
|
|
|
|
|
|
|
} break; |
|
|
|
case LOOT_OPEN: |
|
|
|
case LOOT_OPEN: |
|
|
|
$loot_ui.active = true; |
|
|
|
$loot_ui.active = true; |
|
|
|
$grab_source = std::nullopt; |
|
|
|
$grab_source = std::nullopt; |
|
|
@ -144,6 +166,7 @@ namespace gui { |
|
|
|
case MOUSE_DRAG: |
|
|
|
case MOUSE_DRAG: |
|
|
|
case MOUSE_MOVE: { |
|
|
|
case MOUSE_MOVE: { |
|
|
|
if($grab_source) { |
|
|
|
if($grab_source) { |
|
|
|
|
|
|
|
fmt::println("MOVING that thing"); |
|
|
|
auto& source = gui.get<guecs::GrabSource>(*$grab_source); |
|
|
|
auto& source = gui.get<guecs::GrabSource>(*$grab_source); |
|
|
|
source.move($window.mapPixelToCoords($router.position)); |
|
|
|
source.move($window.mapPixelToCoords($router.position)); |
|
|
|
} |
|
|
|
} |
|
|
|