1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
/*************************************************************************
* Copyright © 2011-2020 Vincent Prat & Simon Nicolas
*
* 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, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*************************************************************************/
#ifndef HEADER_CHARACTER
#define HEADER_CHARACTER
#include <vector>
#include <Poco/DOM/Element.h>
#include "IOConfig.h"
//! Character (PC or NPC)
class Character
{
private:
std::string sName;
//! Short description of the character
std::string sShort;
//! Underlying vector
std::vector<std::string> vProperties;
public:
// iterator
class PropertyIterator: public std::vector<std::string>::const_iterator
{
public:
// constructor
PropertyIterator(const std::vector<std::string>::const_iterator &it);
};
/*!
* \brief Constructor
* \param name Character's name
* \param shortDescription Short description (typically player's name for PCs or group/race for NPCs)
*/
Character(const std::string &name, const std::string &shortDescription);
/*!
* \brief XML saver
* \param config IO configuration
* \param root Root of the XML subtree
*/
void toXML(const IOConfig &config, Poco::XML::Element *root) const;
/*!
* \brief XML loader
* \param config IO configuration
* \param root Root of the XML subtree
*/
void fromXML(const IOConfig &config, const Poco::XML::Element *root);
/*!
* \brief Getter of the name
* \return Character's name
*/
inline std::string name() const;
/*!
* \brief Setter of the name
* \param name New name
*/
inline void setName(const std::string &name);
/*!
* \brief Getter for the short description
* \return Short description of the character
*/
inline std::string shortDescription() const;
/*!
* \brief Setter for the short description
* \param shortDescription New short description
*/
inline void setShortDescription(const std::string &shortDescription);
/*!
* \brief Getter/setter of the properties
* \param index Index of the property
* \return property at the given index
*/
std::string& property(int index);
unsigned int propertyNumber() const;
// populating
void addProperty(const std::string &property, int position=-1);
/*!
* \brief Remove a property
* \param index Index of the property to remove
*/
void removeProperty(int index);
/*!
* \brief Move of a property
* \param source Index of the property to be moved
* \param destination Index where to move the property
* \return True if the move has been made, false otherwise
*/
bool moveProperty(int source, int destination);
void clearProperties();
// iterators
PropertyIterator begin() const;
PropertyIterator end() const;
};
std::string Character::name() const
{
return sName;
}
void Character::setName(const std::string &name)
{
sName = name;
}
std::string Character::shortDescription() const
{
return sShort;
}
void Character::setShortDescription(const std::string &shortDescription)
{
sShort = shortDescription;
}
#endif
|