/*!
 * @file Lore.h
 * @brief 記憶情報のプロトタイプ
 * @date 2015/01/04
 * @author Deskull
 * 2015 Sikabane Works.
 */

#pragma once

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

namespace Deeangband
{
	/*! 
	 * @class Lore
	 * @brief 記憶情報のクラス
	 * @details
	 * <h1>概要</h1>
	 * <p>Loreはクリーチャー個体あるいは集団が持つ記憶情報を定義したクラスである。</p>
	 */
	class Lore
	{
	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("Name", name);
				archive & boost::serialization::make_nvp("Description", description);
			}
		}

		std::map<ID, std::map<int, std::map<int, int>>> squareMemory;

	public:

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

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

		/*! 
		 * @brief Loreクラスのデータ消去
		 * @return なし
		 */
		void Lore::WipeData(void);

		/*!
		 * @brief フィールド記憶を追加する。
		 * @param floorID 記憶するフロアID
		 * @param x 記憶x座標
		 * @param y 記憶y座標
		 * @return なし
		 */
		void Lore::PutFieldLore(ID floorID, int x, int y);

		/*!
		 * @brief フィールド記憶を返す。
		 * @param floorID 記憶するフロアID
		 * @param x 記憶x座標
		 * @param y 記憶y座標
		 * @return 記憶度数
		 */
		int Lore::GetFieldLore(ID floorID, int x, int y);


	};

}

BOOST_CLASS_VERSION(Deeangband::Lore, 10);
