#pragma once #include "ArcadiaClient.h" #include "K3DTypes.h" //#include #include struct OtherFxData { OtherFxData( AR_HANDLE caster, AR_HANDLE target, int fxid, DWORD catingTime = 0, const K3DVector* Pos = NULL ) { hCaster = caster; hTarget = target; nFxID = fxid; dwCatingTime = catingTime; vPos = Pos; } AR_HANDLE hCaster; AR_HANDLE hTarget; int nFxID; DWORD dwCatingTime; const K3DVector* vPos; }; class SGameOtherEffectMng { private: class SGame* m_pGame; std::vector< class SGameOtherEffect* > m_vOtherEffectList; ///< 그외 모든 이펙트 int m_nNewFxID; queue< int > m_RecycleID; ///< 재사용할 파티클 아이디 private: SGameOtherEffect* GetSelectEffect( int nFxID ); SGameOtherEffect* GetSelectEffect( AR_HANDLE hHandle, int nFxType, bool bCheckTargetHandle ); public: enum OTHER_FX_ID { FX_CREATURE_EVOLUTION = 0, FX_CAST_SUMMONING_CREATURE, FX_SUMMONING_CREATURE, FX_UN_SUMMONING_CREATURE, FX_MONSTER_TAMING, FX_BERSERK_MODE, FX_MAX, }; public: int GetOtherEffectRecycleID(); void EndOtherEffect( int nFxID ); void EndOtherEffect( AR_HANDLE hHandle, int nFxType, bool bCheckTargetHandle ); void DelOtherEffect( AR_HANDLE hHandle, int nFxType, bool bCheckTargetHandle ); void SetNextStepOtherEffect( int nFxID ); void SetNextStepOtherEffect( AR_HANDLE hHandle, int nFxType, bool bCheckTargetHandle = false ); void CheckEffect(); void AllDelOtherEffect(); public: int AddChaosEffect( struct SMSG_GET_CHAOS* pMsg ); public: int AddCreatureEvolutionEffect( int nFxType, OtherFxData* fxdata ); int AddCastSummoningCreatureEffect( int nFxType, OtherFxData* fxdata ); int AddSummoningCreatureEffect( int nFxType, OtherFxData* fxdata ); int AddUnSummoningCreatureEffect( int nFxType, OtherFxData* fxdata ); int AddMonsterTamingEffect( int nFxType, OtherFxData* fxdata ); public: void Process( DWORD dwTime ); void Render( unsigned long uRenderBitVector, class KViewportObject** ppViewportList, int nViewportCount ); public: SGameOtherEffectMng( SGame * pGame ); virtual ~SGameOtherEffectMng(); };