#ifndef _ENEMY_MANAGER_
#define _ENEMY_MANAGER_

#include <HPLE3DLapper.h>

namespace MotionTest {
namespace EnemyType {
	enum {
		CYCLOPS,		//0
		WORM_BIG,
		WORM_SMALL,
		ZOMBIE,
		MOSUKO,
		MOSUKO_LONG,
		ZOMBIE_B,		//5
		TROL,
		NUM_MAX
	};
}

/** 敵管理マネージャ
  *
  */
class EnemyManager: public HPL::E3D::AbstractObjectManager<HPL::E3D::E3DObject> {
private:
	// 使わない
	//! このフェーズに左右に回転したかどうか記録する。
	//! 最初に方向を記録しておく
	//! 移動後、ベクトルの外積
	//int nRotateY;

	//! そのステージで対象となる敵
	std::map<int, BOOL> m_mapEnableMap;
public:
	EnemyManager();
	virtual ~EnemyManager();
public:

	///////////////////
	// オーバーライド
	BOOL is_Skip( HPL::E3D::E3DObject* obj );
	int checkInView( HPL::E3D::E3DObject* obj );
	int move( HPL::E3D::E3DObject* obj );
	int checkHitToGround( HPL::E3D::E3DObject* obj );
	int checkHitToBillBoard( HPL::E3D::E3DObject* obj ){return 1;}
	int checkHitToPlayer( HPL::E3D::E3DObject* obj );
	int checkHitToEnemy( HPL::E3D::E3DObject* obj );
	
	int render( HPL::E3D::E3DObject* obj );

	int createObjects( int nType, int nNum );
	

	HPL::E3D::E3DObject* add_Object( int nType, int nSigID );

	/** 待機しているオブジェクトを呼び出します。
	  * @retval NULL	既に全て埋まっていて存在しない場合
	  */
	HPL::E3D::E3DObject* search( int nType);

	/** ターゲットの方向を向く
	  *
	  */
	void rotate_AgainstTarget( HPL::E3D::E3DObject* obj, int nTargetSigID );

	/** モデル/モーションの倍率
	  */
	float get_Zoom( int nType );

	/** キーで敵を操作
	*/
	int key_Move( HPL::E3D::E3DObject* obj );

	/** プレイヤーの位置を固定する
	  */
	void hold_Player( HPL::E3D::E3DObject* obj );

	/** 有効/向こうの切り替え
	  * bIsEnable
	  */
	void set_Enable(int nType, BOOL bIsEnable) ;
};

}

#endif