#pragma once #include "SignalHeader.h" #include "EtMatrixEx.h" struct S_PROJECTILE_PROPERTY; // CDnProjectile::S_ORBIT_PROPERTY ¿¡ Á¤ÀǵǾîÀÖÀ½. // OrbitType:Homing, VelocityType:Constant ŸÀÔÀÇ È£¹Ö ¹ß»çü¸¦ ó¸®Çϴ Ŭ·¡½º class IDnOrbitProcessor { protected: #ifdef _GAMESERVER CMultiRoom* m_pRoom; #endif public: #ifdef _GAMESERVER IDnOrbitProcessor( void ) : m_pRoom( NULL ) { m_nTargetPartsBoneIndex = m_nTargetPartsIndex = -1; }; #else IDnOrbitProcessor( void ) { m_nTargetPartsBoneIndex = m_nTargetPartsIndex = -1; }; #endif virtual ~IDnOrbitProcessor( void ) {}; // ±ËÀû °è»ê¿¡ ÇÊ¿äÇÑ °ªµéÀ» À§ÇÑ °øÅë ÀÎÅÍÆäÀ̽º virtual void Initialize( const MatrixEx& Cross, const MatrixEx& OffsetCross ) {}; virtual void SetTargetActor( DnActorHandle hActor ) {}; virtual void SetTargetPosition( EtVector3 vTarget ) {}; virtual void SetValidTimePointer( int* piValidTime ) {}; // °ÔÀÓ¼­¹ö¿ë ·ë °´Ã¼ ¼ÂÆÃ #ifdef _GAMESERVER void SetRoom( CMultiRoom* pRoom ) { m_pRoom = pRoom; }; #endif virtual void ProcessOrbit( /*IN OUT*/ MatrixEx& Cross, EtVector3& vPrevPos, LOCAL_TIME LocalTime, float fDelta ) = 0; // µðÆúÆ®·Î CDnProjectile::ProcessDestroyOrbit() ¿¡¼­ fallgravity ·Î ¼³Á¤µÈ ¹ß»çüÀÇ ±ËÀû ó¸®. Ŭ¶óÀÌ¾ðÆ®¿¡¼­¸¸ »ç¿ëÇÑ´Ù. virtual void ProcessFallGravityOrbit( MatrixEx& Cross, EtVector3& vPrevPos, LOCAL_TIME LocalTime, float fDelta, float& fGravity, float fFallGravityAccell ); // ±ËÀû ó¸® °´Ã¼¸¦ »ý¼ºÇÏ´Â ÆÑÅ丮 static IDnOrbitProcessor* Create( const MatrixEx& Cross, const MatrixEx& OffsetCross, const S_PROJECTILE_PROPERTY* pOrbitProperty ); protected: int m_nTargetPartsIndex; int m_nTargetPartsBoneIndex; //¼±ÅÃµÈ Parts¿¡¼­ ½ÇÁ¦ BoneÁ¤º¸¸¦ °¡Áø Index..(MonsterParts¸¦ Vector·Î °¡Áö°í, ´Ù½Ã _Info°¡ _PartsInfo¸¦ vector·Î °¡Áü) public: //ÆÄÃ÷¸ó½ºÅÍÀϰæ¿ì ¼±ÅÃµÈ ÆÄÃ÷ À妽º¸¦ ¼³Á¤ virtual void SetTargetPartsIndex(int nPartsIndex, int nBoneIndex) { m_nTargetPartsIndex = nPartsIndex; m_nTargetPartsBoneIndex = nBoneIndex; }; EtVector3 FindTargetPosition(DnActorHandle hActor, int nPartsIndex, int nBoneIndex); };