MCPcopy Create free account
hub / github.com/BohemiaInteractive/CWR / PredictCollision

Method PredictCollision

engine/Poseidon/World/Simulation/Collisions.cpp:1314–1396  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1312}
1313
1314void Landscape::PredictCollision(VehicleCollisionBuffer& ret, const Vehicle* vehicle, float maxTime, float gap,
1315 float maxDistance) const
1316{
1317 // Note: allow exclusions (e.g. bridges, gas-stations)
1318 float vRadius = vehicle->CollisionSize() * 0.8;
1319 float maxDist2 = vehicle->Speed().SquareSize() * Square(maxTime);
1320 saturateMax(maxDist2, Square(maxDistance));
1321 float radius = maxDist2 * InvSqrt(maxDist2);
1322 int xMin, xMax, zMin, zMax;
1323 Vector3Val vehPos = vehicle->Position();
1324 ::ObjRadiusRectangle(xMin, xMax, zMin, zMax, vehPos, radius);
1325 for (int x = xMin; x <= xMax; x++)
1326 {
1327 for (int z = zMin; z <= zMax; z++)
1328 {
1329 const ObjectListFull* list = _objects(x, z).GetList();
1330 if (!list || list->GetNonStaticCount() <= 0)
1331 {
1332 continue; // no vehicles in this list
1333 }
1334 for (int i = 0; i < list->Size(); i++)
1335 {
1336 const Object* obj = list->Get(i);
1337 if (obj->GetType() != TypeVehicle)
1338 {
1339 continue;
1340 }
1341 if (obj->Position().Distance2Inline(vehPos) > maxDist2)
1342 {
1343 continue;
1344 }
1345 const EntityAI* ai = dyn_cast<const EntityAI>(obj);
1346 if (!ai)
1347 {
1348 continue;
1349 }
1350 if (!obj->GetShape())
1351 {
1352 continue;
1353 }
1354 if (!obj->GetShape()->GeometryLevel())
1355 {
1356 continue;
1357 }
1358 if (!obj->HasGeometry())
1359 {
1360 continue;
1361 }
1362 if (obj == vehicle)
1363 {
1364 continue;
1365 }
1366 float minTime =
1367 NearestPoint(vehicle->Position(), vehicle->Speed(), obj->Position(), obj->ObjectSpeed());
1368 saturate(minTime, 0, maxTime);
1369 Vector3 pt1 = vehicle->Position() + vehicle->Speed() * minTime;
1370 Vector3 pt2 = obj->Position() + obj->ObjectSpeed() * minTime;
1371 float minDist2 = pt1.Distance2Inline(pt2);

Callers 3

PathAutopilotMethod · 0.80
AvoidCollisionMethod · 0.80
AvoidCollisionMethod · 0.80

Calls 15

saturateMaxFunction · 0.85
InvSqrtFunction · 0.85
ObjRadiusRectangleFunction · 0.85
saturateFunction · 0.85
InterpolativFunction · 0.85
sqrtFunction · 0.85
GetNonStaticCountMethod · 0.80
GeometryLevelMethod · 0.80
ObjectSpeedMethod · 0.80
NearestPointFunction · 0.70
SquareFunction · 0.50
CollisionSizeMethod · 0.45

Tested by

no test coverage detected