bool CClientObjectManager::ObjectsAroundPointLoaded ( const CVector& vecPosition, float fRadius, unsigned short usDimension, SString* pstrStatus ) { // Get list of objects that may be intersecting the sphere CClientEntityResult result; GetClientSpatialDatabase()->SphereQuery ( result, CSphere ( vecPosition, fRadius ) ); bool bResult = true; // Extract relevant types for ( CClientEntityResult::const_iterator it = result.begin () ; it != result.end (); ++it ) { CClientEntity* pEntity = *it; if ( pEntity->GetType () == CCLIENTOBJECT ) { CClientObject* pObject = static_cast < CClientObject* > ( pEntity ); if ( !pObject->GetGameObject () || !pObject->GetModelInfo ()->IsLoaded () || !pObject->IsStreamedIn () ) { if ( pObject->GetDimension () == usDimension ) { // Final distance check float fDistSquared = pObject->GetDistanceToBoundingBoxSquared ( vecPosition ); if ( fDistSquared < fRadius * fRadius ) bResult = false; if ( pstrStatus ) { // Debugging information *pstrStatus += SString ( "ID:%05d Dist:%4.1f GetGameObject:%d IsLoaded:%d IsStreamedIn:%d\n" ,pObject->GetModel () ,sqrtf ( fDistSquared ) ,pObject->GetGameObject () ? 1 : 0 ,pObject->GetModelInfo ()->IsLoaded () ? 1 : 0 ,pObject->IsStreamedIn () ? 1 : 0 ); } else if ( !bResult ) break; } } } } return bResult; }