//@STATE=作成中
//@DESCRIPTION ---------------------------------------------------------------
// Enemys.h: Enemys クラスのインターフェイス
//	履歴：
// $Log: Enemys.h,v $
// Revision 1.1  2001/10/28 21:40:36  fujiwara
// DLLに分割
//
// Revision 1.9  2001/07/09 20:30:08  fujiwara
// 例外処理の組み込み
//
// Revision 1.8  2001/07/01 01:03:44  fujiwara
// const の見直し
// 配置エディタは途中経過
//
// Revision 1.7  2001/06/03 09:22:32  fujiwara
// 地上敵クラスおよび雑魚敵の微調整
//
// Revision 1.6  2001/05/29 01:12:54  fujiwara
// 雑魚キャラ(飛行物）の作成。配置エディタのバグ修正
//
// Revision 1.5  2001/05/17 12:34:10  fujiwara
// 地上敵サンプル作成
//
// Revision 1.4  2001/05/13 20:04:24  fujiwara
// メモリーリークが発生したので取り除く。
// 自弾のサウンドテスト
//
// Revision 1.3  2001/05/12 00:50:48  fujiwara
// ＣＶＳを導入し、ログ表示を追加
//
//@DESCRIPTION_END -----------------------------------------------------------
//@AUTHOR=S.F.
// Copyright (C) 2000 Satoshi Fujiwara. All Rights Reserved.
///////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_ENEMYS_H__8DC400E3_9678_4AA5_B5A2_B96809AEEEEA__INCLUDED_)
#define AFX_ENEMYS_H__8DC400E3_9678_4AA5_B5A2_B96809AEEEEA__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "character.h"
namespace sf {
	namespace application {
		namespace enemy {
	
	const int MAX_TYPE = 2;
	const int MAX_ENEMYS = 64;

	const float Z_OFFSET_ENEMYS =  0.3f;
	const float Z_OFFSET_ARMYS = 0.8f;
	const float Z_OFFSET_INDEX = 0.001f;
	const float Z_OFFSET_ASSEMBLE = 0.0001f;

	class Event {
	public:
		virtual void allBomb(void) = 0;
	};// Event

	class Enemys : public Characters ,public Event
	{
		DECLARE_SINGLETON(Enemys)
		Enemys();
	public:
		~Enemys();
		// Type 定義 //
		// オブジェクト生成メソッドへのポインタ 
		typedef sf::application::Character * const (*CreateFuncPtr)(float,float,float,sf::application::scene::Game * const ,int);
		// テクスチャローダへのポインタ
		typedef void (*LoaderFuncPtr)(void);
		// テクスチャ開放メソッドへのポインタ 
		typedef void (*UnloadFuncPtr)(void);
		typedef sf::system::console::sprite::Sprite * const (*GetSpritePtrFunc)(void); 

		enum TYPE {
			ZK01 = 0
		};
		// OPERATIONS 
		void initialize();
		// キャラクター移動
		void move(void);

		const bool create(const TYPE id,const float x,const float y,const float z,sf::application::scene::Game *pGame);
		const bool hitCheck(Character * const pDest);
		const bool hitCheck(Characters * const pDest);
		const void clear(int index){mpEnemys[index] = NULL ; mCount-- ;};
		void unload(void);
		void load(const int value);
		
		// Event 
		void allBomb(void);
	
	private:
		Character *mpEnemys[MAX_ENEMYS];
		int mCount;
		int mMax;
		static const LoaderFuncPtr mpLoaders[MAX_TYPE];
		static const int INIT_ENEMYS;
		static const CreateFuncPtr mpFunctions[MAX_TYPE];
		static const UnloadFuncPtr mpUnloadFunc[MAX_TYPE];

	};// Enemys

		}// enemy
	}// application
}// sf

#endif // !defined(AFX_ENEMYS_H__8DC400E3_9678_4AA5_B5A2_B96809AEEEEA__INCLUDED_)
