const Data &data = tracks[Key(track.track(), track.entry())];
const TrackType::Endpoint &ep = track.endpoint();
+
+ float multiplier = get_travel_multiplier(*track, track.entry());
for(unsigned i=0; ep.paths>>i; ++i)
if(ep.has_path(i))
{
continue;
Data &target = tracks[Key(next.track(), next.entry())];
- float dist = data.distance+track->get_type().get_path_length(i);
+ float dist = data.distance+track->get_type().get_path_length(i)*multiplier;
if(target.distance<0 || target.distance>dist)
{
target = Data(dist, data.goal);
return i->second.distance+i->second.goal->base_distance;
}
+float TrainRouteMetric::get_travel_multiplier(const Track &track, unsigned exit) const
+{
+ int pref = track.get_preferred_exit();
+ if(pref>=0 && exit!=static_cast<unsigned>(pref))
+ return 5;
+
+ return 1;
+}
+
TrainRouteMetric::Goal::Goal():
base_distance(0)