/*!
* @file StartingClass.h
* @brief ゲーム中の職業情報のプロトタイプ
* @date 2014/03/01
* @author Deskull
* 2014 Sikabane Works.
*/

#include "stdafx.h"
#include "CreatureTemplate.h"
#include "Deeangband.h"
#include "GameElement.h"

namespace Deeangband
{

	/*! 
	* @class StartingClass
	* @brief 職業情報のクラス
	* @details
	* <h1>概要</h1>
	* <ul>
	* <li>職業(class)は、種族(race)の中でも社会性を持っている種族が選択できるステータスである。職業に応じて特性の付加とステータスの修正がかかる。</li>
	* <li>知能が著しく低い種族（特性のSTUPID持ちあたりが妥当か）は職業を持たない。</li>
	* </ul>
	* <h2>変愚蛮怒からの変化</h2>
	* <ul>
	* <li>変愚では各職業限定になっていた各種の特殊な技能が、スキル制に変化したことにより他の職業でも補助的に利用できるようになる。</li>
	* <li>ただし職業毎にスキルの修正率（変愚でマーシャルアーツ、二刀流、乗馬三種のスキルが設定されていたのに近い）が定められており、
	* その素質に反した成長を行うとほとんどのケースで手詰まりする。</li>
	* 所謂再訓練のシステムは導入予定ではあるが、持ち直すための多大な手間はペナルティになる。</li>
	* <li>知性のある種族ならばあらゆる職業を選択できるのは変わらないが、種族毎に得意な職業があり、それを選ぶと職業によるステータス修正にボーナスが加わる。</li>
	* <li>NPC専用職業が追加されている（平民、兵士など）</li>
	* </ul>
	*/
	class StartingClass : public CreatureTemplate
	{
	private:

		std::string name;
		BASE_STATUS statusPlus[CS_MAX]; /*!<ステータス修正*/

		/*!
		* @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(statusPlus);
		}

	public:

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

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

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

		/*! 
		* @brief 出自名を返す
		* @return 出自名
		*/
		NAME StartingClass::GetName(void);

	};

}