void Container::SplitItem(ItemPtr item) { auto itemLocation = std::find(this->Contents.begin(), this->Contents.end(), item); if (itemLocation == this->Contents.end()) { return; } auto newItem = Item::Clone(item); auto splitSize = item->GetCount() / 2; auto difference = (item->GetCount() - splitSize); // We don't want rounding issues item->SetCount(splitSize); newItem->SetCount(difference); this->Contents.insert(itemLocation + 1, newItem); }
void Container::CombineItems(ItemPtr source, ItemPtr dest) { auto destItemLocation = std::find(this->Contents.begin(), this->Contents.end(), dest); auto sourceItemLocation = std::find(this->Contents.begin(), this->Contents.end(), source); auto movingFromHere = sourceItemLocation != this->Contents.end(); auto movingToHere = destItemLocation != this->Contents.end(); if (!movingFromHere && !movingToHere) { return; } if (movingToHere) { destItemLocation->get()->SetCount(destItemLocation->get()->GetCount() + source->GetCount()); source->SetCount(0); } if (!movingFromHere) { return; } this->Contents.erase(sourceItemLocation); }