/*!
* @file Race.h
* @brief ゲーム中の種族情報のプロトタイプ
* @date 2014/03/01
* @author Deskull
* 2014 Sikabane Works.
*/

#include "stdafx.h"
#include "BaseStatusTable.h"
#include "CreatureTemplate.h"
#include "Deeangband.h"
#include "GameElement.h"

namespace Deeangband
{

	/*! 
	* @class Race
	* @brief 種族情報のクラス
	* @details
	* <h1>概要</h1>
	* <p>種族(race)は、クリーチャーの最も上位な種類分けの一つとして、特性(trait)の付与やステータス修正を与える。</p>
	* <ul><li>種族の適用の形には純潔種族、混血種族、変異種族の三種がある。</li></ul>
	* <h2>変愚蛮怒からの変化</h2>
	* <ul>
	* <li>プレイヤーだけでなく、モンスター自身が種族を持つようになった。
	* <ul>
	* <li>それに伴い種族にクイスルスルグ、モルドなど完全に人型を逸脱した種族も追加されている。プレイアブルにするかは検討中。</li>
	* </ul>
	* </li>
	* <li>アンデッド系ないし人造種族は独立した種族にするのではなく、前身の種族に「吸血鬼」「スケルトン」「ゴーレム」「アンドロイド」などの「付与特性」を与える。
	* <ul>
	* <li>種族名称はそれに伴い「元ドワーフの吸血鬼」「エルフ型アンドロイド」などになる。</li>
	* </ul>
	* </li>
	* </ul>
	* <h2>適用分類</h2>
	* <h3>純血種族</h3>
	* <p>その種族の純潔であることを指す。そのまま「純血修正」が付与される。</p>
	* <h3>混血種族</h3>
	* <p>二種類の種族の混血であることを指す。双方の種族が持つ「混血修正」の上乗せ、ないし平均値が適用される。</p>
	* <ul>
	* <li>全種族のかけ合わせができる訳ではない。</li>
	* <li>一部の有名どころの混血種族には独自の名前が与えられる。（特別な特性付加も検討するかも知れないが現状は特に考えていない）</li>
	* </ul>
	* <h3>変異種族</h3>
	* <p>ビーストマンのレベル経過やカオス属性攻撃の副作用などにより、その種族的特性が副次的に付加されたことを指す。複数の種族の「混血修正」の上乗せ、ないし平均値が適用される。</p>
	*/
	class Race : public CreatureTemplate
	{
	private:

		BaseStatusTable pureStatusPlus; /*!<純血ステータス修正*/
		BaseStatusTable halfStatusPlus; /*!<混血ステータス修正*/

		friend class boost::serialization::access;

		/*!
		* @brief クラスのシリアライズを設定する
		* @param archive アーカイブ化するクラスのアドレス
		* @param version ファイルバージョン
		* @return XMLSerializeテンプレート
		*/
		template<class Archive> void serialize(Archive &archive, const unsigned int version) 
		{
			if(version > 0)
			{
				archive & boost::serialization::make_nvp("Name", name);
				archive & boost::serialization::make_nvp("PureStatusPlus", pureStatusPlus);
				archive & boost::serialization::make_nvp("HalfStatusPlus", halfStatusPlus);
			}
		}

	public:

		/*! 
		* @brief Raceクラスコンストラクタ
		*/
		Race::Race(void);

		/*! 
		* @brief Raceクラスデストラクタ
		*/
		Race::~Race(void);

		/*! 
		* @brief Raceクラスのデータ消去
		* @return なし
		*/
		void Race::WipeData(void);

	};

}

BOOST_CLASS_VERSION(Deeangband::Race, 10);
