#include "StdAfx.h" #include "DnHomingOrbit.h" #include "DnActor.h" #include "DnProjectile.h" CDnHomingOrbit::CDnHomingOrbit( const S_PROJECTILE_PROPERTY* pProjectileInfo ) : m_fSpeed( 0.0f ), m_vTargetPosition( 0.0f, 0.0f, 0.0f ), m_bFallGravity( false ) { m_fSpeed = pProjectileInfo->fSpeed; } CDnHomingOrbit::~CDnHomingOrbit( void ) { } void CDnHomingOrbit::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; // fallgravity »óȲ¿¡¼± À§Ä¡¸¸ °»½ÅÇØÁØ´Ù. if( false == m_bFallGravity ) { Cross.m_vZAxis = vDir; Cross.MakeUpCartesianByZAxis(); } // ±Ùó·Î °ÅÀÇ ´Ù ¿Ô´Ù¸é ÇØ´ç À§Ä¡·Î ¼ÂÆÃ #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 } void CDnHomingOrbit::ProcessFallGravityOrbit( MatrixEx& Cross, EtVector3& vPrevPos, LOCAL_TIME LocalTime, float fDelta, float& fGravity, float fFallGravityAccell ) { IDnOrbitProcessor::ProcessFallGravityOrbit( Cross, vPrevPos, LocalTime, fDelta, fGravity, fFallGravityAccell ); m_bFallGravity = true; // #29199 À̽´ °ü·Ã. fallgravity »óŰ¡ µÇ¸é ¹ß»çüÀÇ ÁøÇà¹æÇâÀ¸·Î ¿ùµå Çà·ÄÀ» ¸ÂÃçÁØ´Ù. // fallgravity »óȲ¿¡¼± fallgravity ó¸®µÈ À§Ä¡ + ÇöÀç È£¹Ö¿¡¼­ °»½ÅµÈ À§Ä¡ ±âÁØÀÇ prevpos ¸¦ µû·Î ÀúÀåÇØ¼­ // ÇØ´ç º¤ÅÍ·Î ¹æÇâÀ» ó¸®ÇÑ´Ù. ÀÎÀÚ·Î ³Ñ°ÜÁÖ´Â projectile ÀÇ vPrevPos ´Â ÇöÀç ÇÁ·¹ÀÓ¿¡¼­ fallgravity °¡ Àû¿ëµÇ±â ÀüÀÌ´Ù. //if( m_bFallGravity ) //{ Cross.m_vZAxis = Cross.m_vPosition - vPrevPos; EtVec3Normalize( &Cross.m_vZAxis, &Cross.m_vZAxis); //} }