inline fixed TaskLeg::GetScoredDistance(const GeoPoint &ref) const { if (!GetOrigin()) return fixed(0); switch (destination.GetActiveState()) { case OrderedTaskPoint::BEFORE_ACTIVE: // this leg totally included return std::max(fixed(0), GetOrigin()->GetLocationScored().Distance(destination.GetLocationScored()) - GetOrigin()->ScoreAdjustment()-destination.ScoreAdjustment()); case OrderedTaskPoint::CURRENT_ACTIVE: // this leg partially included if (destination.HasEntered()) { return std::max(fixed(0), GetOrigin()->GetLocationScored().Distance(destination.GetLocationScored()) - GetOrigin()->ScoreAdjustment()-destination.ScoreAdjustment()); } else if (ref.IsValid()) return std::max(fixed(0), ref.ProjectedDistance(GetOrigin()->GetLocationScored(), destination.GetLocationScored()) -GetOrigin()->ScoreAdjustment()); else return fixed(0); case OrderedTaskPoint::AFTER_ACTIVE: // this leg may be partially included if (GetOrigin()->HasEntered() && ref.IsValid()) { return std::max(fixed(0), memo_travelled.calc(GetOrigin()->GetLocationScored(), ref).distance -GetOrigin()->ScoreAdjustment()); } return fixed(0); } gcc_unreachable(); assert(false); return fixed(0); }
fixed TaskLeg::GetScoredDistance(const GeoPoint &ref) const { if (!GetOrigin()) return fixed_zero; switch (destination.GetActiveState()) { case OrderedTaskPoint::BEFORE_ACTIVE: // this leg totally included return max(fixed_zero, GetOrigin()->GetLocationScored().Distance(destination.GetLocationScored()) - GetOrigin()->ScoreAdjustment()-destination.ScoreAdjustment()); break; case OrderedTaskPoint::CURRENT_ACTIVE: // this leg partially included if (destination.HasEntered()) { max(fixed_zero, GetOrigin()->GetLocationScored().Distance(destination.GetLocationScored()) - GetOrigin()->ScoreAdjustment()-destination.ScoreAdjustment()); } else { return max(fixed_zero, ref.ProjectedDistance(GetOrigin()->GetLocationScored(), destination.GetLocationScored()) -GetOrigin()->ScoreAdjustment()); } break; case OrderedTaskPoint::AFTER_ACTIVE: // this leg may be partially included if (GetOrigin()->HasEntered()) { return max(fixed_zero, memo_travelled.calc(GetOrigin()->GetLocationScored(), ref).distance -GetOrigin()->ScoreAdjustment()); } default: return fixed_zero; break; }; return fixed_zero; }