diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2007-11-22 20:18:43 +0000 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2007-11-22 20:18:43 +0000 |
| commit | 4cc4d62d084bc3002e35f6bd15a73f22157114e4 (patch) | |
| tree | e492df521e068e0cd726382d0c08a939858196f2 /pokemod/Ability.cpp | |
| parent | 83f4b43f63960ba30e38cf5bb53cd98ae738ef74 (diff) | |
| download | sigen-4cc4d62d084bc3002e35f6bd15a73f22157114e4.tar.gz sigen-4cc4d62d084bc3002e35f6bd15a73f22157114e4.tar.xz sigen-4cc4d62d084bc3002e35f6bd15a73f22157114e4.zip | |
[FIX] classes more usable
[FIX] Matrix class
[ADD] pokemod/Rules.{h, cpp}
[FIX] coding style cleaned up
git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@28 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'pokemod/Ability.cpp')
| -rw-r--r-- | pokemod/Ability.cpp | 159 |
1 files changed, 102 insertions, 57 deletions
diff --git a/pokemod/Ability.cpp b/pokemod/Ability.cpp index de32f4b3..d4f68221 100644 --- a/pokemod/Ability.cpp +++ b/pokemod/Ability.cpp @@ -23,123 +23,168 @@ #include "Ability.h" -PokeGen::PokeMod::Ability::Ability(const Pokemod* par, const unsigned _id) : - Object(_id, par), + +PokeGen::PokeMod::Ability::Ability(const Pokemod& par, const unsigned _id) : + Object(par, _id), name("") { } -PokeGen::PokeMod::Ability::Ability(const Pokemod* par, Ini& ini, const unsigned _id) : - Object(_id, par) +PokeGen::PokeMod::Ability::Ability(const Pokemod& par, const Ability& a, const unsigned _id) : + Object(par, _id) +{ + *this = a; +} + +PokeGen::PokeMod::Ability::Ability(const Pokemod& par, const QString& fname, const unsigned _id) : + Object(par, _id) { - ImportIni(ini, _id); + load(fname, _id); } -bool PokeGen::PokeMod::Ability::Validate() +bool PokeGen::PokeMod::Ability::validate() const { - pokemod->ValidationMsg(QString("---Ability \"%1\" with id %2---").arg(name).arg(id), Pokemod::V_Msg); + bool valid = true; + pokemod.validationMsg(QString("---Ability \"%1\" with id %2---").arg(name).arg(id), Pokemod::V_Msg); if (name == "") { - pokemod->ValidationMsg("No Name"); - isValid = false; + pokemod.validationMsg("No Name"); + valid = false; } - - if (GetEffectCount()) + if (getEffectCount()) { QMap<unsigned, unsigned> idChecker; - for (QList<AbilityEffect>::Iterator i = effects.begin(); i != effects.end(); ++i) + for (QListIterator<AbilityEffect> i(effects); i.hasNext(); i.next()) { - if (!i->IsValid()) - isValid = false; - ++idChecker[i->GetId()]; + if (!i.peekNext().isValid()) + valid = false; + ++idChecker[i.peekNext().getId()]; } - for (QMap<unsigned, unsigned>::ConstIterator i = idChecker.begin(); i != idChecker.end(); ++i) + for (QMapIterator<unsigned, unsigned> i(idChecker); i.hasNext(); i.next()) { if (1 < i.value()) { - pokemod->ValidationMsg(QString("%2 effects with id %3").arg(name).arg(i.value()).arg(i.key())); - isValid = false; + pokemod.validationMsg(QString("%2 effects with id %3").arg(name).arg(i.value()).arg(i.key())); + valid = false; } } } else { - pokemod->ValidationMsg(QString("No effects").arg(name)); - isValid = false; + pokemod.validationMsg(QString("No effects").arg(name)); + valid = false; } - return isValid; + return valid; +} + +unsigned PokeGen::PokeMod::Ability::getNewId() const +{ + unsigned i = 0; + for (; (i < getEffectCount()) && (getEffectByID(i) != UINT_MAX); ++i) + ; + return i; } -void PokeGen::PokeMod::Ability::ImportIni(Ini& ini, const unsigned _id) +void PokeGen::PokeMod::Ability::load(const QString& fname, const unsigned _id) { + Ini ini(fname); if (_id == UINT_MAX) - ini.GetValue("id", id); + ini.getValue("id", id); else id = _id; - ini.GetValue("name", name); + ini.getValue("name", name); + QStringList path = pokemod.getPath().split('/'); + path.removeLast(); + QDir fdir(path.join("/")); effects.clear(); + if (fdir.cd("effect")) + { + for (QStringListIterator i(fdir.entryList(QStringList("*.pini"), QDir::Files, QDir::Name)); i.hasNext(); ) + newEffect(i.next()); + } } -void PokeGen::PokeMod::Ability::ExportIni(QFile& fout) const +void PokeGen::PokeMod::Ability::save() const { - Ini exAbility("ability"); - exAbility.AddField("id", id); - exAbility.AddField("name", name); - exAbility.Export(fout); - for (QList<AbilityEffect>::ConstIterator i = effects.begin(); i != effects.end(); ++i) - i->ExportIni(fout, name); + Ini ini; + ini.addField("id", id); + ini.addField("name", name); + ini.save(QString("%1/ability/%2/data.pini").arg(pokemod.getPath()).arg(name)); + for (QListIterator<AbilityEffect> i(effects); i.hasNext(); ) + i.next().save(name); } -void PokeGen::PokeMod::Ability::SetName(const QString& n) +void PokeGen::PokeMod::Ability::setName(const QString& n) { name = n; } -QString PokeGen::PokeMod::Ability::GetName() const +QString PokeGen::PokeMod::Ability::getName() const { return name; } -const PokeGen::PokeMod::AbilityEffect* PokeGen::PokeMod::Ability::GetEffect(const unsigned i) const +const PokeGen::PokeMod::AbilityEffect& PokeGen::PokeMod::Ability::getEffect(const unsigned i) const +{ + if (getEffectCount() <= i) + throw("Ability: out-of-bounds"); + return effects.at(i); +} + +PokeGen::PokeMod::AbilityEffect& PokeGen::PokeMod::Ability::getEffect(const unsigned i) { - if (i < GetEffectCount()) - return &effects[i]; - return NULL; + if (getEffectCount() <= i) + throw("Ability: out-of-bounds"); + return effects[i]; } -unsigned PokeGen::PokeMod::Ability::GetEffectByID(const unsigned _id) const +unsigned PokeGen::PokeMod::Ability::getEffectByID(const unsigned _id) const { - for (unsigned i = 0; i < GetEffectCount(); ++i) + for (unsigned i = 0; i < getEffectCount(); ++i) { - if (effects[i].GetId() == _id) + if (effects[i].getId() == _id) return i; } return UINT_MAX; } -unsigned PokeGen::PokeMod::Ability::GetEffectCount() const +unsigned PokeGen::PokeMod::Ability::getEffectCount() const { return effects.size(); } -const PokeGen::PokeMod::AbilityEffect* PokeGen::PokeMod::Ability::NewEffect(Ini* const ini) +PokeGen::PokeMod::AbilityEffect& PokeGen::PokeMod::Ability::newEffect() { - unsigned i = 0; - for (; (i < GetEffectCount()) && (GetEffectByID(i) != UINT_MAX); ++i) - ; - AbilityEffect newEffect(pokemod, i); - if (ini) - newEffect.ImportIni(*ini); - effects.append(newEffect); - return &effects[GetEffectCount() - 1]; + effects.append(AbilityEffect(pokemod, getNewId())); + return effects[getEffectCount() - 1]; } -bool PokeGen::PokeMod::Ability::DeleteEffect(const unsigned i) +PokeGen::PokeMod::AbilityEffect& PokeGen::PokeMod::Ability::newEffect(const QString& fname) { - if (i < GetEffectCount()) - { - effects.erase(effects.begin() + i); - return true; - } - return false; + effects.append(AbilityEffect(pokemod, fname, getNewId())); + return effects[getEffectCount() - 1]; +} + +PokeGen::PokeMod::AbilityEffect& PokeGen::PokeMod::Ability::newEffect(const AbilityEffect& e) +{ + effects.append(AbilityEffect(pokemod, e, getNewId())); + return effects[getEffectCount() - 1]; +} + +void PokeGen::PokeMod::Ability::deleteEffect(const unsigned i) +{ + if (getEffectCount() <= i) + throw("Ability: out-of-bounds"); + effects.removeAt(i); +} + +PokeGen::PokeMod::Ability& PokeGen::PokeMod::Ability::operator=(const Ability& rhs) +{ + if (this == &rhs) + return *this; + name = rhs.name; + effects.clear(); + for (unsigned i = 0; i < rhs.getEffectCount(); ++i) + newEffect(rhs.getEffect(i)); + return *this; } |
