/*!
* @file TrapBase.h
* @brief ゲーム中のトラップベースのプロトタイプ
* @date 2014/02/01
* @author Deskull
* 2014 Sikabane Works.
*/

#pragma once

#include "stdafx.h"
#include "GameElement.h"

namespace Deeangband
{

	/*!
	* @class TrapBase
	* @brief トラップベースのクラス
	* @details
	* <H1>概要</H1>
	* TrapBaseクラスは、トラップの種類を定義する。この情報を元に実際にフロア内で生成されるのがTrapクラスである。
	* <H2>ステータス要素</H2>
	* トラップベースは以下のステータス要素を持っている。
	* <ul>
	* <li>最低生成階層/MinDepth</li>
	* <li>最大生成階層/MaxDepth</li>
	* <li>生成レアリティ/Rarity</li>
	* <li>基本耐久度/BaseHP</li>
	* <li>基本解除難度/BaseDifficulty</li>
	* </ul>
	*/
	class TrapBase : public GameElement
	{
		friend class boost::serialization::access;
		DEPTH minDepth; //!<生成最低階層
		DEPTH maxDepth; //!<生成最大階層
		RARITY rarity;  //!<生成レアリティ
		HP baseHP; //!<基本耐久度
		POWER baseDifficulty; //!<基本解除難度

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

	private:

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

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

}

BOOST_CLASS_VERSION(Deeangband::TrapBase, 10);
