#ifndef _E3D_BILL_BOARD_MANAGER_
#define _E3D_BILL_BOARD_MANAGER_

#include "E3DBillBoard.h"

#include <list>
#include <map>

namespace HPL {
namespace E3D {
namespace BillBoardConsts {

	//!	ビルボードの最大数(システムの限界)
	static const int TOTAL_MAX_BILLBOARD = 2000;

};
/**	管理のしやすさを考えると、種類ごとに作成した方が良い
  *
  */
class E3DBillBoardManager {
public:
	//! ビルボード情報リスト
	std::list<E3DBillBoard*> m_lstBillBoardList;
	
	//! sig id → E3DBillBoard* の逆引きマップ
	std::map<int, E3DBillBoard*> m_mapSigIDToBillBoardMap;
private:
	//! 生きているビルボードの数
	int m_nAliveBillBoardNum;
public:
	E3DBillBoardManager();
	~E3DBillBoardManager();

public:	// getter/setter
	//! 生きているビルボードの数
	int get_AliveBillBoardNum();

	//! 生きているビルボードの数
	void set_AliveBillBoardNum( int nAliveBillBoardNum );
private:
	/** 逆引きマップに登録
	  *
	  */
	int set_SigIDToBillBoardMap( int nSigID, E3DBillBoard* bbBillBoard );

public:
	/** 初期化時に呼び、ビルボードを作成・登録。
	  * 必要な情報は取得したE3DBillBoardクラスに直に登録
	  *
	  */
	E3DBillBoard* setup_BillBoard( int nBillBoardID);

	/** 空いているビルボードを探しします
	  * @retval		E3DBillBoard*	空いていたビルボード。
	  *				NULL			作成可能な枠が無かった場合
	  */
	E3DBillBoard* search();

	/** 全てを使用していない状態に戻します。
	  *
	  */
	void reset();

};
}
}
#endif
