예제 #1
0
const GeoPoint &
ScoredTaskPoint::GetLocationScored() const
{
  if (IsBoundaryScored() || !HasEntered())
    return GetLocationMin();

  return GetLocation();
}
예제 #2
0
OrderedTaskPoint *
OrderedTaskPoint::Clone(const TaskBehaviour &task_behaviour,
                        const OrderedTaskSettings &ordered_task_settings,
                        const Waypoint *waypoint) const
{
  if (waypoint == NULL)
    waypoint = &GetWaypoint();

  switch (GetType()) {
  case TaskPointType::START:
    return new StartPoint(GetObservationZone().Clone(waypoint->location),
                          *waypoint, task_behaviour,
                          ordered_task_settings.start_constraints);

  case TaskPointType::AST: {
    const ASTPoint &src = *(const ASTPoint *)this;
    ASTPoint *dest =
      new ASTPoint(GetObservationZone().Clone(waypoint->location),
                   *waypoint, task_behaviour, IsBoundaryScored());
    dest->SetScoreExit(src.GetScoreExit());
    return dest;
  }

  case TaskPointType::AAT:
    return new AATPoint(GetObservationZone().Clone(waypoint->location),
                        *waypoint, task_behaviour);

  case TaskPointType::FINISH:
    return new FinishPoint(GetObservationZone().Clone(waypoint->location),
                           *waypoint, task_behaviour,
                           ordered_task_settings.finish_constraints,
                           IsBoundaryScored());

  case TaskPointType::UNORDERED:
    /* an OrderedTaskPoint must never be UNORDERED */
    gcc_unreachable();
    assert(false);
    break;
  }

  return NULL;
}
예제 #3
0
OrderedTaskPoint* 
OrderedTaskPoint::Clone(const TaskBehaviour &task_behaviour,
                        const OrderedTaskBehaviour &ordered_task_behaviour,
                        const Waypoint* waypoint) const
{
  if (waypoint == NULL)
    waypoint = &GetWaypoint();

  switch (GetType()) {
  case TaskPointType::START:
    return new StartPoint(GetObservationZone().Clone(waypoint->location),
                          *waypoint, task_behaviour,
                          ordered_task_behaviour.start_constraints);

  case TaskPointType::AST:
    return new ASTPoint(GetObservationZone().Clone(waypoint->location),
                        *waypoint, task_behaviour, IsBoundaryScored());

  case TaskPointType::AAT:
    return new AATPoint(GetObservationZone().Clone(waypoint->location),
                        *waypoint, task_behaviour);

  case TaskPointType::FINISH:
    return new FinishPoint(GetObservationZone().Clone(waypoint->location),
                           *waypoint, task_behaviour,
                           ordered_task_behaviour.finish_constraints,
                           IsBoundaryScored());

  case TaskPointType::UNORDERED:
    /* an OrderedTaskPoint must never be UNORDERED */
    assert(false);
    break;
  }

  return NULL;
}