/*!
*  @file Floor.h
*  @brief ゲーム中の床地形情報のプロトタイプ
*  @date 2014/02/20
*  @author Deskull
*  2014 Sikabane Works.
*/

#pragma once

#include "stdafx.h"
#include "GameElement.h"
#include "Color.h"
#include "HaveSymbol.h"
#include "HaveHp.h"

namespace Deeangband
{

	/*!
	 * @class Floor
	 * @brief 地形情報のクラス
	 */
	class Floor : public GameElement, public HaveSymbol, public HaveHp
	{
	private:


		friend class boost::serialization::access;

		bool isWall; //! 壁地形であるかどうかの判定 

		/*!
		 * @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("Name", name);
				archive & boost::serialization::make_nvp("TileID", tileID);
				archive & boost::serialization::make_nvp("Symbol", symbol);
				archive & boost::serialization::make_nvp("SymbolColor", symbolColor);
				archive & boost::serialization::make_nvp("BackColor", backColor);
				if(version >= 11) archive & boost::serialization::make_nvp("IsWall", isWall);
			}
		}

	public:

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

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

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

		bool Floor::IsWall(); //! @brief 壁地形か否かを返す

	};

}

BOOST_CLASS_VERSION(Deeangband::Floor, 11);
