/*!
* @file Coordinates.h
* @brief Coordinatesクラスとその他付随要素の定義
* @date 2014/01/26
* @author Deskull
* 2014 Sikabane Works.
*/

#pragma once

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

BOOST_CLASS_VERSION(Coordinates, 1);

namespace Deeangband
{

	/*! 
	* @class Coordinates
	* @brief ゲーム座標のクラス
	*/
	class Coordinates
	{
	private:
		int fx; //!< X座標
		int fy; //!< Y座標

		friend class boost::serialization::access;

		/*!
		* @brief クラスのシリアライズ化を設定する
		* @param archive アーカイブ化するクラスのアドレス
		* @param fileVersion ファイルバージョン
		* @return XMLSerializeテンプレート
		*/
		template<class Archive> void serialize(Archive &archive, const unsigned int version) 
		{
			if(version > 0)
			{
				archive & BOOST_SERIALIZATION_NVP(fx);
				archive & BOOST_SERIALIZATION_NVP(fy);
			}
		}

	public:

		/*! 
		* @brief Coordinatesクラスのコンストラクタ
		* @param x X座標
		* @param y Y座標
		*/
		Coordinates::Coordinates(int x, int y);

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

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

		/*
		* @brief 座標を設定する
		* @param x X座標
		* @param y Y座標
		*/
		void Coordinates::Set(int x, int y);

		/*
		* @brief X座標を得る
		* @return X座標
		*/
		int Coordinates::GetX(void);

		/*
		* @brief Y座標を得る
		* @return Y座標を得る
		*/
		int Coordinates::GetY(void);

		/*!
		* @brief +演算子による座標加算
		* @param plus 加算元
		*/
		Coordinates Coordinates::operator+(const Coordinates& plus);  

		/*!
		* @brief +=演算子による座標加算
		* @param plus 加算元
		*/
		Coordinates& Coordinates::operator+=(const Coordinates& plus);

	};

}
