| 4374 | } |
| 4375 | |
| 4376 | ItemStackResult getItemStackingBehavior(const int player, Item* itemToCheck, Item* itemDestinationStack, int& newQtyForCheckedItem, int& newQtyForDestItem) |
| 4377 | { |
| 4378 | ItemStackResult itemStackResult; |
| 4379 | itemStackResult.itemToStackInto = nullptr; |
| 4380 | if ( !itemToCheck ) |
| 4381 | { |
| 4382 | itemStackResult.resultType = ITEM_STACKING_ERROR; |
| 4383 | return itemStackResult; |
| 4384 | } |
| 4385 | |
| 4386 | if ( itemDestinationStack ) |
| 4387 | { |
| 4388 | return getItemStackingBehaviorIndividualItemCheck(player, itemToCheck, itemDestinationStack, newQtyForCheckedItem, newQtyForDestItem); |
| 4389 | } |
| 4390 | |
| 4391 | itemStackResult.resultType = ITEM_ADDED_WITHOUT_NEEDING_STACK; |
| 4392 | newQtyForCheckedItem = itemToCheck->count; |
| 4393 | newQtyForDestItem = 0; |
| 4394 | |
| 4395 | for ( node_t* node = stats[player]->inventory.first; node != nullptr; node = node->next ) |
| 4396 | { |
| 4397 | Item* item2 = static_cast<Item*>(node->element); |
| 4398 | if ( item2 ) |
| 4399 | { |
| 4400 | int tmpQtyCheckedItem = newQtyForCheckedItem; |
| 4401 | int tmpQtyDestItem = newQtyForDestItem; |
| 4402 | auto res = getItemStackingBehaviorIndividualItemCheck(player, itemToCheck, item2, tmpQtyCheckedItem, tmpQtyDestItem); |
| 4403 | bool skipResult = false; |
| 4404 | switch ( res.resultType ) |
| 4405 | { |
| 4406 | case ITEM_DESTINATION_NOT_SAME_ITEM: |
| 4407 | case ITEM_STACKING_ERROR: |
| 4408 | case ITEM_DESTINATION_STACK_IS_FULL: |
| 4409 | skipResult = true; |
| 4410 | break; |
| 4411 | default: |
| 4412 | break; |
| 4413 | } |
| 4414 | if ( skipResult ) |
| 4415 | { |
| 4416 | continue; |
| 4417 | } |
| 4418 | |
| 4419 | // found a stack to add this item to |
| 4420 | newQtyForCheckedItem = tmpQtyCheckedItem; |
| 4421 | newQtyForDestItem = tmpQtyDestItem; |
| 4422 | res.itemToStackInto = item2; |
| 4423 | return res; |
| 4424 | } |
| 4425 | } |
| 4426 | |
| 4427 | itemStackResult.resultType = ITEM_ADDED_WITHOUT_NEEDING_STACK; |
| 4428 | int maxStack = itemToCheck->getMaxStackLimit(player); |
| 4429 | if ( itemToCheck->count > maxStack ) |
| 4430 | { |
| 4431 | newQtyForCheckedItem = itemToCheck->count - maxStack; |
| 4432 | newQtyForDestItem = maxStack; |
| 4433 | } |
no test coverage detected