MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / consumeItems

Method consumeItems

source/game/StarPlayerInventory.cpp:307–398  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

305}
306
307bool PlayerInventory::consumeItems(ItemDescriptor const& descriptor, bool exactMatch) {
308 if (descriptor.count() == 0)
309 return true;
310
311 auto one = descriptor.singular();
312
313 Map<String, uint64_t> consumeFromItemBags;
314 for (auto pair : m_bags)
315 consumeFromItemBags[pair.first] = pair.second->available(one);
316
317 uint64_t consumeFromEquipment = 0;
318 for (auto const& p : m_equipment) {
319 if (p.second)
320 consumeFromEquipment += p.second->matches(one, exactMatch) ? p.second->count() : 0;
321 }
322
323 uint64_t consumeFromSwap = 0;
324 if (m_swapSlot)
325 consumeFromSwap += m_swapSlot->matches(one, exactMatch) ? m_swapSlot->count() : 0;
326
327 uint64_t consumeFromTrash = 0;
328 if (m_trashSlot)
329 consumeFromTrash += m_trashSlot->matches(one, exactMatch) ? m_trashSlot->count() : 0;
330
331 auto totalAvailable = consumeFromEquipment + consumeFromSwap + consumeFromTrash;
332 for (auto pair : consumeFromItemBags)
333 totalAvailable += pair.second;
334
335 if (totalAvailable < descriptor.count())
336 return false;
337
338 uint64_t leftoverCount = descriptor.count();
339 uint64_t quantity;
340 for (auto pair : m_bags) {
341 quantity = min(leftoverCount, consumeFromItemBags[pair.first]);
342 if (quantity > 0) {
343 auto res = pair.second->consumeItems(one.multiply(quantity), exactMatch);
344 _unused(res);
345 starAssert(res);
346 leftoverCount -= quantity;
347 }
348 }
349
350 quantity = min(leftoverCount, consumeFromEquipment);
351 if (quantity > 0) {
352 auto leftoverQuantity = quantity;
353 _unused(leftoverQuantity);
354 for (auto const& p : m_equipment) {
355 if (p.second && p.second->matches(one, exactMatch)) {
356 auto toConsume = min(p.second->count(), quantity);
357 auto res = p.second->consume(toConsume);
358 _unused(res);
359 starAssert(res);
360
361 leftoverQuantity -= toConsume;
362 }
363 }
364 starAssert(leftoverQuantity == 0);

Callers

nothing calls this directly

Calls 6

singularMethod · 0.80
availableMethod · 0.80
countMethod · 0.45
matchesMethod · 0.45
multiplyMethod · 0.45
consumeMethod · 0.45

Tested by

no test coverage detected