private float SimulateJumpWithVelocity(Vector2 startVelocity, float windSpeed) { var position = new Vector2(0, 0); var velocity = startVelocity; while (position.y >= hill.LandingArea(position.x)) { var velocityAir = velocity + velocity.normalized * windSpeed; var liftVec = new Vector2(-velocityAir.normalized.y, velocityAir.normalized.x); var angle = -Mathf.Rad2Deg * Mathf.Atan2(velocityAir.y, velocityAir.x); var lift = GetLift(angle); var drag = GetDrag(angle); var force = -velocityAir.normalized * ((float)drag * velocityAir.sqrMagnitude) + liftVec * ((float)lift * velocityAir.sqrMagnitude); force *= aeroForceScale; velocity += (force + gravity) * timeDelta; position += velocity * timeDelta; } return(Distance(position)); }