summaryrefslogtreecommitdiffstats
path: root/sigmod/MapTrainerTeamMember.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sigmod/MapTrainerTeamMember.cpp')
-rw-r--r--sigmod/MapTrainerTeamMember.cpp24
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());
+}