/* * Copyright 2008 Ben Boeckel * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ // Header include #include "SpeciesWrapper.h" // Sigscript includes #include "SigmodWrapper.h" #include "SpeciesAbilityWrapper.h" #include "SpeciesItemWrapper.h" #include "SpeciesMoveWrapper.h" Sigscript::SpeciesWrapper* Sigscript::SpeciesWrapper::create(const Sigmod::Species* species, SigmodWrapper* parent) { Signature sig = Signature(parent, Subsignature(species->className(), species->id())); if (!m_instances.contains(sig)) m_instances[sig] = new SpeciesWrapper(species, parent); return qobject_cast(m_instances[sig]); } Sigscript::SpeciesWrapper::SpeciesWrapper(const Sigmod::Species* species, SigmodWrapper* parent) : ObjectWrapper(species, parent), m_species(species) { } Sigcore::Hat Sigscript::SpeciesWrapper::abilityHat() { Sigcore::Hat hat; for (int i = 0; i < abilityCount(); ++i) hat.add(ability(i)->ability(), ability(i)->weight()); return hat; } Sigcore::Hat Sigscript::SpeciesWrapper::itemHat() { Sigcore::Hat hat; for (int i = 0; i < itemCount(); ++i) hat.add(item(i)->item(), item(i)->weight()); return hat; } Sigmod::Species::Style Sigscript::SpeciesWrapper::growth(const QString& name) const { if (name == "Fluctuating") return Sigmod::Species::Fluctuating; else if (name == "Fading") return Sigmod::Species::Fading; else if (name == "Slow") return Sigmod::Species::Slow; else if (name == "Normal") return Sigmod::Species::Normal; else if (name == "Fast") return Sigmod::Species::Fast; else if (name == "Erratic") return Sigmod::Species::Erratic; return QVariant(-1).value(); } QString Sigscript::SpeciesWrapper::name() const { return m_species->name(); } int Sigscript::SpeciesWrapper::baseStat(const Sigmod::Stat stat) const { return m_species->baseStat(stat); } int Sigscript::SpeciesWrapper::effortValue(const Sigmod::Stat stat) const { return m_species->effortValue(stat); } Sigmod::Species::Style Sigscript::SpeciesWrapper::growth() const { return m_species->growth(); } int Sigscript::SpeciesWrapper::experienceValue() const { return m_species->experienceValue(); } int Sigscript::SpeciesWrapper::catchValue() const { return m_species->catchValue(); } int Sigscript::SpeciesWrapper::maxHoldWeight() const { return m_species->maxHoldWeight(); } Sigcore::Fraction Sigscript::SpeciesWrapper::runChance() const { ALLOW_OVERRIDE_SO(species, Sigcore::Fraction, runChance); return m_species->runChance(); } Sigcore::Fraction Sigscript::SpeciesWrapper::fleeChance() const { ALLOW_OVERRIDE_SO(species, Sigcore::Fraction, fleeChance); return m_species->fleeChance(); } Sigcore::Fraction Sigscript::SpeciesWrapper::itemChance() const { ALLOW_OVERRIDE_SO(species, Sigcore::Fraction, itemChance); return m_species->itemChance(); } int Sigscript::SpeciesWrapper::encyclopediaNumber() const { return m_species->encyclopediaNumber(); } int Sigscript::SpeciesWrapper::weight() const { return m_species->weight(); } int Sigscript::SpeciesWrapper::height() const { return m_species->height(); } QString Sigscript::SpeciesWrapper::encyclopediaEntry() const { return m_species->encyclopediaEntry(); } Sigscript::SpriteWrapper* Sigscript::SpeciesWrapper::frontMaleSprite() { return sigmod()->sprite(m_species->frontMaleSprite()); } Sigscript::SpriteWrapper* Sigscript::SpeciesWrapper::backMaleSprite() { return sigmod()->sprite(m_species->backMaleSprite()); } Sigscript::SpriteWrapper* Sigscript::SpeciesWrapper::frontFemaleSprite() { return sigmod()->sprite(m_species->frontFemaleSprite()); } Sigscript::SpriteWrapper* Sigscript::SpeciesWrapper::backFemaleSprite() { return sigmod()->sprite(m_species->backFemaleSprite()); } Sigscript::SkinWrapper* Sigscript::SpeciesWrapper::skin() { return sigmod()->skin(m_species->skin()); } Sigcore::Fraction Sigscript::SpeciesWrapper::genderFactor() const { return m_species->genderFactor(); } int Sigscript::SpeciesWrapper::eggSpecies() const { ALLOW_OVERRIDE_SO(species, int, eggSpecies); return m_species->eggSpecies(); } int Sigscript::SpeciesWrapper::eggSteps() const { return m_species->eggSteps(); } QList Sigscript::SpeciesWrapper::types() { QList typeIds = m_species->type(); QList types; foreach (int id, typeIds) types.append(sigmod()->type(id)); return types; } QList Sigscript::SpeciesWrapper::eggGroups() { QList eggGroupIds = m_species->eggGroup(); QList eggGroups; foreach (int id, eggGroupIds) eggGroups.append(sigmod()->eggGroup(id)); return eggGroups; } Sigcore::Script Sigscript::SpeciesWrapper::evolution() const { return m_species->evolution(); } Sigscript::SpeciesAbilityWrapper* Sigscript::SpeciesWrapper::ability(const int index) { return SpeciesAbilityWrapper::create(m_species->ability(index), this); } int Sigscript::SpeciesWrapper::abilityCount() const { return m_species->abilityCount(); } Sigscript::SpeciesItemWrapper* Sigscript::SpeciesWrapper::item(const int index) { return SpeciesItemWrapper::create(m_species->item(index), this); } int Sigscript::SpeciesWrapper::itemCount() const { return m_species->itemCount(); } Sigscript::SpeciesMoveWrapper* Sigscript::SpeciesWrapper::move(const int index) { return SpeciesMoveWrapper::create(m_species->move(index), this); } int Sigscript::SpeciesWrapper::moveCount() const { return m_species->moveCount(); }