/*!
* @file Door.h
* @brief ゲーム中のトラップのプロトタイプ定義
* @date 2014/01/26
* @author Deskull
* 2014 Sikabane Works.
*/

#pragma once

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

namespace Deeangband
{
	//! ドアの状態を示す列挙子
	enum DOOR_STATUS
	{
		DOOR_STATUS_OPEN,   //!<開いている
		DOOR_STATUS_CLOSE,  //!<閉じている
		DOOR_STATUS_LOCKED, //!<施錠されている
		DOOR_STATUS_BROKEN, //!<壊れている
	};

	/*! 
	* @class Door
	* @brief ドアのクラス
	* @details
	* <H1>概要</H1>
	* Trapクラスは、フロアに配置されるドアの実体を定義する。
	* <H2>ステータス要素</H2>
	* ドアは以下のステータス要素を持っている。
	* <ul>
	* <li>配置座標/Position</li>
	* <li>状態/Status</li>
	* </ul>
	*/
	class Door : public GameElement
	{
	private:

		Coordinates position; //!<所在座標
		DOOR_STATUS status; //!<ドアの状態

		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("Position", position);
				archive & boost::serialization::make_nvp("Status", status);
			}
		}

	public:

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

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

}

BOOST_CLASS_VERSION(Deeangband::Door, 10);
