//@STATE=作成中
//@DESCRIPTION ---------------------------------------------------------------
// Effects.h: Effects クラスのインターフェイス
//	履歴：
// $Log: Effects.h,v $
// Revision 1.1  2001/10/28 21:40:35  fujiwara
// DLLに分割
//
// Revision 1.4  2001/07/09 20:30:08  fujiwara
// 例外処理の組み込み
//
// Revision 1.3  2001/05/13 20:04:23  fujiwara
// メモリーリークが発生したので取り除く。
// 自弾のサウンドテスト
//
// Revision 1.2  2001/05/12 00:50:48  fujiwara
// ＣＶＳを導入し、ログ表示を追加
//
//@DESCRIPTION_END -----------------------------------------------------------
//@AUTHOR=S.F.
// Copyright (C) 2000 Satoshi Fujiwara. All Rights Reserved.
///////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_EFFECTS_H__7CFEB852_73A7_4010_BD50_C93C56019091__INCLUDED_)
#define AFX_EFFECTS_H__7CFEB852_73A7_4010_BD50_C93C56019091__INCLUDED_

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

#include "character.h"
namespace sf {
	namespace application {
		namespace effect {

	const int MAX_TYPE = 1;
	const int MAX_EFFECTS = 96;

	class Effects : public Characters  
	{
		DECLARE_SINGLETON(Effects)
		Effects();
	public:
		~Effects();
		// Type 定義 //
		// オブジェクト生成メソッドへのポインタ 
		typedef sf::application::Character * const (*CreateFuncPtr)(float,float,float,sf::application::scene::Game * const ,sf::application::Character * const pCharacter,int);
		// テクスチャローダへのポインタ
		typedef void (*LoaderFuncPtr)(void);
		enum TYPE {
			EXPLOSION = 0
		};
		// OPERATIONS 
		void initialize();
		// キャラクター移動
		void move(void);

		Character * const create(const TYPE id,const float x,const float y,const float z,sf::application::scene::Game * const pGame,sf::application::Character * const pCharacter = NULL);
		const bool hitCheck(Character * const pDest);
		const bool hitCheck(Characters * const pDest);
		const void clear(int index){mpEffects[index] = NULL ; mCount-- ;};
	private:
		Character *mpEffects[MAX_EFFECTS];
		int mCount;
		int mMax;
		static const LoaderFuncPtr mpLoaders[MAX_TYPE];
		static const int INIT_EFFECTS;
		static const CreateFuncPtr mpFunctions[MAX_TYPE];

	};// Effects
		}
	}
}

#endif // !defined(AFX_EFFECTS_H__7CFEB852_73A7_4010_BD50_C93C56019091__INCLUDED_)
