本文整理汇总了C++中CCharacter::GetRadius方法的典型用法代码示例。如果您正苦于以下问题:C++ CCharacter::GetRadius方法的具体用法?C++ CCharacter::GetRadius怎么用?C++ CCharacter::GetRadius使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CCharacter
的用法示例。
在下文中一共展示了CCharacter::GetRadius方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetFirePosition
LTVector CAIWeaponMelee::GetFirePosition(CAI* pAI)
{
// Force fire position to come from the edge of the target's radius.
// This should ensure a successful melee hit.
if( pAI && m_bForceHit )
{
HOBJECT hTarget = pAI->GetAIBlackBoard()->GetBBTargetObject();
if( IsCharacter( hTarget ) )
{
LTVector vTargetPos;
g_pLTServer->GetObjectPos( hTarget, &vTargetPos );
LTVector vDir = vTargetPos - pAI->GetPosition();
vDir.Normalize();
CCharacter* pChar = (CCharacter*)g_pLTServer->HandleToObject( hTarget );
LTVector vFirePos = vTargetPos - ( vDir * pChar->GetRadius() );
return vFirePos;
}
}
// Default behavior.
return DefaultGetFirePosition(pAI);
}
示例2: GetBlindFirePosition
void CAIWeaponAbstract::GetBlindFirePosition(CAI* pAI, LTVector& outvShootPos, bool bMiss )
{
ASSERT(pAI);
HOBJECT hTarget = pAI->GetAIBlackBoard()->GetBBTargetObject();
if( !IsCharacter( hTarget ) )
{
return;
}
CCharacter* pChar = (CCharacter*)g_pLTServer->HandleToObject( hTarget );
if( !pChar )
{
return;
}
// Intentionally shoot a little short of the target.
float fDist = sqrt( pAI->GetTarget()->GetTargetDistSqr() );
float fRadius = pChar->GetRadius();
float fRand = GetRandom( 0.f, 1.f );
fDist -= ( fRadius * 2.f ) + ( fRand * pAI->GetAccuracyMissPerturb() );
// Aim wherever the weapon is aiming.
LTVector vDir = pAI->GetWeaponForward( m_pWeapon );
outvShootPos = pAI->GetPosition() + ( vDir * fDist );
// Force bullets to land in front of the target, on the floor.
if( bMiss && m_pAIWeaponRecord->bForceMissToFloor )
{
float fFloor = pAI->GetAIBlackBoard()->GetBBTargetPosition().y;
fFloor -= pAI->GetAIBlackBoard()->GetBBTargetDims().y;
outvShootPos.y = fFloor;
}
}
示例3: GetShootPosition
//.........这里部分代码省略.........
if( fInnaccuracy > 0.f )
{
LTVector vShootOffset = LTVector( GetRandom( -fInnaccuracy, fInnaccuracy ),
GetRandom( -fInnaccuracy * 0.5f, fInnaccuracy * 0.5f ),
GetRandom( -fInnaccuracy, fInnaccuracy ) );
vShootOffset.Normalize();
outvShootPos += vShootOffset * 100.0f;
}
return true;
}
// Miss.
else
{
++Context.m_iMiss;
// Blind fire.
if( pAI->GetAIBlackBoard()->GetBBBlindFire() )
{
GetBlindFirePosition( pAI, outvShootPos, FIRE_MISS );
return false;
}
// Default fire.
HOBJECT hTarget = pAI->GetAIBlackBoard()->GetBBTargetObject();
if( !IsCharacter( hTarget ) )
{
return false;
}
CCharacter* pChar = (CCharacter*)g_pLTServer->HandleToObject( hTarget );
if( !pChar )
{
return false;
}
// Intentionally shoot a little short of the target.
LTVector vPos = pAI->GetAIBlackBoard()->GetBBTargetPosition();;
// Suppression fire at last known pos.
if( pAI->GetAIBlackBoard()->GetBBSuppressionFire() )
{
CAIWMFact factQuery;
factQuery.SetFactType( kFact_Character );
factQuery.SetTargetObject( hTarget );
CAIWMFact* pFact = pAI->GetAIWorkingMemory()->FindWMFact( factQuery );
if( pFact )
{
vPos = pFact->GetPos();
}
}
float fDist = sqrt( pAI->GetTarget()->GetTargetDistSqr() );
float fRadius = pChar->GetRadius();
float fRand = GetRandom( 0.f, 1.f );
fDist -= ( fRadius * 2.f ) + ( fRand * pAI->GetAccuracyMissPerturb() );
// Calculate a position to the right or left of the target.
LTVector vDir = vPos - pAI->GetPosition();
if( vDir != LTVector::GetIdentity() )
{
vDir.Normalize();
}
vPos = pAI->GetPosition() + ( vDir * fDist );
LTVector vRight = vDir.Cross( LTVector( 0.f, 1.f, 0.f ) );
fRand = GetRandom( 0.f, 1.f );
float fPerturb = ( ( pAI->GetAccuracyMissPerturb() * 2.f ) * fRand ) - pAI->GetAccuracyMissPerturb();
vRight *= fPerturb;
// Apply the offset to miss the target.
outvShootPos = vPos + vRight;
// Force bullets to land in front of the target, on the floor.
if( m_pAIWeaponRecord->bForceMissToFloor )
{
float fFloor = pAI->GetAIBlackBoard()->GetBBTargetPosition().y;
fFloor -= pAI->GetAIBlackBoard()->GetBBTargetDims().y;
outvShootPos.y = fFloor;
}
return false;
}
return false;
}