/*!
* @file Color.h
* @brief 色定義のプロトタイプ
* @date 2014/03/27
* @author Deskull
* 2014 Sikabane Works.
*/

#pragma once

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

namespace Deeangband
{

	/*!
	* @class Color
	* @brief 色定義クラス
	*/
	class Color 
	{
	private:

		int r; //!<赤
		int g; //!<緑
		int b; //!<青
		int a; //!<アルファチャンネル

		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("Red", r);
				archive & boost::serialization::make_nvp("Green", g);
				archive & boost::serialization::make_nvp("Blue", b);
				archive & boost::serialization::make_nvp("Alpha", a);
			}
		}

	public:

		/*! 
		* @brief Colorクラスコンストラクタ
		* @param r 赤
		* @param g 緑
		* @param b 青
		* @param a アルファチャンネル
		*/
		Color::Color(int r, int g, int b, int a);

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

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

		/*! 
		* @brief 色のR値を返す
		* @return 色のR値
		*/
		int Color::GetRed(void);

		/*! 
		* @brief 色のG値を返す
		* @return 色のG値
		*/
		int Color::GetGreen(void);

		/*! 
		* @brief 色のB値を返す
		* @return 色のB値
		*/
		int Color::GetBlue(void);

		/*! 
		* @brief 色のアルファ値を返す
		* @return 色のアルファ値
		*/
		int Color::GetAlpha(void);

		/*! 
		* @brief 色値をセットする
		* @return なし
		*/
		void Color::SetColor(int r, int g, int b, int a);

	};
}

BOOST_CLASS_VERSION(Deeangband::Color, 10);
