X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrainroutemetric.cpp;h=6577c84c7ff1ee732be6cb31cb4de305b319aac8;hb=5d40b436554081e785d213d2e03da7aa0d6631f0;hp=d3878d4aaec5d3b6dc875ee7b0453e0da82376f4;hpb=5ec71ac8d091bb70e70528138bba9edaccc7f55d;p=r2c2.git diff --git a/source/libr2c2/trainroutemetric.cpp b/source/libr2c2/trainroutemetric.cpp index d3878d4..6577c84 100644 --- a/source/libr2c2/trainroutemetric.cpp +++ b/source/libr2c2/trainroutemetric.cpp @@ -50,6 +50,8 @@ TrainRouteMetric::TrainRouteMetric(const TrackChain &tc, TrackChain::Direction d 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)) { @@ -58,7 +60,7 @@ TrainRouteMetric::TrainRouteMetric(const TrackChain &tc, TrackChain::Direction d 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); @@ -99,6 +101,15 @@ float TrainRouteMetric::get_distance_from(const Track &track, unsigned exit) con 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(pref)) + return 5; + + return 1; +} + TrainRouteMetric::Goal::Goal(): base_distance(0)