diff options
Diffstat (limited to 'sigmod/MapTrainerTeamMember.cpp')
| -rw-r--r-- | sigmod/MapTrainerTeamMember.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/sigmod/MapTrainerTeamMember.cpp b/sigmod/MapTrainerTeamMember.cpp index beab6d54..595277df 100644 --- a/sigmod/MapTrainerTeamMember.cpp +++ b/sigmod/MapTrainerTeamMember.cpp @@ -144,8 +144,13 @@ void Sigmod::MapTrainerTeamMember::setItem(const int item, const bool state) { if (m_item.size() < qobject_cast<const Sigmod*>(sigmod())->rules()->maxHeldItems()) { - m_item.append(item); - emit(changed()); + if (checkWeight(item)) + { + m_item.append(item); + emit(changed()); + } + else + emit(error("Cannot carry that much weight")); } else emit(error("Cannot hold any more items")); @@ -271,3 +276,18 @@ Sigmod::MapTrainerTeamMember& Sigmod::MapTrainerTeamMember::operator=(const MapT COPY(nature); return *this; } + +bool Sigmod::MapTrainerTeamMember::checkWeight(const int item) +{ + const int speciesIndex = qobject_cast<const Sigmod*>(sigmod())->speciesIndex(m_species); + if (speciesIndex == INT_MAX) + return true; + int totalWeight = qobject_cast<const Sigmod*>(sigmod())->itemById(item)->weight(); + foreach (int item, m_item) + { + const int itemIndex = qobject_cast<const Sigmod*>(sigmod())->itemIndex(item); + if (itemIndex != INT_MAX) + totalWeight += qobject_cast<const Sigmod*>(sigmod())->item(itemIndex)->weight(); + } + return (totalWeight <= qobject_cast<const Sigmod*>(sigmod())->species(speciesIndex)->maxHoldWeight()); +} |
