1304 {
1306 vicinityObjects.Copy(objects);
1307
1308 int i = 0;
1309 int j = 0;
1310 int k = 0;
1311 int mCount = vicinityObjects.Count();
1312
1313 if (!filteredObjects)
1315
1316
1317 if ( doDistanceCheck )
1318 {
1319 for ( i = vicinityObjects.Count() - 1; i >= 0; --i )
1320 {
1321 Object obj = vicinityObjects[i];
1323 vicinityObjects.Remove(i);
1324 }
1325 }
1326
1327
1331 float distance, dist1, dist2;
1332
1333 for ( i = 0; i < obstructingObjects.Count(); ++i )
1334 {
1335 distance =
vector.
DistanceSq(obstructingObjects[i].GetWorldPosition(), origin);
1336 distanceHelper.Insert(distance);
1337 }
1338
1339 distanceHelperUnsorted.Copy(distanceHelper);
1340 distanceHelper.Sort();
1341
1342 for ( i = distanceHelper.Count() - 1; i >= 0; --i )
1343 sortedObstructingObjects.Insert(obstructingObjects[distanceHelperUnsorted.Find(distanceHelper[i])]);
1344
1348
1351
1352
1353 for ( i = 0; i < sortedObstructingObjects.Count(); ++i )
1354 {
1355 Object obstrObj = sortedObstructingObjects[i];
1356 vector worldPos = obstrObj.GetWorldPosition();
1359 if ( obstrObj.GetCollisionBox(minMax) )
1360 {
1361 min = minMax[0];
1362 max = minMax[1];
1363 max = max * (obstrObj.GetOrientation() * range);
1364
1365 vector center, dx, dy, dz, half;
1366 center = (min + max) * 0.5;
1367 dz = obstrObj.GetOrientation();
1370 half = (max - min) * 0.5;
1372
1374
1375
1376 for ( j = vicinityObjects.Count() - 1; j >= 0; --j )
1377 {
1378 Object vicObj = vicinityObjects[j];
1379 if ( vicObj )
1380 {
1381 vector d = vicObj.GetWorldPosition() - worldPos + center;
1383 {
1384 group.Insert(vicObj);
1385 vicinityObjects.Remove(j);
1386 }
1387 }
1388 }
1389
1390 if ( group.Count() > 0 )
1391 tempGroups.Insert(group);
1392 }
1393 }
1394
1395
1396 for ( i = 0; i < tempGroups.Count(); ++i )
1398
1399
1401
1402
1405 {
1406 foreach (
Object filteredObject : objectGroup)
1407 {
1409 filteredObjects.Insert(filteredObject);
1410 }
1411
1412 }
1413
1414 cache.ClearCache();
1415 }
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.