cWindow: Fix slot area priority when double click stacking. (#4086)
Fixes #4084
This commit is contained in:
parent
ad22922393
commit
a72891fbb0
|
@ -421,43 +421,15 @@ void cWindow::DistributeStackToAreas(cItem & a_ItemStack, cPlayer & a_Player, cS
|
||||||
|
|
||||||
bool cWindow::CollectItemsToHand(cItem & a_Dragging, cSlotArea & a_Area, cPlayer & a_Player, bool a_CollectFullStacks)
|
bool cWindow::CollectItemsToHand(cItem & a_Dragging, cSlotArea & a_Area, cPlayer & a_Player, bool a_CollectFullStacks)
|
||||||
{
|
{
|
||||||
// First ask the slot areas from a_Area till the end of list:
|
// Ask to collect items from each slot area in order:
|
||||||
bool ShouldCollect = false;
|
for (auto Area : m_SlotAreas)
|
||||||
for (cSlotAreas::iterator itr = m_SlotAreas.begin(), end = m_SlotAreas.end(); itr != end; ++itr)
|
|
||||||
{
|
{
|
||||||
if (&a_Area == *itr)
|
if (Area->CollectItemsToHand(a_Dragging, a_Player, a_CollectFullStacks))
|
||||||
{
|
{
|
||||||
ShouldCollect = true;
|
return true; // a_Dragging is full
|
||||||
}
|
|
||||||
if (!ShouldCollect)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ((*itr)->CollectItemsToHand(a_Dragging, a_Player, a_CollectFullStacks))
|
|
||||||
{
|
|
||||||
// a_Dragging is full
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false; // All areas processed
|
||||||
// a_Dragging still not full, ask slot areas before a_Area in the list:
|
|
||||||
for (cSlotAreas::iterator itr = m_SlotAreas.begin(), end = m_SlotAreas.end(); itr != end; ++itr)
|
|
||||||
{
|
|
||||||
if (*itr == &a_Area)
|
|
||||||
{
|
|
||||||
// All areas processed
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ((*itr)->CollectItemsToHand(a_Dragging, a_Player, a_CollectFullStacks))
|
|
||||||
{
|
|
||||||
// a_Dragging is full
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Shouldn't reach here
|
|
||||||
// a_Area is expected to be part of m_SlotAreas[], so the "return false" in the loop above should have returned already
|
|
||||||
ASSERT(!"This branch should not be reached");
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -169,7 +169,7 @@ public:
|
||||||
If a_BackFill is true, the areas will be filled from the back (right side). (Example: Empty Hotbar -> Item get in slot 8, not slot 0) */
|
If a_BackFill is true, the areas will be filled from the back (right side). (Example: Empty Hotbar -> Item get in slot 8, not slot 0) */
|
||||||
void DistributeStackToAreas(cItem & a_ItemStack, cPlayer & a_Player, cSlotAreas & a_AreasInOrder, bool a_ShouldApply, bool a_BackFill);
|
void DistributeStackToAreas(cItem & a_ItemStack, cPlayer & a_Player, cSlotAreas & a_AreasInOrder, bool a_ShouldApply, bool a_BackFill);
|
||||||
|
|
||||||
/** Called on DblClicking to collect all stackable items from all areas into hand, starting with the specified area.
|
/** Called on DblClicking to collect all stackable items from all areas into hand.
|
||||||
The items are accumulated in a_Dragging and removed from the SlotAreas immediately.
|
The items are accumulated in a_Dragging and removed from the SlotAreas immediately.
|
||||||
If a_CollectFullStacks is false, slots with full stacks in the area are skipped while collecting.
|
If a_CollectFullStacks is false, slots with full stacks in the area are skipped while collecting.
|
||||||
Returns true if full stack has been collected, false if there's space remaining to fill. */
|
Returns true if full stack has been collected, false if there's space remaining to fill. */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user