//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- bool CBaseCombatCharacter::IsAbleToSee( const CBaseEntity *pEntity, FieldOfViewCheckType checkFOV ) { CBaseCombatCharacter *pBCC = const_cast<CBaseEntity *>( pEntity )->MyCombatCharacterPointer(); if ( pBCC ) return IsAbleToSee( pBCC, checkFOV ); // Test this every time; it's cheap. Vector vecEyePosition = EyePosition(); Vector vecTargetPosition = pEntity->WorldSpaceCenter(); #ifdef GAME_DLL Vector vecEyeToTarget; VectorSubtract( vecTargetPosition, vecEyePosition, vecEyeToTarget ); float flDistToOther = VectorNormalize( vecEyeToTarget ); // We can't see because they are too far in the fog if ( IsHiddenByFog( flDistToOther ) ) return false; #endif if ( !ComputeLOS( vecEyePosition, vecTargetPosition ) ) return false; return ( checkFOV != USE_FOV || IsInFieldOfView( vecTargetPosition ) ); }
bool CBaseCombatCharacter::IsAbleToSee( const CBaseEntity *pEntity, FieldOfViewCheckType checkFOV ) { CBaseCombatCharacter *pBCC = const_cast<CBaseEntity *>( pEntity )->MyCombatCharacterPointer(); if ( pBCC ) return IsAbleToSee( pBCC, checkFOV ); // Test this every time; it's cheap. Vector vecEyePosition = EyePosition(); Vector vecTargetPosition = pEntity->WorldSpaceCenter(); #ifdef GAME_DLL Vector vecEyeToTarget; VectorSubtract( vecTargetPosition, vecEyePosition, vecEyeToTarget ); float flDistToOther = VectorNormalize( vecEyeToTarget ); // We can't see because they are too far in the fog if ( IsHiddenByFog( flDistToOther ) ) return false; #endif if ( !ComputeLOS( vecEyePosition, vecTargetPosition ) ) return false; #if defined(GAME_DLL) && defined(TERROR) if ( flDistToOther > NavObscureRange.GetFloat() ) { const float flMaxDistance = 100.0f; TerrorNavArea *pTargetArea = static_cast< TerrorNavArea* >( TheNavMesh->GetNearestNavArea( vecTargetPosition, false, flMaxDistance ) ); if ( !pTargetArea || pTargetArea->HasSpawnAttributes( TerrorNavArea::SPAWN_OBSCURED ) ) return false; if ( ComputeTargetIsInDarkness( vecEyePosition, pTargetArea, vecTargetPosition ) ) return false; } #endif return ( checkFOV != USE_FOV || IsInFieldOfView( vecTargetPosition ) ); }