| 283 | } |
| 284 | |
| 285 | ItemPtr ItemBag::stackItems(ItemPtr items) { |
| 286 | if (!items || items->empty()) |
| 287 | return {}; |
| 288 | |
| 289 | while (true) { |
| 290 | size_t slot = bestSlotAvailable(items, true); |
| 291 | if (slot == NPos) |
| 292 | return items; |
| 293 | |
| 294 | auto& storedItem = at(slot); |
| 295 | if (storedItem) { |
| 296 | storedItem->stackWith(items); |
| 297 | if (items->empty()) |
| 298 | return {}; |
| 299 | } else { |
| 300 | storedItem = std::move(items); |
| 301 | return {}; |
| 302 | } |
| 303 | } |
| 304 | } |
| 305 | |
| 306 | void ItemBag::condenseStacks() { |
| 307 | for (size_t i = size() - 1; i > 0; --i) { |