// Copyright (C) 2007 Id Software, Inc. // #pragma hdrstop #include "precompiled.h" #include "NAV_local.h" #include "../Game_local.h" // for print and error #include "NAVCallback_FindAreaOutOfRange.h" /* ============ idNAVCallback_FindAreaOutOfRange::idNAVCallback_FindAreaOutOfRange ============ */ idNAVCallback_FindAreaOutOfRange::idNAVCallback_FindAreaOutOfRange( const idVec3& targetPos, float maxDist ) { this->targetPos = targetPos; this->maxDistSqr = maxDist * maxDist; } /* ============ idNAVCallback_FindAreaOutOfRange::AreaIsGoal ============ */ bool idNAVCallback_FindAreaOutOfRange::AreaIsGoal( const idNAV* aas, int areaNum ) { const idVec3& areaCenter = aas->AreaCenter( areaNum ); if( maxDistSqr > 0.0f ) { float dist = ( targetPos.ToVec2() - areaCenter.ToVec2() ).LengthSqr(); if( dist < maxDistSqr ) { return false; } } trace_t trace; gameLocal.clip.TracePoint( trace, targetPos, areaCenter + idVec3( 0.0f, 0.0f, 1.0f ), MASK_OPAQUE, NULL ); if( trace.fraction < 1.0f ) { return false; } return true; }