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

Function xSpline3_EvalSeg

src/SB/Core/x/xSpline.cpp:448–494  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

446}
447
448void xSpline3_EvalSeg(xSpline3* spl, F32 u, U32 deriv, xVec3* o)
449{
450 xCoef3 tempCoef;
451 F32 temp_u;
452 F32 new_u;
453 U32 seg;
454
455 if ((U16)spl->type == 4)
456 {
457 EvalBspline3(spl, u, deriv, o);
458 return;
459 }
460 if (u < 0.0f)
461 {
462 u = 0.0f;
463 }
464 temp_u = floorf(u);
465 seg = (U32)temp_u;
466 if (seg >= spl->N)
467 {
468 new_u = 1.0f;
469 seg = spl->N - 1;
470 }
471 else
472 {
473 new_u = u - temp_u;
474 }
475
476 switch (spl->type)
477 {
478 case 1:
479 EvalCoef3(spl->coef + (seg * 0x30), new_u, deriv, o);
480 return;
481 case 2:
482 BasisToCoef3(&tempCoef, (f32(*)[4])sBasisHermite, spl->points + (seg * 0xC),
483 spl->p12 + (seg * 0x18), spl->p12 + (seg * 0x18) + 0xC,
484 spl->points + (seg * 0xC) + 0xC);
485 EvalCoef3(&tempCoef, new_u, deriv, o);
486 return;
487 case 3:
488 BasisToCoef3(&tempCoef, (F32(*)[4])sBasisBezier, spl->points + (seg * 0xC),
489 spl->p12 + (seg * 0x18), spl->p12 + (seg * 0x18) + 0xC,
490 spl->points + (seg * 0xC) + 0xC);
491 EvalCoef3(&tempCoef, new_u, deriv, o);
492 return;
493 }
494}
495
496F32 ArcEvalIterate(xSpline3* spl, F32 s, U32 deriv, xVec3* o, U32 iterations)
497{

Callers 2

xSpline3_EvalArcApproxFunction · 0.70
xEntMPMoveFunction · 0.70

Calls 4

floorfFunction · 0.85
EvalCoef3Function · 0.85
BasisToCoef3Function · 0.85
EvalBspline3Function · 0.70

Tested by

no test coverage detected