DragonNest/GameCommon/DnHomingOrbit.cpp

68 lines
2 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#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 <20><>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
if( false == m_bFallGravity )
{
Cross.m_vZAxis = vDir;
Cross.MakeUpCartesianByZAxis();
}
// <20><>ó<EFBFBD><C3B3> <20><><EFBFBD><EFBFBD> <20><> <20>Դٸ<D4B4> <20>ش<EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD>
#ifdef _GAMESERVER
// <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> 20 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̱<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>а<EFBFBD> <20><><EFBFBD>ش<EFBFBD>.
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 <20>̽<EFBFBD> <20><><EFBFBD><EFBFBD>. fallgravity <20><><EFBFBD>°<EFBFBD> <20>Ǹ<EFBFBD> <20>߻<EFBFBD>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
// fallgravity <20><>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD> fallgravity ó<><C3B3><EFBFBD><EFBFBD> <20><>ġ + <20><><EFBFBD><EFBFBD> ȣ<>ֿ<EFBFBD><D6BF><EFBFBD> <20><><EFBFBD>ŵ<EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> prevpos <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>
// <20>ش<EFBFBD> <20><><EFBFBD>ͷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD>ڷ<EFBFBD> <20>Ѱ<EFBFBD><D1B0>ִ<EFBFBD> projectile <20><> vPrevPos <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD> fallgravity <20><> <20><><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
//if( m_bFallGravity )
//{
Cross.m_vZAxis = Cross.m_vPosition - vPrevPos;
EtVec3Normalize( &Cross.m_vZAxis, &Cross.m_vZAxis);
//}
}