diff options
Diffstat (limited to 'pokemod/MapTrainer.cpp')
| -rw-r--r-- | pokemod/MapTrainer.cpp | 138 |
1 files changed, 64 insertions, 74 deletions
diff --git a/pokemod/MapTrainer.cpp b/pokemod/MapTrainer.cpp index 93ae61cc..e486475a 100644 --- a/pokemod/MapTrainer.cpp +++ b/pokemod/MapTrainer.cpp @@ -24,6 +24,9 @@ #include "MapTrainerTeamMember.h" #include "Pokemod.h" +// Qt includes +#include <QSet> + MapTrainer::MapTrainer(const MapTrainer& trainer) : Object("MapTrainer", trainer.parent(), trainer.id()) { @@ -61,59 +64,28 @@ MapTrainer::~MapTrainer() clear(); } -bool MapTrainer::validate() const -{ - // TODO: validate -// bool valid = true; -// static_cast<const Pokemod*>(pokemod())->validationMsg(QString("------Trainer \"%1\" with id %2---").arg(m_name).arg(id()), Pokemod::V_Msg); -// if (m_name == "") -// { -// static_cast<const Pokemod*>(pokemod())->validationMsg("Name is not defined"); -// valid = false; -// } -// if (static_cast<const Pokemod*>(pokemod())->trainerIndex(m_trainerClass) == INT_MAX) -// { -// static_cast<const Pokemod*>(pokemod())->validationMsg("Invalid trainer class"); -// valid = false; -// } -// if (Pokemod::D_End_None <= m_direction) -// { -// static_cast<const Pokemod*>(pokemod())->validationMsg("Invalid direction"); -// valid = false; -// } -// if (!m_numFight || (static_cast<const Pokemod*>(pokemod())->rules()->maxFight() < m_numFight)) -// { -// static_cast<const Pokemod*>(pokemod())->validationMsg("Invalid number of Pokémon for a fight"); -// valid = false; -// } -// if (static_cast<const Pokemod*>(pokemod())->dialogIndex(m_dialog) == INT_MAX) -// { -// static_cast<const Pokemod*>(pokemod())->validationMsg("Invalid dialog"); -// valid = false; -// } -// if (teamMemberCount() <= m_leadTeamMember) -// { -// static_cast<const Pokemod*>(pokemod())->validationMsg("Invalid lead member"); -// valid = false; -// } -// if (teamMemberCount()) -// { -// QMap<int, bool> idChecker; -// foreach (MapTrainerTeamMember* teamMember, m_teamMember) -// { -// if (!teamMember->isValid()) -// valid = false; -// if (idChecker[teamMember->id()]) -// static_cast<const Pokemod*>(pokemod())->validationMsg(QString("Duplicate team member with id %1").arg(teamMember->id())); -// idChecker[teamMember->id()] = true; -// } -// } -// else -// { -// static_cast<const Pokemod*>(pokemod())->validationMsg("There are no team members"); -// valid = false; -// } -// return valid; +void MapTrainer::validate(QTextStream& stream) +{ + TEST_SETUP(); + if (m_name.isEmpty()) + error(stream, "Name is empty"); + TEST(setTrainerClass, trainerClass); + TEST(setCoordinate, coordinate); + TEST(setDirection, direction); + TEST(setNumFight, numFight); + TEST(setDialog, dialog); + TEST(setLeadTeamMember, leadTeamMember); + if (!teamMemberCount()) + error(stream, "There are no team members"); + QSet<int> idChecker; + foreach (MapTrainerTeamMember* teamMember, m_teamMember) + { + if (!teamMember->isValid(stream)) + setValid(false); + if (idChecker.contains(teamMember->id())) + subclassError(stream, "team member", teamMember->id()); + idChecker.insert(teamMember->id()); + } } void MapTrainer::load(const QDomElement& xml, int id) @@ -151,17 +123,23 @@ void MapTrainer::setName(const QString& name) m_name = name; } -void MapTrainer::setTrainerClass(const int trainerClass) throw(BoundsException) +void MapTrainer::setTrainerClass(const int trainerClass) { if (static_cast<const Pokemod*>(pokemod())->trainerIndex(trainerClass) == INT_MAX) - error<BoundsException>("trainerClass"); + { + boundsError("trainerClass"); + return; + } m_trainerClass = trainerClass; } -void MapTrainer::setCoordinate(const Point& coordinate) throw(BoundsException) +void MapTrainer::setCoordinate(const Point& coordinate) { if ((static_cast<const Map*>(parent())->width() <= coordinate.x()) || (static_cast<const Map*>(parent())->height() <= coordinate.y())) - error<BoundsException>("coordinate"); + { + boundsError("coordinate"); + return; + } m_coordinate = coordinate; } @@ -170,17 +148,23 @@ void MapTrainer::setSight(const int sight) m_sight = sight; } -void MapTrainer::setDirection(const int direction) throw(BoundsException) +void MapTrainer::setDirection(const int direction) { if (Pokemod::D_End_None <= direction) - error<BoundsException>("direction"); + { + boundsError("direction"); + return; + } m_direction = direction; } -void MapTrainer::setNumFight(const int numFight) throw(BoundsException) +void MapTrainer::setNumFight(const int numFight) { if (!numFight || (static_cast<const Pokemod*>(pokemod())->rules()->maxFight() < numFight)) - error<BoundsException>("numFight"); + { + boundsError("numFight"); + return; + } m_numFight = numFight; } @@ -189,17 +173,23 @@ void MapTrainer::setAppearFlag(const Flag& appearFlag) m_appearFlag = appearFlag; } -void MapTrainer::setDialog(const int dialog) throw(BoundsException) +void MapTrainer::setDialog(const int dialog) { if (static_cast<const Pokemod*>(pokemod())->dialogIndex(dialog) == INT_MAX) - error<BoundsException>("dialog"); + { + boundsError("dialog"); + return; + } m_dialog = dialog; } -void MapTrainer::setLeadTeamMember(const int leadMember) throw(BoundsException) +void MapTrainer::setLeadTeamMember(const int leadMember) { if (teamMemberCount() <= leadMember) - error<BoundsException>("leadTeamMember"); + { + boundsError("leadTeamMember"); + return; + } m_leadTeamMember = leadMember; } @@ -248,26 +238,26 @@ int MapTrainer::leadTeamMember() const return m_leadTeamMember; } -const MapTrainerTeamMember* MapTrainer::teamMember(const int index) const throw(IndexException) +const MapTrainerTeamMember* MapTrainer::teamMember(const int index) const { if (teamMemberCount() <= index) - warning<IndexException>("team member"); + return NULL; return m_teamMember.at(index); } -MapTrainerTeamMember* MapTrainer::teamMember(const int index) throw(IndexException) +MapTrainerTeamMember* MapTrainer::teamMember(const int index) { if (teamMemberCount() <= index) - error<IndexException>("team member"); + return NULL; return m_teamMember[index]; } -const MapTrainerTeamMember* MapTrainer::teamMemberById(const int id) const throw(IndexException) +const MapTrainerTeamMember* MapTrainer::teamMemberById(const int id) const { return teamMember(teamMemberIndex(id)); } -MapTrainerTeamMember* MapTrainer::teamMemberById(const int id) throw(IndexException) +MapTrainerTeamMember* MapTrainer::teamMemberById(const int id) { return teamMember(teamMemberIndex(id)); } @@ -308,15 +298,15 @@ MapTrainerTeamMember* MapTrainer::newTeamMember(MapTrainerTeamMember* teamMember return teamMember; } -void MapTrainer::deleteTeamMember(const int index) throw(IndexException) +void MapTrainer::deleteTeamMember(const int index) { if (teamMemberCount() <= index) - error<IndexException>("team member"); + return; delete m_teamMember[index]; m_teamMember.removeAt(index); } -void MapTrainer::deleteTeamMemberById(const int id) throw(IndexException) +void MapTrainer::deleteTeamMemberById(const int id) { deleteTeamMember(teamMemberIndex(id)); } |
