| 790 | } |
| 791 | |
| 792 | bool CanLand(const ItemInfo& item, const CollisionInfo& coll) |
| 793 | { |
| 794 | float projVerticalVel = item.Animation.Velocity.y + GetEffectiveGravity(item.Animation.Velocity.y); |
| 795 | |
| 796 | // 1) Check airborne status and vertical velocity. |
| 797 | if (!item.Animation.IsAirborne || projVerticalVel < 0.0f) |
| 798 | return false; |
| 799 | |
| 800 | // 2) Check for swamp. |
| 801 | if (TestEnvironment(ENV_FLAG_SWAMP, &item)) |
| 802 | return true; |
| 803 | |
| 804 | // Get point collision. |
| 805 | auto pointColl = GetPointCollision(item); |
| 806 | int vPos = item.Pose.Position.y; |
| 807 | |
| 808 | // 3) Assess point collision. |
| 809 | if ((pointColl.GetFloorHeight() - vPos) <= projVerticalVel) // Floor height is above projected vertical position. |
| 810 | return true; |
| 811 | |
| 812 | return false; |
| 813 | } |
| 814 | |
| 815 | bool CanPerformJump(const ItemInfo& item, const CollisionInfo& coll) |
| 816 | { |
no test coverage detected