public GameObject NextPlatform(Player player, GameObject end) { var path = PlatformPath (player, end); GameObject next; if (path.Count == 1) { next = path.First (); } else { var plat0 = path [0]; var plat1 = path [1]; var between0and1 = plat1.Distance(plat0) > plat1.Distance(player); var closeEnough = player.Distance(plat0) < (1 * Player.Size.X) && player.Y >= plat0.Y; var unreachable1 = PlatformUtil.unreachable (Platforms, player, plat1); var bothAbove = plat1.TopBoundary > player.BottomBoundary && plat0.TopBoundary > player.BottomBoundary; next = (!bothAbove && !unreachable1 && (between0and1 || closeEnough)) ? plat1 : plat0; } return next; }
private bool shouldGoNext(Player player, GameObject plat0, GameObject plat1) { var between0and1 = plat1.Distance(plat0) > plat1.Distance(player); var closeEnough = player.Distance(plat0) < (1 * Player.Size.X) && player.Y >= plat0.Y; var unreachable1 = PlatformUtil.unreachable (Platforms, player, plat1); var bothAbove = plat1.TopBoundary > player.BottomBoundary && plat0.TopBoundary > player.BottomBoundary; return !bothAbove && !unreachable1 && (between0and1 || closeEnough); }