gcc_pure static bool IsReachable(const GlideResult &result, bool final_glide) { return final_glide ? result.IsFinalGlide() : result.IsAchievable(); }
static void SetValueFromAltDiff(InfoBoxData &data, const TaskStats &task_stats, const GlideResult &solution) { if (!task_stats.task_valid || !solution.IsAchievable()) { data.SetInvalid(); return; } const ComputerSettings &settings = CommonInterface::GetComputerSettings(); fixed altitude_difference = solution.SelectAltitudeDifference(settings.task.glide); data.SetValueFromArrival(altitude_difference); }
void InfoBoxContentNextAltitudeArrival::Update(InfoBoxData &data) { // pilots want this to be assuming terminal flight to this wp const MoreData &basic = CommonInterface::Basic(); const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; const GlideResult next_solution = XCSoarInterface::Calculated().common_stats.next_solution; if (!task_stats.task_valid || !next_solution.IsAchievable()) { data.SetInvalid(); return; } data.SetValueFromAltitude(next_solution.GetArrivalAltitude(basic.nav_altitude)); }
void UpdateInfoBoxNextAltitudeArrival(InfoBoxData &data) { // pilots want this to be assuming terminal flight to this wp const MoreData &basic = CommonInterface::Basic(); const TaskStats &task_stats = CommonInterface::Calculated().task_stats; const GlideResult next_solution = task_stats.current_leg.solution_remaining; if (!basic.NavAltitudeAvailable() || !task_stats.task_valid || !next_solution.IsAchievable()) { data.SetInvalid(); return; } data.SetValueFromAltitude(next_solution.GetArrivalAltitude(basic.nav_altitude)); }
/** * Specialisation of AirspaceAircraftPerformance for tasks where * part of the path is in cruise, part in final glide. This is * intended to be used temporarily only. * * This simplifies the path by assuming flight is constant altitude * or descent to the task point elevation. */ AirspaceAircraftPerformance(const GlidePolar &polar, const GlideResult &solution) :vertical_tolerance(0.001), cruise_speed(positive(solution.time_elapsed) ? solution.vector.distance / solution.time_elapsed : fixed(1)), cruise_descent(positive(solution.time_elapsed) ? (positive(solution.height_climb) ? -solution.height_climb : solution.height_glide) / solution.time_elapsed : fixed(0)), descent_rate(polar.GetSBestLD()), climb_rate(positive(solution.time_elapsed) && positive(solution.height_climb) ? polar.GetMC() : fixed(0)), max_speed(cruise_speed) { assert(polar.IsValid()); assert(solution.IsOk()); assert(solution.IsAchievable()); }
/** * Determine whether the task (or subtask) is able to be finished * (will fail if MC too low, wind too high etc) * * @return True if can finish the task */ bool IsAchievable() const { return solution_remaining.IsAchievable(); }