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

#pragma once

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

namespace Deeangband
{

	/*!
	* @class Feature
	* @brief 地形情報のクラス
	*/
	class Feature : public GameElement
	{
	private:
		std::string name; /*!< 地形の名前 */
		ID tileID; /*!< 地形タイルID */
		char symbol; /*!< 地形タイルシンボル */
		Color symColor; /*!< 地形シンボルカラー */
		Color backColor; /*!< 地形背景カラー */

		friend class boost::serialization::access;

		/*!
		* @brief クラスのシリアライズ化を設定する
		* @param archive アーカイブ化するクラスのアドレス
		* @param fileVersion ファイルバージョン
		* @return XMLSerializeテンプレート
		*/
		template<class Archive> void serialize(Archive &archive, const unsigned int fileVersion) 
		{
			archive & BOOST_SERIALIZATION_NVP(name);
			archive & BOOST_SERIALIZATION_NVP(tileID);
			archive & BOOST_SERIALIZATION_NVP(symbol);
			archive & BOOST_SERIALIZATION_NVP(symColor);
			archive & BOOST_SERIALIZATION_NVP(backColor);
		}

	public:

		/*! 
		* @brief Featureクラスコンストラクタ(GameElementメンバ対応)
		* @param id GameElementのID
		* @param tag GameElementのタグ
		* @param gameWorld 所属元gameWorld参照ポインタ
		*/
		Feature::Feature(ID id, TAG tag, GameWorld *gameWorld);

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

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

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

		/*! 
		* @brief タイルIDを返す
		* @brief タイルID
		*/
		ID Feature::GetTileID(void);

		/*! 
		* @brief 地形記号を返す
		* @return 地形記号
		*/
		ID Feature::GetSymbol(void);

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

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

	};

}