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

#pragma once

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

namespace Deeangband
{

	/*! 
	* @class HaveGameTime
	* @brief ゲームターン保持抽象クラス
	*/
	class HaveGameTime
	{
	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)
			{
			}
		}

	protected:

		GAME_TIME time;   //!< 総タイム数
		TURN turn;        //!< 総ターン数
		ACTION_WAIT wait; //! 行動ウェイト値

	public:

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

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

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

		/*!
		* @brief ゲームタイム数を返す
		* @return ゲームタイム数
		*/
		GAME_TIME HaveGameTime::GetGameTime(void);

		/*!
		* @brief ゲームターン数を返す
		* @return ゲームターン数
		*/
		TURN HaveGameTime::GetTurn(void);

		/*!
		* @brief ウェイト値を返す
		* @return ウェイト値
		*/
		TURN HaveGameTime::GetWait(void);

		/*!
		 * @brief ウェイト値を加算する
		 * @param plusWait 加算するウェイト値
		 * @param normalRand 正規乱数を適用するならば TRUE
		 * @return なし
		 */
		void HaveGameTime::PlusWait(ACTION_WAIT plusWait, bool normalRand);

		/*!
		 * @brief ターン時更新定期処理を行う
		 * @return なし
		 */
		virtual PLAY_EXIT_CODE HaveGameTime::TurnProcess(void) {return PLAY_EXIT_NONE;};

		/*!
		 * @brief ゲーム時間更新定期処理を行う
		 * @return なし
		 */
		virtual PLAY_EXIT_CODE HaveGameTime::TimeProcess(void) {return PLAY_EXIT_NONE;};


	};

}

BOOST_CLASS_VERSION(Deeangband::HaveGameTime, 10);
