State: LS_RUN_BACK (5) Control: lara_as_run_back()
| 736 | // State: LS_RUN_BACK (5) |
| 737 | // Control: lara_as_run_back() |
| 738 | void lara_col_run_back(ItemInfo* item, CollisionInfo* coll) |
| 739 | { |
| 740 | auto& player = GetLaraInfo(*item); |
| 741 | |
| 742 | player.Control.MoveAngle = item->Pose.Orientation.y + ANGLE(180.0f); |
| 743 | item->Animation.Velocity.y = 0; |
| 744 | item->Animation.IsAirborne = false; |
| 745 | coll->Setup.LowerFloorBound = NO_LOWER_BOUND; |
| 746 | coll->Setup.UpperFloorBound = -STEPUP_HEIGHT; |
| 747 | coll->Setup.LowerCeilingBound = 0; |
| 748 | coll->Setup.ForwardAngle = player.Control.MoveAngle; |
| 749 | GetCollisionInfo(coll, item); |
| 750 | |
| 751 | if (TestLaraHitCeiling(coll)) |
| 752 | { |
| 753 | SetLaraHitCeiling(item, coll); |
| 754 | return; |
| 755 | } |
| 756 | |
| 757 | if (coll->Middle.Floor > (STEPUP_HEIGHT / 2)) |
| 758 | { |
| 759 | SetLaraFallBackAnimation(item); |
| 760 | return; |
| 761 | } |
| 762 | |
| 763 | if (CanSlide(*item, *coll)) |
| 764 | { |
| 765 | SetLaraSlideAnimation(item, coll); |
| 766 | return; |
| 767 | } |
| 768 | |
| 769 | if (LaraDeflectEdge(item, coll)) |
| 770 | LaraCollideStop(item, coll); |
| 771 | |
| 772 | if (CanChangeElevation(*item, *coll)) |
| 773 | { |
| 774 | HandlePlayerElevationChange(item, coll); |
| 775 | return; |
| 776 | } |
| 777 | } |
| 778 | |
| 779 | // State: LS_TURN_RIGHT_SLOW (6), LS_TURN_LEFT_SLOW (7) |
| 780 | // Collision: lara_col_turn_slow() |
nothing calls this directly
no test coverage detected