Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
StartPoint*
AbstractTaskFactory::CreateStart(ObservationZonePoint* oz,
                                 const Waypoint& wp) const
{
  return new StartPoint(oz, wp, behaviour,
                        GetOrderedTaskSettings().start_constraints);
}
Ejemplo n.º 3
0
FinishPoint*
AbstractTaskFactory::CreateFinish(ObservationZonePoint* oz,
                                  const Waypoint& wp) const
{
  return new FinishPoint(oz, wp, behaviour,
                         GetOrderedTaskSettings().finish_constraints);
}
Ejemplo n.º 4
0
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;
}