#pragma once

//! @file Mix/Geometry/OBB.h
//! @brief OBBクラスインクルードファイル

namespace Mix{ namespace Geometry{

	//! @class OBB
	//! @brief OBBクラス
	class _MIX_DLL_API OBB
	{
	public:
		//! @enum AXIS
		//! @brief 軸列挙定数
		enum AXIS
		{
			AXIS_X = 0,	//!< X軸
			AXIS_Y = 1,	//!< Y軸
			AXIS_Z = 2,	//!< Z軸
		};

	public:
		Mix::Vector3 center;	//!< 中心座標
		Mix::Vector3 axis[3];	//!< XYZ軸
		Mix::Vector3 length;	//!< XYZ軸の半分の長さ
		Mix::Vector3 points[8];	//!< OBBの各頂点

	public:
		//! @brief コンストラクタ
		OBB( void );
		//! @brief コンストラクタ
		//! @param[in] c 中心座標を表す Mix::Vector3 クラス
		//! @param[in] ax X軸を表す Mix::Vector3 クラス
		//! @param[in] ay Y軸をを表す Mix::Vector3 クラス
		//! @param[in] az Z軸をを表す Mix::Vector3 クラス
		//! @param[in] l XYZ軸の半分の長さを表す Mix::Vector3 クラス
		OBB( const Mix::Vector3& c, const Mix::Vector3& ax, const Mix::Vector3& ay, const Mix::Vector3& az, const Mix::Vector3& l );

	public:
		//! @brief 設定された「中心座標」「XYZ軸」「XYZ軸の半分の長さ」を元にOBBの頂点座標(8つ)を求めます
		void ComputePoints( void );
	};

}}
