1300 {
1302 vicinityObjects.Copy(objects);
1303
1304 int i = 0;
1305 int j = 0;
1306 int k = 0;
1307 int mCount = vicinityObjects.Count();
1308
1309 if (!filteredObjects)
1311
1312
1313 if ( doDistanceCheck )
1314 {
1315 for ( i = vicinityObjects.Count() - 1; i >= 0; --i )
1316 {
1317 Object obj = vicinityObjects[i];
1319 vicinityObjects.Remove(i);
1320 }
1321 }
1322
1323
1327 float distance, dist1, dist2;
1328
1329 for ( i = 0; i < obstructingObjects.Count(); ++i )
1330 {
1331 distance =
vector.
DistanceSq(obstructingObjects[i].GetWorldPosition(), origin);
1332 distanceHelper.Insert(distance);
1333 }
1334
1335 distanceHelperUnsorted.Copy(distanceHelper);
1336 distanceHelper.Sort();
1337
1338 for ( i = distanceHelper.Count() - 1; i >= 0; --i )
1339 sortedObstructingObjects.Insert(obstructingObjects[distanceHelperUnsorted.Find(distanceHelper[i])]);
1340
1344
1347
1348
1349 for ( i = 0; i < sortedObstructingObjects.Count(); ++i )
1350 {
1351 Object obstrObj = sortedObstructingObjects[i];
1352 vector worldPos = obstrObj.GetWorldPosition();
1355 if ( obstrObj.GetCollisionBox(minMax) )
1356 {
1357 min = minMax[0];
1358 max = minMax[1];
1359 max = max * (obstrObj.GetOrientation() * range);
1360
1361 vector center, dx, dy, dz, half;
1362 center = (min + max) * 0.5;
1363 dz = obstrObj.GetOrientation();
1366 half = (max - min) * 0.5;
1368
1370
1371
1372 for ( j = vicinityObjects.Count() - 1; j >= 0; --j )
1373 {
1374 Object vicObj = vicinityObjects[j];
1375 if ( vicObj )
1376 {
1377 vector d = vicObj.GetWorldPosition() - worldPos + center;
1379 {
1380 group.Insert(vicObj);
1381 vicinityObjects.Remove(j);
1382 }
1383 }
1384 }
1385
1386 if ( group.Count() > 0 )
1387 tempGroups.Insert(group);
1388 }
1389 }
1390
1391
1392 for ( i = 0; i < tempGroups.Count(); ++i )
1394
1395
1397
1398
1400 for ( i = 0; i < objectGroups.Count(); ++i )
1401 {
1403 Object sampleObject = objectGroup[0];
1404
1406 filteredObjects.InsertAll(objectGroup);
1407
1408 cache.ClearCache();
1409 }
1410 }
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.