本文整理汇总了C++中CCharacter::GetSoundOuterRadius方法的典型用法代码示例。如果您正苦于以下问题:C++ CCharacter::GetSoundOuterRadius方法的具体用法?C++ CCharacter::GetSoundOuterRadius怎么用?C++ CCharacter::GetSoundOuterRadius使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CCharacter
的用法示例。
在下文中一共展示了CCharacter::GetSoundOuterRadius方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: StartAIStimulusResponse
bool ServerPhysicsCollisionMgr::StartAIStimulusResponse( CollisionResponse& collisionResponse )
{
// Get the aistimulus record struct.
HATTRIBUTE hStruct = DATABASE_CATEGORY( CollisionProperty ).GETSTRUCTSTRUCT( Responses,
collisionResponse.GetResponses(), collisionResponse.GetResponsesIndex( ), AIStimulusRecord );
if( !hStruct )
return false;
uint32 nIndexFound;
uint32 nImpulseFound;
if( !FindImpulseInTable( collisionResponse.GetImpulse( ), hStruct, AIStimulusRecordImpulseAccessCB, nIndexFound, nImpulseFound ))
return false;
// Determine the stimulus type.
HRECORD hStimulus = DATABASE_CATEGORY( CollisionProperty ).GETSTRUCTATTRIB( AIStimulusRecord, hStruct, nIndexFound, Stimulus );
if( !hStimulus )
return false;
const char* pszStimulus = g_pLTDatabase->GetRecordName( hStimulus );
if( !pszStimulus || !pszStimulus[0] )
return false;
// Bail if stimulus does not exist.
EnumAIStimulusType eStimulus = (EnumAIStimulusType)g_pAIDB->String2BitFlag( pszStimulus, kStim_Count, s_aszStimulusTypes );
if( eStimulus == kStim_InvalidType )
return false;
// Use the generic object alignment set in GDBEdit under AI/Constants.
EnumCharacterAlignment eAlignment = g_pCharacterDB->String2Alignment(g_pAIDB->GetAIConstantsRecord()->strObjectAlignmentName.c_str());
// Interpolate the radius of the stimulus.
float fRadius = FindStimulusRadius( collisionResponse );
// Bail if either character has sound disabled.
// This is a hack to prevent AI from generating stimuli.
// (e.g. at the begining of the FEAR Docks level, where
// we have a scripted execution scene, and do not want the
// AI to start investigating when a body hits the ground).
HOBJECT hActor = collisionResponse.GetCollisionActor()->GetObject();
HOBJECT hOtherActor = collisionResponse.GetCollisionActor()->GetOtherCollisionActor()->GetObject();
if( IsCharacter( hActor ) )
{
CCharacter* pChar = (CCharacter*)g_pLTServer->HandleToObject( hActor );
if( pChar && pChar->GetSoundOuterRadius() == 0.f )
{
return false;
}
}
if( IsCharacter( hOtherActor ) )
{
CCharacter* pChar = (CCharacter*)g_pLTServer->HandleToObject( hOtherActor );
if( pChar && pChar->GetSoundOuterRadius() == 0.f )
{
return false;
}
}
// Register the stimulus.
StimulusRecordCreateStruct scs( eStimulus, eAlignment, collisionResponse.GetCollisionPoint( ), hActor );
scs.m_hStimulusTarget = hOtherActor;
scs.m_flRadiusScalar = fRadius;
g_pAIStimulusMgr->RegisterStimulus( scs );
#ifndef _FINAL
uint32 nStatsLevel;
bool bServer;
HRECORD hCollisionPropertyFilter = NULL;
CollisionStatsLevel( nStatsLevel, bServer, hCollisionPropertyFilter );
if( nStatsLevel > 0 &&
( !hCollisionPropertyFilter || hCollisionPropertyFilter == collisionResponse.GetCollisionProperty()))
{
g_pLTBase->CPrint( "S: AIStimulus(%s)", pszStimulus );
}
#endif // _FINAL
return true;
}