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

#pragma once

#include "stdafx.h"
#include "Color.h"
#include "Deeangband.h"

namespace Deeangband
{

	/*! 
	* @class HaveSymbol
	* @brief シンボル保持抽象クラス
	*/
	class HaveSymbol
	{
	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)
			{
				archive & boost::serialization::make_nvp("Symbol", symbol);
				archive & boost::serialization::make_nvp("FColor", symbolColor);
				archive & boost::serialization::make_nvp("BColor", backColor);
				archive & boost::serialization::make_nvp("Tile", tileID);
			}
		}

	protected:

		SYMBOL symbol;     //!< シンボルキャラ
		Color symbolColor; //!< シンボルカラー
		Color backColor;   //!< 背景カラー
		ID tileID;         //!< タイルID

	public:

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

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

		/*! 
		* @brief HaveSymbolデータ初期化
		*/
		void HaveSymbol::WipeData(void);

		/*!
		* @brief シンボルを返す
		* @return シンボル
		*/
		SYMBOL HaveSymbol::GetSymbol(void);

		/*!
		* @brief シンボルカラーを返す
		* @return シンボルカラー
		*/
		Color HaveSymbol::GetSymbolColor(void);

		/*!
		* @brief 背景カラーを返す
		* @return 背景カラー
		*/
		Color HaveSymbol::GetBackColor(void);

		/*!
		* @brief 背景カラーを返す
		* @return 背景カラー
		*/
		ID HaveSymbol::GetTileID(void);
	};
}

BOOST_CLASS_VERSION(Deeangband::HaveSymbol, 10);
