Now items drop where you aim, and won't let you drop on a floor. But maybe one more change.

This commit is contained in:
Zed A. Shaw 2025-08-02 23:11:59 -04:00
parent 23ead1f0ca
commit 1788b8fb28
3 changed files with 21 additions and 41 deletions

View file

@ -112,8 +112,7 @@ namespace gui {
case AIM_CLICK: {
// take from inventory, drop on floor
bool worked = throw_on_floor($status_ui.$gui, true);
dbc::check(worked, "Need to fix this, should be able to abort.");
END(CLOSE);
if(worked) END(CLOSE);
} break;
case INV_SELECT: {
auto drop_id = std::any_cast<guecs::Entity>(data);
@ -139,8 +138,7 @@ namespace gui {
case AIM_CLICK: {
// THIS IS PUT IT BACK ON THE FLOOR
bool worked = throw_on_floor($loot_ui.$gui, false);
dbc::check(worked, "Failed to drop it back on the floor.");
END(CLOSE);
if(worked) END(CLOSE);
} break;
default:
handle_mouse(ev, $loot_ui.$gui);
@ -196,7 +194,6 @@ namespace gui {
}
void DNDLoot::clear_grab() {
dbc::log("CLEARED!");
$grab_source = std::nullopt;
$grab_sprite = nullptr;
}
@ -291,7 +288,6 @@ namespace gui {
"StatusUI doesn't actually have that GrabSource in the gui.");
auto& grab = gui.get<guecs::GrabSource>(*$grab_source);
grab.commit();
bool result = false;
@ -301,7 +297,11 @@ namespace gui {
result = $loot_ui.drop_item(grab.world_entity);
}
clear_grab();
if(result) {
grab.commit();
clear_grab();
}
return result;
}

View file

@ -102,8 +102,7 @@ namespace gui {
bool StatusUI::place_slot(guecs::Entity gui_id, DinkyECS::Entity world_entity) {
auto& slot_name = $gui.name_for(gui_id);
auto player = $level.world->get_the<components::Player>();
auto& inventory = $level.world->get<inventory::Model>(player.entity);
auto& inventory = $level.world->get<inventory::Model>($level.player);
if(inventory.add(slot_name, world_entity)) {
$level.world->make_constant(world_entity);
@ -123,18 +122,8 @@ namespace gui {
// NOTE: do I need this or how does it relate to drop_item?
void StatusUI::remove_slot(guecs::Entity slot_id) {
// NOTE: really the System should coordinate either dropping on the
// ground or moving from one container or another, so when loot_ui
// moves to use an ECS id to a container I can have the System
// do it.
auto& slot_name = $gui.name_for(slot_id);
auto player = $level.world->get_the<components::Player>();
auto& inventory = $level.world->get<inventory::Model>(player.entity);
auto world_entity = inventory.get(slot_name);
inventory.remove(world_entity);
System::remove_from_container(*$level.world, $level.player, slot_name);
$gui.remove<guecs::GrabSource>(slot_id);
$gui.remove<guecs::Icon>(slot_id);
}
@ -143,8 +132,7 @@ namespace gui {
if(gui_a != gui_b) {
auto& a_name = $gui.name_for(gui_a);
auto& b_name = $gui.name_for(gui_b);
auto player = $level.world->get_the<components::Player>();
System::inventory_swap($level, player.entity, a_name, b_name);
System::inventory_swap($level, $level.player, a_name, b_name);
}
update();