本文整理汇总了C++中CAI_BaseNPC::Classify方法的典型用法代码示例。如果您正苦于以下问题:C++ CAI_BaseNPC::Classify方法的具体用法?C++ CAI_BaseNPC::Classify怎么用?C++ CAI_BaseNPC::Classify使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CAI_BaseNPC
的用法示例。
在下文中一共展示了CAI_BaseNPC::Classify方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnObstructionPreSteer
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
bool CASW_Alien_Jumper::OnObstructionPreSteer( AILocalMoveGoal_t *pMoveGoal, float distClear, AIMoveResult_t *pResult )
{
bool iBaseReturn = BaseClass::OnObstructionPreSteer( pMoveGoal, distClear, pResult );
if ( asw_test_new_alien_jump.GetBool() == false )
return iBaseReturn;
if ( HasSpawnFlags( SF_ANTLION_USE_GROUNDCHECKS ) == false )
return iBaseReturn;
CAI_BaseNPC *pBlocker = pMoveGoal->directTrace.pObstruction->MyNPCPointer();
// push other jumpers out of the way?
if ( pBlocker && pBlocker->Classify() == CLASS_ASW_DRONE )
{
// HACKHACK
CASW_Alien_Jumper *pJumper = dynamic_cast< CASW_Alien_Jumper * > ( pBlocker );
if ( pJumper )
{
if ( pJumper->AllowedToBePushed() == true && GetEnemy() == NULL )
{
//NDebugOverlay::Box( pAntlion->GetAbsOrigin(), GetHullMins(), GetHullMaxs(), 0, 255, 0, 0, 2 );
pJumper->GetMotor()->SetIdealYawToTarget( WorldSpaceCenter() );
pJumper->SetSchedule( SCHED_MOVE_AWAY );
pJumper->m_flNextJumpPushTime = gpGlobals->curtime + 2.0f;
}
}
}
return iBaseReturn;
}
示例2: IsJumpLegal
// Purpose: Returns true if a reasonable jumping distance
bool CASW_Alien_Jumper::IsJumpLegal( const Vector &startPos, const Vector &apex, const Vector &endPos ) const
{
const float MAX_JUMP_RISE = 512;
//const float MIN_JUMP_RISE = 16;
const float MAX_JUMP_DROP = 512;
const float MAX_JUMP_DISTANCE = 1024;
const float MIN_JUMP_DISTANCE = 128;
// make sure we don't do really flat jumps
//float fHeight = (apex.z - startPos.z);
//Msg("checking legality of jump with height %f\n", fHeight);
//if ((apex.z - startPos.z) < 10 || fHeight != 0)
//return false;
//Adrian: Don't try to jump if my destination is right next to me.
if ( ( endPos - GetAbsOrigin()).Length() < MIN_JUMP_DISTANCE )
return false;
if ( HasSpawnFlags( SF_ANTLION_USE_GROUNDCHECKS ) && asw_test_new_alien_jump.GetBool() == true )
{
trace_t tr;
AI_TraceHull( endPos, endPos, GetHullMins(), GetHullMaxs(), MASK_NPCSOLID, this, COLLISION_GROUP_NONE, &tr );
if ( tr.m_pEnt )
{
CAI_BaseNPC *pBlocker = tr.m_pEnt->MyNPCPointer();
if ( pBlocker && pBlocker->Classify() == CLASS_ASW_DRONE )
{
// HACKHACK - push other jumpers out of the way
CASW_Alien_Jumper *pJumper = dynamic_cast< CASW_Alien_Jumper * > ( pBlocker );
if ( pJumper )
{
if ( pJumper->AllowedToBePushed() == true )
{
// NDebugOverlay::Line( GetAbsOrigin(), endPos, 255, 0, 0, 0, 2 );
// NDebugOverlay::Box( pAntlion->GetAbsOrigin(), GetHullMins(), GetHullMaxs(), 0, 0, 255, 0, 2 );
pJumper->GetMotor()->SetIdealYawToTarget( endPos );
pJumper->SetSchedule( SCHED_MOVE_AWAY );
pJumper->m_flNextJumpPushTime = gpGlobals->curtime + 2.0f;
}
}
}
}
}
return BaseClass::IsJumpLegal( startPos, apex, endPos, MAX_JUMP_RISE, MAX_JUMP_DROP, MAX_JUMP_DISTANCE );
}
示例3: GetSquad
//-----------------------------------------------------------------------------
// Purpose:
//
//
// Output :
//-----------------------------------------------------------------------------
Class_T CNPC_EnemyFinder::Classify( void )
{
if ( GetSquad() )
{
AISquadIter_t iter;
CAI_BaseNPC *pSquadmate = GetSquad()->GetFirstMember( &iter );
while ( pSquadmate )
{
if ( pSquadmate != this && !pSquadmate->ClassMatches( GetClassname() ) )
{
return pSquadmate->Classify();
}
pSquadmate = GetSquad()->GetNextMember( &iter );
}
}
return CLASS_NONE;
}
示例4: HandleAnimEvent
void CNPC_Zombine::HandleAnimEvent( animevent_t *pEvent )
{
if ( pEvent->event == AE_ZOMBINE_PULLPIN )
{
Vector vecStart;
QAngle angles;
GetAttachment( "grenade_attachment", vecStart, angles );
CBaseGrenade *pGrenade = Fraggrenade_Create( vecStart, vec3_angle, vec3_origin, AngularImpulse( 0, 0, 0 ), this, 3.5f, true );
if ( pGrenade )
{
// Move physobject to shadow
IPhysicsObject *pPhysicsObject = pGrenade->VPhysicsGetObject();
if ( pPhysicsObject )
{
pGrenade->VPhysicsDestroyObject();
int iAttachment = LookupAttachment( "grenade_attachment");
pGrenade->SetMoveType( MOVETYPE_NONE );
pGrenade->SetSolid( SOLID_NONE );
pGrenade->SetCollisionGroup( COLLISION_GROUP_DEBRIS );
pGrenade->SetAbsOrigin( vecStart );
pGrenade->SetAbsAngles( angles );
pGrenade->SetParent( this, iAttachment );
pGrenade->SetDamage( 200.0f );
m_hGrenade = pGrenade;
EmitSound( "Zombine.ReadyGrenade" );
// Tell player allies nearby to regard me!
CAI_BaseNPC **ppAIs = g_AI_Manager.AccessAIs();
CAI_BaseNPC *pNPC;
for ( int i = 0; i < g_AI_Manager.NumAIs(); i++ )
{
pNPC = ppAIs[i];
if( pNPC->Classify() == CLASS_PLAYER_ALLY || pNPC->Classify() == CLASS_PLAYER_ALLY_VITAL && pNPC->FVisible(this) )
{
int priority;
Disposition_t disposition;
priority = pNPC->IRelationPriority(this);
disposition = pNPC->IRelationType(this);
pNPC->AddEntityRelationship( this, disposition, priority + 1 );
}
}
}
m_iGrenadeCount--;
}
return;
}
if ( pEvent->event == AE_NPC_ATTACK_BROADCAST )
{
if ( HasGrenade() )
return;
}
BaseClass::HandleAnimEvent( pEvent );
}
示例5: FindNearestNPC
//---------------------------------------------------------
// Returns distance to the nearest BaseCombatCharacter.
//---------------------------------------------------------
float CBounceBomb::FindNearestNPC()
{
float flNearest = (BOUNCEBOMB_WARN_RADIUS * BOUNCEBOMB_WARN_RADIUS) + 1.0;
// Assume this search won't find anyone.
SetNearestNPC( NULL );
CAI_BaseNPC **ppAIs = g_AI_Manager.AccessAIs();
int nAIs = g_AI_Manager.NumAIs();
for ( int i = 0; i < nAIs; i++ )
{
CAI_BaseNPC *pNPC = ppAIs[ i ];
if( pNPC->IsAlive() )
{
// ignore hidden objects
if ( pNPC->IsEffectActive( EF_NODRAW ) )
continue;
// Don't bother with NPC's that are below me.
if( pNPC->EyePosition().z < GetAbsOrigin().z )
continue;
// Disregard things that want to be disregarded
if( pNPC->Classify() == CLASS_NONE )
continue;
// Disregard bullseyes
if( pNPC->Classify() == CLASS_BULLSEYE )
continue;
// Disregard turrets
if( pNPC->m_iClassname == gm_iszFloorTurretClassname || pNPC->m_iClassname == gm_iszGroundTurretClassname )
continue;
float flDist = (GetAbsOrigin() - pNPC->GetAbsOrigin()).LengthSqr();
if( flDist < flNearest )
{
// Now do a visibility test.
if( FVisible( pNPC, MASK_SOLID_BRUSHONLY ) )
{
flNearest = flDist;
SetNearestNPC( pNPC );
}
}
}
}
// finally, check the player.
CBasePlayer *pPlayer = UTIL_GetLocalPlayer();
if( pPlayer && !(pPlayer->GetFlags() & FL_NOTARGET) )
{
float flDist = (pPlayer->GetAbsOrigin() - GetAbsOrigin() ).LengthSqr();
if( flDist < flNearest && FVisible( pPlayer, MASK_SOLID_BRUSHONLY ) )
{
flNearest = flDist;
SetNearestNPC( pPlayer );
}
}
if( m_hNearestNPC.Get() )
{
// If sprite is active, update its color to reflect who is nearest.
if( IsFriend( m_hNearestNPC ) )
{
if( m_bFoeNearest )
{
// Changing state to where a friend is nearest.
if( IsFriend( m_hNearestNPC ) )
{
// Friend
UpdateLight( true, 0, 255, 0, 190 );
m_bFoeNearest = false;
}
}
}
else // it's a foe
{
if( !m_bFoeNearest )
{
// Changing state to where a foe is nearest.
UpdateLight( true, 255, 0, 0, 190 );
m_bFoeNearest = true;
}
}
}
return sqrt( flNearest );
}