You can grab stuff off the ground and put in your inventory but it doesn't show the sprite while you do it yet.
This commit is contained in:
parent
cd02507023
commit
ca74b817e5
2 changed files with 31 additions and 6 deletions
|
@ -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::ITEM_PICKUP(Event ev, std::any data) {
|
||||||
|
using enum Event;
|
||||||
|
|
||||||
|
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:
|
||||||
|
dbc::log("PUT IT BACK!");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
handle_mouse(ev, $loot_ui.$gui);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DNDLoot::END(Event ev) {
|
void DNDLoot::END(Event ev) {
|
||||||
using enum Event;
|
using enum Event;
|
||||||
|
|
||||||
switch(ev) {
|
switch(ev) {
|
||||||
case LOOT_ITEM:
|
case LOOT_ITEM: {
|
||||||
$loot_ui.active = true;
|
// NOTE: if > 1 items, go to LOOT_OPEN instead
|
||||||
$grab_source = std::nullopt;
|
auto gui_id = $loot_ui.$gui.entity("item_0");
|
||||||
state(DNDState::LOOTING);
|
$grab_source = UISystem::loot_grab($loot_ui.$gui, gui_id);
|
||||||
break;
|
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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,8 @@ namespace gui {
|
||||||
LOOTING=101,
|
LOOTING=101,
|
||||||
LOOT_GRAB=102,
|
LOOT_GRAB=102,
|
||||||
INV_GRAB=103,
|
INV_GRAB=103,
|
||||||
END=104
|
ITEM_PICKUP=104,
|
||||||
|
END=105
|
||||||
};
|
};
|
||||||
|
|
||||||
class DNDLoot : public DeadSimpleFSM<DNDState, Event> {
|
class DNDLoot : public DeadSimpleFSM<DNDState, Event> {
|
||||||
|
@ -33,6 +34,7 @@ namespace gui {
|
||||||
void LOOT_GRAB(Event ev, std::any data);
|
void LOOT_GRAB(Event ev, std::any data);
|
||||||
void INV_GRAB(Event ev, std::any data);
|
void INV_GRAB(Event ev, std::any data);
|
||||||
void END(Event ev);
|
void END(Event ev);
|
||||||
|
void ITEM_PICKUP(Event ev, std::any data);
|
||||||
void handle_mouse(Event ev, guecs::UI& gui);
|
void handle_mouse(Event ev, guecs::UI& gui);
|
||||||
void mouse_action(bool hover);
|
void mouse_action(bool hover);
|
||||||
sf::Vector2f mouse_position();
|
sf::Vector2f mouse_position();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue