/*!
* @file Square.h
* @brief ゲーム中のマスと付随要素のプロトタイプ
* @date 2013/12/11
* @author Deskull
* 2013 Sikabane Works.
*/

#pragma once

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

namespace Deeangband
{

	/*! 
	* @class Square
	* @brief マスのクラス
	*/
	class Square : public GameElement
	{
	private:
		TAG featureTag;   //!<地形タグ
		HP hitPoint;      //!<地形現HP
		HP maxPoint;      //!<地形最大HP

		friend class boost::serialization::access;
		template<class Archive> void serialize(Archive &archive, const unsigned int) 
		{
			archive & BOOST_SERIALIZATION_NVP(featureTag);
			archive & BOOST_SERIALIZATION_NVP(hitPoint);
			archive & BOOST_SERIALIZATION_NVP(maxPoint);
		}

	public:

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

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

		/*! 
		* @brief ダミーデータによる初期化
		* @return なし
		*/
		void Square::SetDammyData(void);

		/*!
		* @brief 所属するフロアのポインタを返す。
		*/
		Floor* getFloorPtr(void);

		/*!
		* @brief 対応する地形のタグを返す。
		*/
		TAG getFeatureTag(void);

		/*!
		* @brief 対応する地形のポインタを返す。
		*/
		Feature* getFeaturePtr(void);

		/*!
		* @brief 受けた効果を処理する
		*/
		bool Square::TakeEffect(Effect *effectPtr, POWER amount);

		/*!
		* @brief 現在の地形HPを返す
		* @return 現地形HP
		*/
		const HP Square::GetCurrentHP(void);

		/*!
		* @brief 最大の地形HPを返す
		* @return 最大地形HP
		*/
		const HP Square::GetMaxHP(void);

	};

}