bool OrderedTask::UpdateIdle(const AircraftState &state, const GlidePolar &glide_polar) { bool retval = AbstractTask::UpdateIdle(state, glide_polar); if (HasStart() && task_behaviour.optimise_targets_range && GetOrderedTaskSettings().aat_min_time > 0) { CalcMinTarget(state, glide_polar, GetOrderedTaskSettings().aat_min_time + task_behaviour.optimise_targets_margin); if (task_behaviour.optimise_targets_bearing && task_points[active_task_point]->GetType() == TaskPointType::AAT) { AATPoint *ap = (AATPoint *)task_points[active_task_point]; // very nasty hack TaskOptTarget tot(task_points, active_task_point, state, task_behaviour.glide, glide_polar, *ap, task_projection, taskpoint_start); tot.search(0.5); } retval = true; } return retval; }
StartPoint* AbstractTaskFactory::CreateStart(ObservationZonePoint* oz, const Waypoint& wp) const { return new StartPoint(oz, wp, behaviour, GetOrderedTaskSettings().start_constraints); }
FinishPoint* AbstractTaskFactory::CreateFinish(ObservationZonePoint* oz, const Waypoint& wp) const { return new FinishPoint(oz, wp, behaviour, GetOrderedTaskSettings().finish_constraints); }
bool AbstractTaskFactory::AppendOptionalStart(const Waypoint& wp) { OrderedTaskPoint* tp = NULL; if (task.TaskSize()) tp = task.GetPoint(0).Clone(behaviour, GetOrderedTaskSettings(), &wp); else tp = CreateStart(wp); if (!tp) return false; // should never happen bool success = task.AppendOptionalStart(*tp); delete tp; return success; }