void TaskAutoPilot::update_mode(const TaskAccessor& task, const AircraftState& state) { switch (acstate) { case Cruise: /* XXX this condition is probably broken */ if (awp > 0 && !negative(task.remaining_alt_difference())) { acstate = FinalGlide; on_mode_change(); } else { if (state.altitude<=target_height(task)) { acstate = Climb; on_mode_change(); } } break; case FinalGlide: if (task.remaining_alt_difference()<-fixed_20) { acstate = Climb; on_mode_change(); } break; case Climb: /* XXX this condition is probably broken */ if (awp > 0 && !negative(task.remaining_alt_difference())) { acstate = FinalGlide; on_mode_change(); } else if (state.altitude>=fixed_1500) { acstate = Cruise; on_mode_change(); } break; }; }
void TaskAutoPilot::update_mode(const TaskAccessor& task, const AIRCRAFT_STATE& state) { switch (acstate) { case Cruise: if ((awp>0) && (task.distance_to_final()<= state.Speed)) { acstate = FinalGlide; on_mode_change(); } else { if (state.NavAltitude<=target_height(task)) { acstate = Climb; on_mode_change(); } } break; case FinalGlide: if (task.remaining_alt_difference()<-fixed_20) { acstate = Climb; on_mode_change(); } break; case Climb: if ((awp>0) && (task.distance_to_final()<= state.Speed)) { acstate = FinalGlide; on_mode_change(); } else if (state.NavAltitude>=fixed_1500) { acstate = Cruise; on_mode_change(); } break; }; }