const GeoPoint & ScoredTaskPoint::GetLocationScored() const { if (IsBoundaryScored() || !HasEntered()) return GetLocationMin(); return GetLocation(); }
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; }
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; }