/*!
* @file SavingTable.h
* @brief ゲーム中のセービングテーブルのプロトタイプ
* @date 2013/12/11
* @author Deskull
* 2013 Sikabane Works.
*/

#pragma once

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

namespace Deeangband
{

	/*!
	* @class SavingTable
	* @brief セービングテーブルクラス
	*/
	class SavingTable
	{
	private:

		AC armor;    /*!< 装甲セーブ値 */
		EV evasion;  /*!< 回避セーブ値 */
		VO volition; /*!< 意思セーブ値 */

		friend class boost::serialization::access;
		template<class Archive> void serialize(Archive &archive, const unsigned int) 
		{
			archive & BOOST_SERIALIZATION_NVP(armor);
			archive & BOOST_SERIALIZATION_NVP(evasion);
			archive & BOOST_SERIALIZATION_NVP(volition);
		}

	public:

		/*! 
		* @brief SavingTableクラスのコンストラクタ
		* @param armor 装甲セービング値
		* @param evasion 回避セービング値
		* @param volition 意思セービング値
		*/
		SavingTable::SavingTable(BASE_STATUS armor, BASE_STATUS evasion, BASE_STATUS volition);

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

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

		void SavingTable::Set(BASE_STATUS armor, BASE_STATUS evasion, BASE_STATUS volition);

		const AC SavingTable::GetArmor(void);

		const EV SavingTable::GetEvasion(void);

		const VO SavingTable::GetVolition(void);

		/*!
		* @brief +=演算子による座標加算
		* @param obj 加算元
		*/
		SavingTable& SavingTable::operator+=(const SavingTable& obj);

	};

}

BOOST_CLASS_VERSION(Deeangband::SavingTable, 10);
