diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2009-01-10 17:34:03 -0500 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2009-01-10 17:34:03 -0500 |
| commit | 0d5257e461bdc579e7879a2a4b69d1b3bdf6bb29 (patch) | |
| tree | d34fd5da5b0dc83897fd389e65c0cfc3c95f0818 /sigmod/MapTrainerTeamMember.cpp | |
| parent | 177cbde2478dea633d738c958a13e9c12a8a24a4 (diff) | |
| download | sigen-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.cpp | 52 |
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(); |
