/* ==========================================================================
* 작 성 자 : 이법석
* 작 성 일 : 2007.01.18
* 내    용 : 이펙트 장면 노드
* 주의사항 : 
*===========================================================================*/
#pragma once
#include "SceneNode.h"

class cDynamicSceneNode;
class cNifAnimationInfo;

/// 장면 노드 인자
class cEffectSceneNodeParam : public cSceneNodeParam
{
public:	
	cEffectSceneNodeParam();

public:
	/// follow 객체
	cDynamicSceneNode* mpFollowSceneNode;
	NiNode* mpDummy;

	bool mFollowing;
	bool mLooping;
};

inline cEffectSceneNodeParam::cEffectSceneNodeParam()
: mpFollowSceneNode(0)
, mpDummy(0)
, mLooping(false)
, mFollowing(false)
{
}

class cEffectSceneNode : public cSceneNode
{
	friend class cSceneManager;

public:
	/// 처리
	virtual void OnProcess( float deltaTime, float accumTime  );

	inline bool IsRemoved() { return mRemoved; }
	void		Remove();

	inline void FadeOut() { mFadeOut = true; }

	/// 단독객체를 생성 (발사체류에 사용)
	bool InitSelfNode( cString pathName, NiTransform& trans, bool bLoop );

protected:
	cEffectSceneNode( eType type = eEFFECT );
	virtual ~cEffectSceneNode();

	/// 링크는 객체에서 획득해야 한다.
	virtual bool Init( const cEffectSceneNodeParam& param );
	virtual bool InitDamageEffect( const cEffectSceneNodeParam& param );

	void SetRemoveFlag( bool val ) { mRemoved = val; }

	bool FindDamageGeom( NiNode* pNode, NiGeometry** pArray );


	void Test( NiAVObject* obj );

protected:
	/// 따라다니기...
	cDynamicSceneNode* mpFollowSceneNode;
	NiNode* mpDummy;

	/// 애니 컨트롤러의 정보
	cNifAnimationInfo* mNifAniInfo;

	bool mRemoved;
	bool mFadeOut;
};

