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

#pragma once

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

/*!
 * @brief クリーチャーの基礎能力値6種の列挙体
 */
enum CREATURE_STATUS
{
	CS_STR, /*!<腕力*/
	CS_INT, /*!<知力*/
	CS_WIS, /*!<賢さ*/
	CS_DEX, /*!<器用*/
	CS_CON, /*!<耐久*/
	CS_CHA, /*!<魅力*/
	CS_MAX  /*!<総数:6*/
};

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

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

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& obj);

};
