#pragma once

//! @file Mix/Scene/IFlowerPackage.h
//! @brief フラワーパッケージインターフェースインクルードファイル

#include "Mix/Reference.h"

namespace Mix{ namespace Scene{

	//! @class IFlowerPackage
	//! @brief フラワーパッケージインターフェース
	class IFlowerPackage : public Mix::Reference
	{
	public:
		//! @enum MODEL_TYPE
		//! @brief モデルタイプ列挙定数
		enum MODEL_TYPE
		{
			M_SIMPLE	= 0,	//!< シンプル( １枚のポリゴン )
			M_CROSS1	= 1,	//!< クロス１( ２枚のポリゴンのクロス )
			M_CROSS2	= 2,	//!< クロス２( ３枚のポリゴンのクロス )
		};

		//! @struct MODEL
		//! @brief モデル構造体
		struct MODEL
		{
			Mix::Scene::IFlowerPackage::MODEL_TYPE type; //!< 種類を表す Mix::Scene::IFlowerPackage::MODEL_TYPE 列挙定数
			Mix::Vector2 uv[2];	//!< モデルに貼り付けるテクスチャの左上( uv[0] )と右下( uv[1] )のUV座標
		};

	protected:
		//! @brief デストラクタ
		virtual ~IFlowerPackage( void ) {}

	public:
		//! @brief マテリアルを取得します
		//! @param[out] ppMaterial 取得したマテリアルを渡す Mix::Scene::IMaterial インターフェースのポインタのアドレス
		virtual void GetMaterial( Mix::Scene::IMaterial** ppMaterial ) = 0;
		//! @brief マテリアルを設定します
		//! @param[in] pMaterial 設定するマテリアルを表す Mix::Scene::IMaterial インターフェースのポインタ
		//! @return 成功した場合は True を返します
		virtual Boolean SetMaterial( Mix::Scene::IMaterial* pMaterial ) = 0;

		//! @brief モデルの数を取得します
		//! @return モデルの数を返します
		virtual UInt32 GetModelCount( void ) const = 0;
		//! @brief 指定したインデックスのモデルを取得します
		//! @param[in] index モデルのインデックス
		//! @return モデルを表す Mix::Scene::IFlowerPackage::MODEL 構造体を返します
		virtual const Mix::Scene::IFlowerPackage::MODEL& GetModel( UInt32 index ) const = 0;
		//! @brief 指定したインデックスのモデルを設定します
		//! @param[in] index モデルのインデックス
		//! @param[in] model モデルを表す Mix::Scene::IFlowerPackage::MODEL 構造体
		virtual void SetModel( UInt32 index, const Mix::Scene::IFlowerPackage::MODEL& model ) = 0;
	};

}}
