MCPcopy Create free account
hub / github.com/bfbbdecomp/bfbb / xSweptSphereToTriangle

Function xSweptSphereToTriangle

src/SB/Core/x/xCollide.cpp:1363–1565  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1361
1362 F32 rad = sws->radius;
1363
1364 if ((xform[0].x <= -rad && xform[1].x <= -rad && xform[2].x <= -rad) ||
1365 (xform[0].x >= rad && xform[1].x >= rad && xform[2].x >= rad) ||
1366 (xform[0].y <= -rad && xform[1].y <= -rad && xform[2].y <= -rad) ||
1367 (xform[0].y >= rad && xform[1].y >= rad && xform[2].y >= rad) ||
1368 (xform[0].z <= 0.0f && xform[1].z <= 0.0f && xform[2].z <= 0.0f) ||
1369 (xform[0].z >= sws->curdist + rad && xform[1].z >= sws->curdist + rad &&
1370 xform[2].z >= sws->curdist + rad))
1371 {
1372 return 0;
1373 }
1374
1375 xVec3 var_10C;
1376 F32 f1;
1377 var_10C.x = (xform[1].y - xform[0].y) * (xform[2].z - xform[0].z) -
1378 (xform[1].z - xform[0].z) * (xform[2].y - xform[0].y);
1379 var_10C.y = (xform[1].z - xform[0].z) * (xform[2].x - xform[0].x) -
1380 (xform[1].x - xform[0].x) * (xform[2].z - xform[0].z);
1381 var_10C.z = (xform[1].x - xform[0].x) * (xform[2].y - xform[0].y) -
1382 (xform[1].y - xform[0].y) * (xform[2].x - xform[0].x);
1383 _rwV3dNormalizeMacro(f1, (RwV3d*)&var_10C, (RwV3d*)&var_10C);
1384 if (isnan(var_10C.x))
1385 {
1386 return 0;
1387 }
1388
1389 F32 f1_0 = xform[0].x * var_10C.x + xform[0].y * var_10C.y + xform[0].z * var_10C.z;
1390 F32 f0 = f1_0 - var_10C.z * sws->curdist;
1391 if ((f1_0 >= rad && f0 >= rad) || (f1_0 <= -rad && f0 <= -rad))
1392 {
1393 return 0;
1394 }
1395
1396 if (xabs(var_10C.z) > 0.001f)
1397 {
1398 F32 f8_0 = 1.0f / var_10C.z;
1399 F32 f2_0 = var_10C.x * xform[0].x + var_10C.y * xform[0].y + var_10C.z * xform[0].z;
1400 F32 f0 = f8_0 * f2_0 - xabs(rad * f8_0);
1401 if (f0 >= sws->curdist)
1402 {
1403 return 0;
1404 }
1405 if (f0 <= -rad)
1406 {
1407 return 0;
1408 }
1409 xVec3 var_118;
1410 if (var_10C.z < 0.0f)
1411 {
1412 var_118.x = -rad * var_10C.x;
1413 var_118.y = -rad * var_10C.y;
1414 var_118.z = f0 - rad * var_10C.z;
1415 }
1416 else
1417 {
1418 var_118.x = rad * var_10C.x;
1419 var_118.y = rad * var_10C.y;
1420 var_118.z = rad * var_10C.z + f0;

Callers 4

SweptSphereHitsEnvCBFunction · 0.70
SweptSphereLeafNodeCBFunction · 0.70
SweptSphereModelCBFunction · 0.70
xSweptSphereToModelFunction · 0.70

Calls 3

xMat4x3ToworldFunction · 0.85
xsqrtfastFunction · 0.85
xsqrtFunction · 0.85

Tested by

no test coverage detected