State: LS_SPRINT (73) Collision: lara_col_sprint()
| 1696 | // State: LS_SPRINT (73) |
| 1697 | // Collision: lara_col_sprint() |
| 1698 | void lara_as_sprint(ItemInfo* item, CollisionInfo* coll) |
| 1699 | { |
| 1700 | auto& player = GetLaraInfo(*item); |
| 1701 | |
| 1702 | bool isWading = (player.Control.WaterStatus == WaterStatus::Wade); |
| 1703 | |
| 1704 | player.Status.Stamina = std::clamp(player.Status.Stamina - 1, 0, (int)LARA_STAMINA_MAX); |
| 1705 | player.Control.Count.Run = std::clamp<unsigned int>(player.Control.Count.Run + 1, 0, PLAYER_SPRINT_JUMP_TIME); |
| 1706 | |
| 1707 | if (item->HitPoints <= 0) |
| 1708 | { |
| 1709 | item->Animation.TargetState = LS_DEATH; |
| 1710 | return; |
| 1711 | } |
| 1712 | |
| 1713 | if (IsHeld(In::Left) || IsHeld(In::Right)) |
| 1714 | { |
| 1715 | ModulateLaraTurnRateY(item, LARA_TURN_RATE_ACCEL, 0, LARA_SLOW_TURN_RATE_MAX); |
| 1716 | HandlePlayerLean(item, coll, LARA_LEAN_RATE, LARA_LEAN_MAX); |
| 1717 | } |
| 1718 | |
| 1719 | if (IsHeld(In::Jump) || player.Control.IsRunJumpQueued) |
| 1720 | { |
| 1721 | // TODO: CanSprintJumpForward() should handle HasSprintJump() check. |
| 1722 | if (IsHeld(In::Walk) || !g_GameFlow->GetSettings()->Animations.SprintJump) |
| 1723 | { |
| 1724 | item->Animation.TargetState = LS_SPRINT_DIVE; |
| 1725 | return; |
| 1726 | } |
| 1727 | else if (IsHeld(In::Sprint) && CanSprintJumpForward(*item, *coll)) |
| 1728 | { |
| 1729 | item->Animation.TargetState = LS_JUMP_FORWARD; |
| 1730 | return; |
| 1731 | } |
| 1732 | |
| 1733 | player.Control.IsRunJumpQueued = CanQueueRunningJump(*item, *coll); |
| 1734 | } |
| 1735 | |
| 1736 | if (IsHeld(In::Crouch) && CanCrouch(*item, *coll)) |
| 1737 | { |
| 1738 | item->Animation.TargetState = LS_CROUCH_IDLE; |
| 1739 | return; |
| 1740 | } |
| 1741 | |
| 1742 | if (IsHeld(In::Forward)) |
| 1743 | { |
| 1744 | if (IsHeld(In::Action) && CanVaultFromSprint(*item, *coll)) |
| 1745 | { |
| 1746 | auto vaultContext = TestLaraVault(item, coll); |
| 1747 | if (vaultContext.has_value()) |
| 1748 | { |
| 1749 | item->Animation.TargetState = vaultContext->TargetState; |
| 1750 | SetLaraVault(item, coll, *vaultContext); |
| 1751 | return; |
| 1752 | } |
| 1753 | } |
| 1754 | |
| 1755 | if (isWading) |
nothing calls this directly
no test coverage detected