/*!
* @file CreatureTemplate.h
* @brief CreatureTemplateクラスとその他付随要素のプロトタイプ
* @date 2013/12/11
* @author Deskull
* 2013 Sikabane Works.
*/

#pragma once

#include "stdafx.h"
#include "Deeangband.h"

#include "BaseStatusTable.h"
#include "GameElement.h"

namespace Deeangband
{

	/*!
	* @class CreatureTemplate
	* @brief 種族、職業、選択、特性など、クリーチャーに包括的修正を与える要素をまとめる基本クラス
	*/
	class CreatureTemplate : GameElement
	{
	private:

		BaseStatusTable statusPlus; /*!<ステータス修正*/

		/*!
		* @brief クラスのシリアライズ化を設定する
		* @param archive アーカイブ化するクラスのアドレス
		* @param fileVersion ファイルバージョン
		* @return XMLSerializeテンプレート
		*/
		template<class Archive> void serialize(Archive &archive, const unsigned int fileVersion) 
		{
			archive & BOOST_SERIALIZATION_NVP(statusPlus);
		}

	public:

		/*! 
		* @brief CreatureTemplateクラスコンストラクタ(GameElementメンバ対応)
		* @param id GameElementのID
		* @param tag GameElementのタグ
		* @param gameWorld 所属元gameWorld参照ポインタ
		*/
		CreatureTemplate::CreatureTemplate(ID id, TAG tag, GameWorld *gameWorld);

		/*! 
		* @brief CreatureTemplateクラスコンストラクタ(デフォルト値入力)
		*/
		CreatureTemplate::CreatureTemplate(void);

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

		/*! 
		* @brief クラスの基本ステータス修正を返す
		* @return 基本ステータス修正構造体の参照ポインタ
		*/
		const BaseStatusTable* CreatureTemplate::GetStatusAdj(void);
	};

}