#ifndef _E3D_SIG_MANAGER_
#define _E3D_SIG_MANAGER_

#include <easy3d.h>

#include <map>
#include <vector>

namespace HPL {
namespace E3D {
class QuaData {
public:
	//! 生成されたID
	int m_nQuaID;

	//! 最大フレーム数
	int m_nMaxFrame;

	/** マップ用
	  */
	QuaData();
	/**
	  * @param nQuaID		生成されたID
	  * @param nMaxFrame	生成時に取得したフレーム総数
	  *
	  */
	QuaData( int nQuaID, int nMaxFrame );
	~QuaData();

};
/**
  *
  */
class SigData {
private:
	//! 読み込んだ際に付けられるID
	int m_nSigID;

	//! ユーザがつけるIDとE3D内部で付けられたIDの対応表
	std::map<int, QuaData> m_mapQuaIDMap;

public:
	SigData(int nSigID);
	~SigData();

	/** 
	  * @param[in]	nUserID			ユーザが管理用に指定したID
	  * @param[in]	szQuaFilePath	Quaファイルパス
	  * @param[in]	mvmult			動作の移動量倍率
	  * @retval		0				生成成功
	  *				-1				生成に失敗した
	  * @exception	HPLException		存在するID
	  */
	int add_Motion( int nUserID, const char* szQuaFilePath, float mvmult);

	/** 
	  * @retval 生成されたID
	  */
	int get_SigID();

	/** 
	  * @retval						QUAデータ
	  * @exception HPLException		存在するID
	  */
	QuaData* get_Motion( int nUserID);

};

/** SIGハンドルのマネージクラス
  * SIGファイルのロードも行う
  */
class E3DSigManager {
private:
	std::map<int, SigData*> m_mapSigDataMap;

public:
	E3DSigManager();
	~E3DSigManager();

public:
	/**
	  * @param[in]	szSigFilePath	Sigファイルパス
	  * @param[in]	nUserID			ユーザが自分でつけたID
	  * @param[in]	mult			拡大率
	  * @retval		0				成功
	  *				-1				生成に失敗した
	  * @exception	HPLException	既に登録しているUserIDがある
	  */
	int load( char* szSigFilePath, int nUserID,
		float mult);

	/** 
	  * @retval					生成で取得したID
	  * @exception				存在しないID
	  */
	SigData* get( int nUserID );
};
}
}

#endif
