/*!
- * @file Species.h
- * @brief \83Q\81[\83\80\92\86\82Ì\83N\83\8a\81[\83`\83\83\81[\8eí\95Ê\82Ì\83v\83\8d\83g\83^\83C\83v
- * @date 2014/02/01
- * @author Deskull
- * 2014 Sikabane Works.
- */
+* @file Species.h
+* @brief \83Q\81[\83\80\92\86\82Ì\83N\83\8a\81[\83`\83\83\81[\8eí\95Ê\82Ì\83v\83\8d\83g\83^\83C\83v
+* @date 2014/02/01
+* @author Deskull
+* 2014 Sikabane Works.
+*/
#include "stdafx.h"
#include "GameElement.h"
+#include "BaseStatusTable.h"
+#include "HaveSize.h"
+#include "HaveSymbol.h"
#pragma once
-/*!
- * @class Species
- * @brief \83N\83\8a\81[\83`\83\83\81[\8eí\95Ê\82Ì\83N\83\89\83X
- */
-class Species : public GameElement
+namespace Deeangband
{
-private:
+ /*!
+ * @class Species
+ * @brief \83N\83\8a\81[\83`\83\83\81[\8eí\95Ê\82Ì\83N\83\89\83X
+ */
+ class Species : public GameElement, public HaveSymbol, public HaveSize
+ {
+
+ private:
+
+ SOUL baseSoul; //!< \8aî\96{\83\\83E\83\8b\97Ê
+
+ FEED baseFeed; //!< \8aî\96{\8e \97{\92l
+ LEVEL divineLevel; //!< \8aî\96{\90_\90«\83\8c\83x\83\8b
+
+ TAG baseCamp; //!< \8aî\96{\8f\8a\91®\90w\89c
+
+ BaseStatusTable baseStatus; //!< \8aî\96{\83X\83e\81[\83^\83X
+
+ std::map<TAG, SKILL_EXP> skillExpList; //!< \83X\83L\83\8b\8co\8c±\92l\83\8a\83X\83g
+
+ NUMBER currentCreationNumber; //!< \8c»\8dÝ\90¶\90¬\90\94
+ NUMBER currentDeadNumber; //!< \8c»\8dÝ\8e\80\96S\90\94
+ NUMBER maxCreationNumber; //!< \8dÅ\91å\90¶\90¬\90\94
+
+ TAG baseFirstRace; //!< \8aî\96{\8eí\91°\83^\83O1
+ TAG baseSecondRace; //!< \8aî\96{\8eí\91°\83^\83O2
+
+ std::vector<TAG> authorityTags; //!< \8c \94\\83^\83O\94z\97ñ
+
+ template<class Archive> void serialize(Archive &archive, const unsigned int version)
+ {
+ if(version >= 0)
+ {
+ archive & BOOST_SERIALIZATION_BASE_OBJECT_NVP(GameElement);
+ archive & BOOST_SERIALIZATION_BASE_OBJECT_NVP(HaveSymbol);
+ archive & BOOST_SERIALIZATION_BASE_OBJECT_NVP(HaveSize);
+ archive & boost::serialization::make_nvp("BaseFirstRace", baseFirstRace);
+ archive & boost::serialization::make_nvp("BaseSecondRace", baseSecondRace);
+ archive & boost::serialization::make_nvp("BaseSoul", baseSoul);
+ archive & boost::serialization::make_nvp("BaseFeed", baseFeed);
+ archive & boost::serialization::make_nvp("DivineLevel", divineLevel);
+ archive & boost::serialization::make_nvp("BaseCamp", baseCamp);
+ archive & boost::serialization::make_nvp("BaseStatus", baseStatus);
+ }
+ }
+
+ public:
+
+ /*!
+ * @brief Species\83N\83\89\83X\83R\83\93\83X\83g\83\89\83N\83^
+ */
+ Species::Species(void);
+
+ /*!
+ * @brief Species\83N\83\89\83X\83f\83X\83g\83\89\83N\83^
+ */
+ Species::~Species(void);
+
+ /*!
+ * @brief \83f\81[\83^\8f\89\8aú\89»
+ */
+ void Species::WipeData(void);
+
+ /*!
+ * @brief \83N\83\8a\81[\83`\83\83\81[\8eí\95Ê\82Ì\8aî\96{\83\\83E\83\8b\97Ê\82ð\8bA\82·
+ * @return \83\\83E\83\8b\97Ê
+ */
+ SOUL Species::GetBaseSoul(void);
+
+ /*!
+ * @brief \83N\83\8a\81[\83`\83\83\81[\8eí\95Ê\82Ì\8aî\96{\8e \97{\93x\82ð\95Ô\82·
+ * @return \8aî\96{\8e \97{\93x
+ */
+ FEED Species::GetBaseFeed(void);
+
+ /*!
+ * @brief \83N\83\8a\81[\83`\83\83\81[\8eí\95Ê\82Ì\83X\83L\83\8b\8aî\96{\8co\8c±\92l\82ð\95Ô\82·
+ * @param tag \8eæ\93¾\82µ\82½\82¢\83X\83L\83\8b\82Ì\83^\83O
+ * @return \8aY\93\96\83X\83L\83\8b\82Ì\8aî\96{\8co\8c±\92l\81A\91S\82\82Ì\96¢\8co\8c±\82È\82ç\82Î0\82ð\95Ô\82·
+ */
+ SKILL_EXP Species::GetSkillExp(TAG tag);
+
+ /*!
+ * @brief \83N\83\8a\81[\83`\83\83\81[\8eí\95Ê\82Ì\8aî\96{\8f\8a\91®\90w\89c\82ð\95Ô\82·
+ * @return \8aî\96{\8f\8a\91®\90w\89c\82Ì\83^\83O
+ */
+ TAG Species::GetBaseCampTAG(void);
+
+ /*!
+ * @brief \8f\8a\8e\9d\8c \94\\82Ì\88ê\97\97\82ð\95Ô\82·
+ * @return \8f\8a\8e\9d\8c \94\\88ê\97\97\82Ìvector
+ */
+ std::vector<TAG> GetAuthorityTags(void);
-public:
+ /*!
+ * @brief \91æ\88ê\8eí\91°\82Ì\83^\83O\82ð\95Ô\82·
+ * @return \91æ\88ê\8eí\91°\82Ì\83^\83O
+ */
+ TAG GetFirstRaceTag(void);
- /*!
- * @brief Species\83N\83\89\83X\83R\83\93\83X\83g\83\89\83N\83^(GameElement\83\81\83\93\83o\91Î\89\9e)
- * @param id GameElement\82ÌID
- * @param TAG GameElement\82Ì\83^\83O
- * @param gameWorld \8f\8a\91®\8c³gameWorld\8eQ\8fÆ\83|\83C\83\93\83^
- */
- Species::Species(ID id, TAG tag, GameWorld *gameWorld);
+ /*!
+ * @brief \91æ\93ñ\8eí\91°\82Ì\83^\83O\82ð\95Ô\82·
+ * @return \91æ\93ñ\8eí\91°\82Ì\83^\83O
+ */
+ TAG GetSecondtRaceTag(void);
- Species::Species(void);
+ };
- Species::~Species(void);
+}
-};