/*!
 * @file Discipline.h
 * @brief 修養のプロトタイプ宣言
 * @date 2014/03/04
 * @author Deskull
 * 2014 Sikabane Works.
 */

#pragma once

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

/*!
 * @brief 修養属性の列挙体
 */
typedef enum DISCIPLINE_TYPE
{
	DISCIPLINE_TYPE_GOOD,    //!< 修養属性:善
	DISCIPLINE_TYPE_EVIL,    //!< 修養属性:悪
	DISCIPLINE_TYPE_ORDER,   //!< 修養属性:秩序
	DISCIPLINE_TYPE_CHAOS,   //!< 修養属性:混沌
	DISCIPLINE_TYPE_BALANCE, //!< 修養属性:天秤
	MAX_DISCIPLINE_TYPES,    //!< 修養属性数
} DISCIPLINE_TYPE;


/*! 
 * @class Discipline
 * @brief 修養のクラス
 */
class Discipline
{
private:
	int disciplinePoint[MAX_DISCIPLINE_TYPES];

public:

	/*! 
	 * @brief Disciplineクラスのコンストラクタ
	 * @param good 善の修養値
	 * @param evil 悪の修養値
	 * @param order 秩序の修養値
	 * @param chaos 混沌の修養値
	 * @param balance 天秤の修養値
	 */
	Discipline::Discipline(int good, int evil, int order, int chaos, int balance);

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

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

	/*! 
	 * @brief 修養値を取得する
	 * @param typ 修養値の種別
	 * @return 修養値
	 */
	const DISCIPLINE_POINT Discipline::GetPoint(DISCIPLINE_TYPE typ);

	/*! 
	 * @brief 修養ランクを取得する
	 * @param typ 修養値の種別
	 * @return 修養ランク
	 */
	const DISCIPLINE_POINT Discipline::GetRank(DISCIPLINE_TYPE typ);

	/*! 
	 * @brief 修養値を設定する
	 * @param typ 修養値の種別
	 * @param point 代入値
	 * @return なし
	 */
	void Discipline::SetPoint(DISCIPLINE_TYPE typ, int point);

	/*! 
	 * @brief 修養値を設定する
	 * @param good 善の修養値
	 * @param evil 悪の修養値
	 * @param order 秩序の修養値
	 * @param chaos 混沌の修養値
	 * @param balance 天秤の修養値
	 * @return なし
	 */
	void Discipline::SetPoint(int good, int evil, int order, int chaos, int balance);

	/*! 
	 * @brief 修養値を加減算する
	 * @param typ 修養値の種別
	 * @param point 加算値
	 * @return なし
	 */
	void Discipline::PlusPoint(DISCIPLINE_TYPE typ, int point);

	/*!
	 * @brief +演算子による修養値全加算
	 * @param plus 加算元
	 */
	Discipline Discipline::operator+(const Discipline& plus);  

	/*!
	 * @brief +=演算子による修養値全加算
	 * @param plus 加算元
	 */
	Discipline& Discipline::operator+=(const Discipline& plus);
};
