63 lines
No EOL
1.8 KiB
C++
63 lines
No EOL
1.8 KiB
C++
#include "StdAfx.h"
|
|
#include "DnHomingAccellOrbit.h"
|
|
#include "DnActor.h"
|
|
#include "DnProjectile.h"
|
|
|
|
|
|
#if defined(PRE_FIX_HOMINGTARGET)
|
|
bool CDnHomingAccellOrbit::ms_ShowHomingTarget = false;
|
|
#endif // PRE_FIX_HOMINGTARGET
|
|
|
|
CDnHomingAccellOrbit::CDnHomingAccellOrbit( const S_PROJECTILE_PROPERTY* pProjectileInfo ) : m_fSpeed( 0.0f ),
|
|
m_vTargetPosition( 0.0f, 0.0f, 0.0f ),
|
|
m_bFirstProcess( true ),
|
|
m_piValidTime( NULL )
|
|
{
|
|
m_fSpeed = pProjectileInfo->fSpeed;
|
|
}
|
|
|
|
CDnHomingAccellOrbit::~CDnHomingAccellOrbit( void )
|
|
{
|
|
|
|
}
|
|
|
|
void CDnHomingAccellOrbit::Initialize( const MatrixEx& Cross, const MatrixEx& OffsetCross )
|
|
{
|
|
m_OffsetCross = OffsetCross;
|
|
}
|
|
|
|
void CDnHomingAccellOrbit::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);
|
|
}
|
|
|
|
if( m_bFirstProcess )
|
|
{
|
|
EtVector3 vDir = m_vTargetPosition - Cross.m_vPosition;
|
|
float fLength = EtVec3Length( &vDir );
|
|
|
|
m_Homing.Init( (LOCAL_TIME)( ( fLength / m_fSpeed ) * 1000.f ), LocalTime, m_OffsetCross.m_vPosition, m_vTargetPosition, m_OffsetCross.m_vZAxis );
|
|
_ASSERT( m_piValidTime );
|
|
*m_piValidTime = (int)( ( fLength / m_fSpeed ) * 1000.f );
|
|
|
|
m_bFirstProcess = false;
|
|
}
|
|
|
|
m_Homing.SetEndPos( m_vTargetPosition );
|
|
m_Homing.Process( LocalTime );
|
|
|
|
Cross.m_vZAxis = m_Homing.GetVVec();
|
|
Cross.m_vPosition = m_Homing.GetPos();
|
|
Cross.MakeUpCartesianByZAxis();
|
|
|
|
|
|
#if defined(PRE_FIX_HOMINGTARGET)
|
|
#if defined(_GAMESERVER)
|
|
#else
|
|
if (ms_ShowHomingTarget == true)
|
|
EternityEngine::DrawLine3D(Cross.m_vPosition, m_vTargetPosition);
|
|
#endif // _GAMESERVER
|
|
#endif // PRE_FIX_HOMINGTARGET
|
|
} |