//----------------------------------------------------------------------------- // Is the enemy visible? //----------------------------------------------------------------------------- bool CNPC_APCDriver::FVisible( CBaseEntity *pTarget, int traceMask, CBaseEntity **ppBlocker ) { if ( m_hAPC->m_lifeState != LIFE_ALIVE ) return false; if ( IsBeingCarried() || m_bFiringDisabled ) return false; float flTargetDist = GetAbsOrigin().DistTo( pTarget->GetAbsOrigin() ); if (flTargetDist > m_hAPC->MaxAttackRange()) return false; bool bVisible = m_hAPC->FVisible( pTarget, traceMask, ppBlocker ); if ( bVisible && (pTarget == GetEnemy()) ) { m_flTimeLastSeenEnemy = gpGlobals->curtime; } if ( pTarget->IsPlayer() || pTarget->Classify() == CLASS_BULLSEYE ) { if (!bVisible) { if ( ( gpGlobals->curtime - m_flTimeLastSeenEnemy ) <= NPC_APCDRIVER_REMEMBER_TIME ) return true; } } return bVisible; }