/*!
* @file ItemBase.h
* @brief ゲーム中のアイテムベースのプロトタイプ
* @date 2014/02/01
* @author Deskull
* 2014 Sikabane Works.
*/

#pragma once

#include "stdafx.h"
#include "Dice.h"
#include "ItemTemplate.h"
#include "GameElement.h"
#include "SavingTable.h"
#include "HaveSymbol.h"

BOOST_CLASS_VERSION(ItemBase, 1);

namespace Deeangband
{

	/*!
	* @class ItemBase
	* @brief アイテムベースのクラス
	* @details
	* <H1>概要</H1>
	* ItemBaseクラスは、アイテムの基本種別を定義する
	* <H2>ステータス要素</H2>
	* ベースアイテムは以下のステータス要素を持っている。
	* <ul>
	* <li>ダメージダイス/DamageDice</li>
	* <li>重量/Weight</li>
	* <li>基本セービング修正/BaseSaving</li>
	* <li>追加セービング修正/PlusSaving</li>
	* </ul>
	*/
	class ItemBase : public ItemTemplate
	{
	private:
		Dice baseDamage; //!< ベースダメージのダイス
		WEIGHT weight; //!< アイテムの重量
		SavingTable baseSaving; //!< 基本セービング修正
		SavingTable plusSaving; //!< 追加セービング修正

		friend class boost::serialization::access;
		template<class Archive> void serialize(Archive &archive, const unsigned int) 
		{
			archive & boost::serialization::make_nvp("Name", name);
			archive & boost::serialization::make_nvp("BaseDamage", baseDamage);
			archive & boost::serialization::make_nvp("Weight", weight);
			archive & boost::serialization::make_nvp("BaseSaving", baseSaving);
			archive & boost::serialization::make_nvp("PlusSaving", plusSaving);
		}

	public:

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

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

		/*! 
		* @brief アイテムの重量を返す
		* @return アイテムの重量
		*/
		WEIGHT ItemBase::GetWeight(void);

		/*! 
		* @brief アイテムのダメージダイスを返す
		* @return アイテムのダメージダイス
		*/
		Dice ItemBase::GetDamageDice(void);

		/*! 
		* @brief ダミーデータによる初期化
		* @return なし
		*/
		void ItemBase::WipeData(void);

		/*!
		* @brief XMLシリアライズによるゲームデータ保存処理
		* @return なし
		*/
		void ItemBase::XMLSave(std::string filename);

	};

}