/*!
* @file BaseStatusTable.h
* @brief 基礎能力値クラスのプロトタイプ
* @date 2014/03/05
* @author Deskull
* 2014 Sikabane Works.
*/

#pragma once

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

BOOST_CLASS_VERSION(BaseStatusTable, 1);

namespace Deeangband
{

	/*!
	* @class BaseStatusTable
	* @brief 基本ステータスクラス
	*/
	class BaseStatusTable
	{
	private:

		BASE_STATUS status[CS_MAX]; /*!<ステータス*/

		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_NVP(status);
			}
		}

	public:

		/*! 
		* @brief BaseStatusTableコンストラクタ
		* @param status 初期ステータス値テーブル
		*/
		BaseStatusTable::BaseStatusTable(BASE_STATUS status[CS_MAX]);

		/*! 
		* @brief BaseStatusTableコンストラクタ
		* @param bStr 腕力
		* @param bInt 知力
		* @param bWis 賢さ
		* @param bDex 器用
		* @param bCon 耐久
		* @param bCha 魅力
		*/
		BaseStatusTable::BaseStatusTable(BASE_STATUS bStr, BASE_STATUS bInt, BASE_STATUS bWis, BASE_STATUS bDex, BASE_STATUS bCon, BASE_STATUS bCha);

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

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

		/*! 
		* @brief 能力値の値を得る。
		* @param typ 得たい能力値のID
		*/
		const BASE_STATUS BaseStatusTable::Get(CREATURE_STATUS typ);

		/*! 
		* @brief 全能力値をまとめてセットする。
		* @param status 初期ステータス値テーブル
		* @return なし
		*/
		void BaseStatusTable::Set(BASE_STATUS status[CS_MAX]);

		/*! 
		* @brief 全能力値をまとめてセットする。
		* @param bStr 腕力
		* @param bInt 知力
		* @param bWis 賢さ
		* @param bDex 器用
		* @param bCon 耐久
		* @param bCha 魅力
		* @return なし
		*/
		void BaseStatusTable::Set(BASE_STATUS bStr, BASE_STATUS bInt, BASE_STATUS bWis, BASE_STATUS bDex, BASE_STATUS bCon, BASE_STATUS bCha);

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

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

	};

}