1437 {
1439 vicinityObjects.Copy(objects);
1440
1441 int i = 0;
1442 int j = 0;
1443 int k = 0;
1444 int mCount = vicinityObjects.Count();
1445
1446 if (!filteredObjects)
1448
1449
1450 if ( doDistanceCheck )
1451 {
1452 for ( i = vicinityObjects.Count() - 1; i >= 0; --i )
1453 {
1454 Object obj = vicinityObjects[i];
1456 vicinityObjects.Remove(i);
1457 }
1458 }
1459
1460
1464 float distance, dist1, dist2;
1465
1466 for ( i = 0; i < obstructingObjects.Count(); ++i )
1467 {
1468 distance =
vector.
DistanceSq(obstructingObjects[i].GetWorldPosition(), origin);
1469 distanceHelper.Insert(distance);
1470 }
1471
1472 distanceHelperUnsorted.Copy(distanceHelper);
1473 distanceHelper.Sort();
1474
1475 for ( i = distanceHelper.Count() - 1; i >= 0; --i )
1476 sortedObstructingObjects.Insert(obstructingObjects[distanceHelperUnsorted.Find(distanceHelper[i])]);
1477
1481
1484
1485
1486 for ( i = 0; i < sortedObstructingObjects.Count(); ++i )
1487 {
1488 Object obstrObj = sortedObstructingObjects[i];
1489 vector worldPos = obstrObj.GetWorldPosition();
1492 if ( obstrObj.GetCollisionBox(minMax) )
1493 {
1494 min = minMax[0];
1495 max = minMax[1];
1496 max = max * (obstrObj.GetOrientation() * range);
1497
1498 vector center, dx, dy, dz, half;
1499 center = (min + max) * 0.5;
1500 dz = obstrObj.GetOrientation();
1503 half = (max - min) * 0.5;
1505
1507
1508
1509 for ( j = vicinityObjects.Count() - 1; j >= 0; --j )
1510 {
1511 Object vicObj = vicinityObjects[j];
1512 if ( vicObj )
1513 {
1514 vector d = vicObj.GetWorldPosition() - worldPos + center;
1516 {
1517 group.Insert(vicObj);
1518 vicinityObjects.Remove(j);
1519 }
1520 }
1521 }
1522
1523 if ( group.Count() > 0 )
1524 tempGroups.Insert(group);
1525 }
1526 }
1527
1528
1529 for ( i = 0; i < tempGroups.Count(); ++i )
1531
1532
1534
1535
1538 {
1539 foreach (
Object filteredObject : objectGroup)
1540 {
1542 filteredObjects.Insert(filteredObject);
1543 }
1544
1545 }
1546
1547 cache.ClearCache();
1548 }
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.