| 470 | } |
| 471 | |
| 472 | void xAccelStop(F32& x, F32& v, F32 a, F32 dt) |
| 473 | { |
| 474 | S32 aa; // From DWARF, currently unused. |
| 475 | F32 oldv; |
| 476 | |
| 477 | S32 var_r0; |
| 478 | S32 var_r5; |
| 479 | |
| 480 | oldv = v; |
| 481 | if (!(oldv >= -0.00001f) || !(oldv <= 0.00001f)) |
| 482 | { |
| 483 | if (oldv < 0.0f) |
| 484 | { |
| 485 | if (a > 0.0f) |
| 486 | { |
| 487 | a = -a; |
| 488 | } |
| 489 | } |
| 490 | else if (a < 0.0f) |
| 491 | { |
| 492 | a = -a; |
| 493 | } |
| 494 | |
| 495 | v += -a * dt; |
| 496 | |
| 497 | if (v < 0.0f) |
| 498 | { |
| 499 | var_r5 = 1; |
| 500 | } |
| 501 | else |
| 502 | { |
| 503 | var_r5 = 0; |
| 504 | } |
| 505 | |
| 506 | if (oldv < 0.0f) |
| 507 | { |
| 508 | var_r0 = 1; |
| 509 | } |
| 510 | else |
| 511 | { |
| 512 | var_r0 = 0; |
| 513 | } |
| 514 | |
| 515 | if (var_r0 == var_r5) |
| 516 | { |
| 517 | x += (-a * (0.5f * dt * dt)) + (oldv * dt); |
| 518 | return; |
| 519 | } |
| 520 | |
| 521 | if (!(-a >= -0.00001f) || !(-a <= 0.00001f)) |
| 522 | { |
| 523 | x -= (0.5f * oldv * oldv) / -a; |
| 524 | } |
| 525 | v = 0.0f; |
| 526 | } |
| 527 | } |
| 528 | |
| 529 | F32 xFuncPiece_Eval(xFuncPiece* func, F32 param, xFuncPiece** iterator) |