summaryrefslogtreecommitdiffstats
path: root/sigmod/MapTrainerTeamMember.cpp
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-01-10 17:34:03 -0500
committerBen Boeckel <MathStuf@gmail.com>2009-01-10 17:34:03 -0500
commit0d5257e461bdc579e7879a2a4b69d1b3bdf6bb29 (patch)
treed34fd5da5b0dc83897fd389e65c0cfc3c95f0818 /sigmod/MapTrainerTeamMember.cpp
parent177cbde2478dea633d738c958a13e9c12a8a24a4 (diff)
downloadsigen-0d5257e461bdc579e7879a2a4b69d1b3bdf6bb29.tar.gz
sigen-0d5257e461bdc579e7879a2a4b69d1b3bdf6bb29.tar.xz
sigen-0d5257e461bdc579e7879a2a4b69d1b3bdf6bb29.zip
Refactored canLearn out of move checking in MapTrainerTeamMember
Diffstat (limited to 'sigmod/MapTrainerTeamMember.cpp')
-rw-r--r--sigmod/MapTrainerTeamMember.cpp52
1 files changed, 23 insertions, 29 deletions
diff --git a/sigmod/MapTrainerTeamMember.cpp b/sigmod/MapTrainerTeamMember.cpp
index b2948bcc..caaec773 100644
--- a/sigmod/MapTrainerTeamMember.cpp
+++ b/sigmod/MapTrainerTeamMember.cpp
@@ -139,34 +139,7 @@ void Sigmod::MapTrainerTeamMember::setItem(const int item, const int count)
}
}
-void Sigmod::MapTrainerTeamMember::setMove(const int move, const bool state)
-{
- if (moveCheck(move) && state && !m_move.contains(move))
- {
- const Species* species = sigmod()->speciesById(move);
- for (int i = 0; i < species->moveCount(); ++i)
- {
- const SpeciesMove* speciesMove = species->move(i);
- if (speciesMove->move() == move)
- {
- if (m_move.size() < sigmod()->rules()->maxMoves())
- {
- m_move.append(move);
- emit(changed());
- }
- else
- ERROR("Cannot know any more moves");
- }
- }
- ERROR("Cannot learn the move");
- }
- else if (m_move.contains(move))
- {
- m_move.removeAll(move);
- emit(changed());
- }
-}
-
+SETTER_LIST_LIMIT(MapTrainerTeamMember, Move, move, sigmod()->rules()->maxMoves(), "Cannot know anymore moves")
SETTER_LIST_LIMIT(MapTrainerTeamMember, Nature, nature, sigmod()->rules()->maxNatures(), "Cannot have anymore natures")
GETTER(MapTrainerTeamMember, int, species)
@@ -180,7 +153,14 @@ CHECK_INDEX(MapTrainerTeamMember, int, species, sigmod(), species)
CHECK_BOUNDS(MapTrainerTeamMember, int, level, 1, sigmod()->rules()->maxLevel())
CHECK_INDEX(MapTrainerTeamMember, int, ability, sigmod(), ability)
CHECK_INDEX(MapTrainerTeamMember, int, item, sigmod(), item)
-CHECK_INDEX(MapTrainerTeamMember, int, move, sigmod(), move)
+CHECK_BEGIN(MapTrainerTeamMember, int, move)
+ IBOUNDS(move, sigmod(), move);
+ if (!canLearn(move))
+ {
+ ERROR("Cannot learn the move");
+ return false;
+ }
+CHECK_END()
CHECK_INDEX(MapTrainerTeamMember, int, nature, sigmod(), nature)
Sigmod::MapTrainerTeamMember& Sigmod::MapTrainerTeamMember::operator=(const MapTrainerTeamMember& rhs)
@@ -221,6 +201,20 @@ bool Sigmod::MapTrainerTeamMember::checkWeight(const int item, const int count)
return (heldWeight(temp) <= species->maxHoldWeight());
}
+bool Sigmod::MapTrainerTeamMember::canLearn(const int move) const
+{
+ const Species* species = sigmod()->speciesById(m_species);
+ if (species)
+ {
+ for (int i = 0; i < species->moveCount(); ++i)
+ {
+ if (species->move(i)->move() == move)
+ return true;
+ }
+ }
+ return !species;
+}
+
void Sigmod::MapTrainerTeamMember::clear()
{
m_ability.clear();