/*!
* @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:

		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("StatusPlus", 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 Startingのデータ消去
		* @return なし
		*/
		void StartingClass::WipeData(void);

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

	};

}

BOOST_CLASS_VERSION(Deeangband::StartingClass, 10);
