/////////////////////////////////////////////////////////////////////////////
// Name: pokemod/Ability.h
// Purpose: Define an ability that species can possess to add extra
// dynamics to the battle system
// Author: Ben Boeckel
// Modified by: Ben Boeckel
// Created: Wed Feb 28 21:41:10 2007
// Copyright: ©2007-2008-2008 Ben Boeckel and Nerdy Productions
// Licence:
// 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 .
/////////////////////////////////////////////////////////////////////////////
#ifndef __POKEMOD_ABILITY__
#define __POKEMOD_ABILITY__
#include
#include
#include "../general/Exception.h"
#include "Object.h"
#include "AbilityEffect.h"
class Pokemod;
class Ability : public Object
{
public:
Ability(const Pokemod& par, const unsigned _id);
Ability(const Pokemod& par, const Ability& a, const unsigned _id);
Ability(const Pokemod& par, const QString& fname, const unsigned _id = UINT_MAX);
void load(const QString& fname, const unsigned _id = UINT_MAX) throw(Exception);
void save() const throw(Exception);
void setName(const QString& n);
QString getName() const;
const AbilityEffect& getEffect(const unsigned i) const throw(IndexException);
AbilityEffect& getEffect(const unsigned i) throw(IndexException);
const AbilityEffect& getEffectByID(const unsigned i) const throw(IndexException);
AbilityEffect& getEffectByID(const unsigned i) throw(IndexException);
unsigned getEffectIndex(const unsigned _id) const;
unsigned getEffectCount() const;
AbilityEffect& newEffect();
AbilityEffect& newEffect(const QString& fname);
AbilityEffect& newEffect(const AbilityEffect& a);
void deleteEffect(const unsigned i) throw(IndexException);
Ability& operator=(const Ability& rhs);
private:
bool validate() const;
unsigned getNewId() const;
QString name;
QList effects;
};
#endif