/*!
* @file HaveHp.h
* @brief HP保持抽象クラスのプロトタイプ宣言
* @date 2014/06/11
* @author Deskull
* 2014 Sikabane Works.
*/

#pragma once

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

namespace Deeangband
{

	/*! 
	* @class HaveHp
	* @brief HP保持抽象クラス
	*/
	class HaveHp
	{
	private:

		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)
			{
			}
		}

	protected:
		HP currentHp;     //!< 現在のHP
		HP maxHp;         //!< 現在の最大HP
		HP maxMaxHp;      //!< 平常の最大HP

	public:

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

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

		/*!
		* @brief 現HPを返す
		* @return 現HP
		*/
		HP HaveHp::GetCurHP(void);

		/*!
		* @brief 現最大HPを返す
		* @return 現最大HP
		*/
		HP HaveHp::GetMaxHP(void);

		/*!
		* @brief 通常最大HPを返す
		* @return 通常最大HP
		*/
		HP HaveHp::GetNorMaxHP(void);

		/*!
		* @brief 現HPを増減させる
		* @param amount 増減HP量
		* @return なし
		*/
		void HaveHp::CalcHP(HP amount);

		/*!
		* @brief 現HPを設定する
		* @param amount 設定HP量
		* @return なし
		*/
		void HaveHp::SetHP(HP amount);

		/*!
		* @brief 現在最大HPを増減させる
		* @param amount 増減現在最大HP量
		* @return なし
		*/
		void HaveHp::CalcMaxHP(HP amount);

		/*!
		* @brief 現在最大HPを設定する
		* @param amount 設定現在最大HP量
		* @return なし
		*/
		void HaveHp::SetMaxHP(HP amount);

		/*!
		* @brief 通常最大HPを増減させる
		* @param amount 増減通常最大HP量
		* @return なし
		*/
		void HaveHp::CalcMaxMaxHP(HP amount);

		/*!
		* @brief 通常最大HPを設定する
		* @param amount 設定通常最大HP量
		* @return なし
		*/
		void HaveHp::SetMaxMaxHP(HP amount);

	};
}

BOOST_CLASS_VERSION(Deeangband::HaveHp, 10);
