diff options
Diffstat (limited to 'pokemod/MapTrainer.cpp')
| -rw-r--r-- | pokemod/MapTrainer.cpp | 142 |
1 files changed, 73 insertions, 69 deletions
diff --git a/pokemod/MapTrainer.cpp b/pokemod/MapTrainer.cpp index 217b8d2d..ab5abd21 100644 --- a/pokemod/MapTrainer.cpp +++ b/pokemod/MapTrainer.cpp @@ -15,25 +15,26 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -// Qt includes -#include <QMap> +// Header include +#include "MapTrainer.h" // Pokemod includes -#include "Pokemod.h" #include "Dialog.h" +#include "Map.h" #include "MapTrainerTeamMember.h" +#include "Pokemod.h" -// Header include -#include "MapTrainer.h" +// Qt includes +#include <QMap> MapTrainer::MapTrainer(const MapTrainer& trainer) : - Object("MapTrainer", trainer.pokemod(), trainer.id()) + Object("MapTrainer", trainer.parent(), trainer.id()) { *this = trainer; } -MapTrainer::MapTrainer(const Pokemod* pokemod, const int id) : - Object("MapTrainer", pokemod, id), +MapTrainer::MapTrainer(const Object* parent, const int id) : + Object("MapTrainer", parent, id), m_name(""), m_trainerClass(INT_MAX), m_coordinate(0, 0), @@ -46,14 +47,14 @@ MapTrainer::MapTrainer(const Pokemod* pokemod, const int id) : { } -MapTrainer::MapTrainer(const MapTrainer& trainer, const Pokemod* pokemod, const int id) : - Object("MapTrainer", pokemod, id) +MapTrainer::MapTrainer(const MapTrainer& trainer, const Object* parent, const int id) : + Object("MapTrainer", parent, id) { *this = trainer; } -MapTrainer::MapTrainer(const QDomElement& xml, const Pokemod* pokemod, const int id) : - Object("MapTrainer", pokemod, id) +MapTrainer::MapTrainer(const QDomElement& xml, const Object* parent, const int id) : + Object("MapTrainer", parent, id) { load(xml, id); } @@ -65,56 +66,57 @@ MapTrainer::~MapTrainer() bool MapTrainer::validate() const { - bool valid = true; - pokemod()->validationMsg(QString("------Trainer \"%1\" with id %2---").arg(m_name).arg(id()), Pokemod::V_Msg); - if (m_name == "") - { - pokemod()->validationMsg("Name is not defined"); - valid = false; - } - if (pokemod()->trainerIndex(m_trainerClass) == INT_MAX) - { - pokemod()->validationMsg("Invalid trainer class"); - valid = false; - } - if (Pokemod::D_End_None <= m_direction) - { - pokemod()->validationMsg("Invalid direction"); - valid = false; - } - if (!m_numFight || (pokemod()->rules()->maxFight() < m_numFight)) - { - pokemod()->validationMsg("Invalid number of Pokémon for a fight"); - valid = false; - } - if (pokemod()->dialogIndex(m_dialog) == INT_MAX) - { - pokemod()->validationMsg("Invalid dialog"); - valid = false; - } - if (teamMemberCount() <= m_leadTeamMember) - { - 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()]) - pokemod()->validationMsg(QString("Duplicate team member with id %1").arg(teamMember->id())); - idChecker[teamMember->id()] = true; - } - } - else - { - pokemod()->validationMsg("There are no team members"); - valid = false; - } - return valid; + // 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::load(const QDomElement& xml, int id) @@ -154,13 +156,15 @@ void MapTrainer::setName(const QString& name) void MapTrainer::setTrainerClass(const int trainerClass) throw(BoundsException) { - if (pokemod()->trainerIndex(trainerClass) == INT_MAX) + if (static_cast<const Pokemod*>(pokemod())->trainerIndex(trainerClass) == INT_MAX) error<BoundsException>("trainerClass"); m_trainerClass = trainerClass; } -void MapTrainer::setCoordinate(const Point& coordinate) +void MapTrainer::setCoordinate(const Point& coordinate) throw(BoundsException) { + if ((static_cast<const Map*>(parent())->width() <= coordinate.x()) || (static_cast<const Map*>(parent())->height() <= coordinate.y())) + error<BoundsException>("coordinate"); m_coordinate = coordinate; } @@ -178,7 +182,7 @@ void MapTrainer::setDirection(const int direction) throw(BoundsException) void MapTrainer::setNumFight(const int numFight) throw(BoundsException) { - if (!numFight || (pokemod()->rules()->maxFight() < numFight)) + if (!numFight || (static_cast<const Pokemod*>(pokemod())->rules()->maxFight() < numFight)) error<BoundsException>("numFight"); m_numFight = numFight; } @@ -190,7 +194,7 @@ void MapTrainer::setAppearFlag(const Flag& appearFlag) void MapTrainer::setDialog(const int dialog) throw(BoundsException) { - if (pokemod()->dialogIndex(dialog) == INT_MAX) + if (static_cast<const Pokemod*>(pokemod())->dialogIndex(dialog) == INT_MAX) error<BoundsException>("dialog"); m_dialog = dialog; } @@ -288,19 +292,19 @@ int MapTrainer::teamMemberCount() const MapTrainerTeamMember* MapTrainer::newTeamMember() { - m_teamMember.append(new MapTrainerTeamMember(pokemod(), newTeamMemberId())); + m_teamMember.append(new MapTrainerTeamMember(this, newTeamMemberId())); return m_teamMember[teamMemberCount() - 1]; } MapTrainerTeamMember* MapTrainer::newTeamMember(const QDomElement& xml) { - m_teamMember.append(new MapTrainerTeamMember(xml, pokemod(), newTeamMemberId())); + m_teamMember.append(new MapTrainerTeamMember(xml, this, newTeamMemberId())); return m_teamMember[teamMemberCount() - 1]; } MapTrainerTeamMember* MapTrainer::newTeamMember(const MapTrainerTeamMember& teamMember) { - m_teamMember.append(new MapTrainerTeamMember(teamMember, pokemod(), newTeamMemberId())); + m_teamMember.append(new MapTrainerTeamMember(teamMember, this, newTeamMemberId())); return m_teamMember[teamMemberCount() - 1]; } |
