1293 {
1295 vicinityObjects.Copy(objects);
1296
1297 int i = 0;
1298 int j = 0;
1299 int k = 0;
1300 int mCount = vicinityObjects.Count();
1301
1302 if (!filteredObjects)
1304
1305
1306 if ( doDistanceCheck )
1307 {
1308 for ( i = vicinityObjects.Count() - 1; i >= 0; --i )
1309 {
1310 Object obj = vicinityObjects[i];
1312 vicinityObjects.Remove(i);
1313 }
1314 }
1315
1316
1320 float distance, dist1, dist2;
1321
1322 for ( i = 0; i < obstructingObjects.Count(); ++i )
1323 {
1324 distance =
vector.
DistanceSq(obstructingObjects[i].GetWorldPosition(), origin);
1325 distanceHelper.Insert(distance);
1326 }
1327
1328 distanceHelperUnsorted.Copy(distanceHelper);
1329 distanceHelper.Sort();
1330
1331 for ( i = distanceHelper.Count() - 1; i >= 0; --i )
1332 sortedObstructingObjects.Insert(obstructingObjects[distanceHelperUnsorted.Find(distanceHelper[i])]);
1333
1337
1340
1341
1342 for ( i = 0; i < sortedObstructingObjects.Count(); ++i )
1343 {
1344 Object obstrObj = sortedObstructingObjects[i];
1345 vector worldPos = obstrObj.GetWorldPosition();
1348 if ( obstrObj.GetCollisionBox(minMax) )
1349 {
1350 min = minMax[0];
1351 max = minMax[1];
1352 max = max * (obstrObj.GetOrientation() * range);
1353
1354 vector center, dx, dy, dz, half;
1355 center = (min + max) * 0.5;
1356 dz = obstrObj.GetOrientation();
1359 half = (max - min) * 0.5;
1361
1363
1364
1365 for ( j = vicinityObjects.Count() - 1; j >= 0; --j )
1366 {
1367 Object vicObj = vicinityObjects[j];
1368 if ( vicObj )
1369 {
1370 vector d = vicObj.GetWorldPosition() - worldPos + center;
1372 {
1373 group.Insert(vicObj);
1374 vicinityObjects.Remove(j);
1375 }
1376 }
1377 }
1378
1379 if ( group.Count() > 0 )
1380 tempGroups.Insert(group);
1381 }
1382 }
1383
1384
1385 for ( i = 0; i < tempGroups.Count(); ++i )
1387
1388
1390
1391
1393 for ( i = 0; i < objectGroups.Count(); ++i )
1394 {
1396 Object sampleObject = objectGroup[0];
1397
1399 filteredObjects.InsertAll(objectGroup);
1400
1401 cache.ClearCache();
1402 }
1403 }
static bool CanIgnoreDistanceCheck(Object obj)
void IsObjectObstructedCache(vector rayCastStart, int totalObjects)
static bool IsObjectObstructedEx(Object object, IsObjectObstructedCache cache, bool doDistanceCheck=false, vector distanceCheckPos="0 0 0", float maxDist=0)
static void SplitArrayIntoGroupsByDistance(array< Object > objects, array< ref array< Object > > objectGroups, float squaredDistanceDelta)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static proto native float DistanceSq(vector v1, vector v2)
Returns the square distance between tips of two 3D vectors.
static const vector Aside
static float Dot(vector v1, vector v2)
Returns Dot product of vector v1 and vector v2.
static vector RotateAroundZero(vector pos, vector axis, float cosAngle, float sinAngle)
Rotate a vector around 0,0,0.
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
static proto float Cos(float angle)
Returns cosinus of angle in radians.
static proto float Sin(float angle)
Returns sinus of angle in radians.
static proto float AbsFloat(float f)
Returns absolute value.