#include "StdAfx.h" #include "DnTerrainHomingOrbit.h" #include "DnActor.h" #include "DnProjectile.h" #include "DnWorld.h" CDnTerrainHomingOrbit::CDnTerrainHomingOrbit( const S_PROJECTILE_PROPERTY* pProjectileInfo ) : m_fSpeed( 0.0f ), m_vTargetPosition( 0.0f, 0.0f, 0.0f ) { m_fSpeed = pProjectileInfo->fSpeed; } CDnTerrainHomingOrbit::~CDnTerrainHomingOrbit( void ) { } void CDnTerrainHomingOrbit::ProcessOrbit( /*IN OUT*/ MatrixEx& Cross, EtVector3& vPrevPos, LOCAL_TIME LocalTime, float fDelta ) { // È£¹Ö ó¸®. if( m_hTargetActor ) { m_vTargetPosition = __super::FindTargetPosition(m_hTargetActor, m_nTargetPartsIndex, m_nTargetPartsBoneIndex); } EtVector3 vDir = m_vTargetPosition - Cross.m_vPosition; float fDistanceSQ = EtVec3LengthSq( &vDir ); EtVec3Normalize( &vDir, &vDir ); Cross.m_vPosition += vDir * m_fSpeed * fDelta; // ±Ùó·Î °ÅÀÇ ´Ù ¿Ô´Ù¸é ÇØ´ç À§Ä¡·Î ¼ÂÆÃ #ifdef _GAMESERVER // °ÔÀÓ¼­¹ö´Â 20 ÇÁ·¹ÀÓÀ̱⠶§¹®¿¡ üũ °£°ÝÀ» ³Ð°Ô ÇØÁØ´Ù. if( fDistanceSQ < 1000.0f ) Cross.m_vPosition = m_vTargetPosition; #else if( fDistanceSQ < 100.0f ) Cross.m_vPosition = m_vTargetPosition; #endif // #ifdef _GAMESERVER // ÁöÇü¿¡ ºÙ¾î¼­ ³¯¾Æ°¡µµ·Ï ó¸®. ´Ù¸®À§ °°Àº ÇÁ¶øÀ§¿¡ ÀÖÀ¸¸é ÇÁ¶øÀ§ y À§Ä¡±îÁö °¨¾ÈÇÔ. #ifdef _GAMESERVER Cross.m_vPosition.y = CDnWorld::GetInstance(m_pRoom).GetHeightWithProp( Cross.m_vPosition ); #else Cross.m_vPosition.y = CDnWorld::GetInstance().GetHeightWithProp( Cross.m_vPosition ); #endif Cross.m_vPosition.y += 20.0f; }