X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrainrouter.cpp;h=a0f30e92ae43d9a7f2bde2a6a85046245d836dfa;hb=7ee0b97b7bea5b1b315d3d7847e15b987b0751f5;hp=01205fa834a3fc5575a334be2f67ed8a47109cf4;hpb=ef70d27737dd8333aef142e4810dc223b7bc7696;p=r2c2.git diff --git a/source/libr2c2/trainrouter.cpp b/source/libr2c2/trainrouter.cpp index 01205fa..a0f30e9 100644 --- a/source/libr2c2/trainrouter.cpp +++ b/source/libr2c2/trainrouter.cpp @@ -62,6 +62,7 @@ bool TrainRouter::set_route(const Route *r) routes.clear(); if(lead) routes.push_back(lead); + // TODO Check if eclipsed by lead route if(r) routes.push_back(r); @@ -227,9 +228,23 @@ void TrainRouter::tick(const Time::TimeDelta &dt) if(planner->get_result()==TrainRoutePlanner::COMPLETE) { const list &planned_routes = planner->get_routes_for(train); + routes.clear(); - routes.push_back(create_lead_route(0, planned_routes.front())); - routes.insert(routes.end(), planned_routes.begin(), planned_routes.end()); + Route *lead = create_lead_route(0, planned_routes.front()); + routes.push_back(lead); + + list::const_iterator begin = planned_routes.begin(); + for(; begin!=planned_routes.end(); ++begin) + { + const Route::TrackSet &tracks = (*begin)->get_tracks(); + bool eclipsed = true; + for(Route::TrackSet::const_iterator i=tracks.begin(); (eclipsed && i!=tracks.end()); ++i) + eclipsed = lead->has_track(**i); + if(!eclipsed) + break; + } + routes.insert(routes.end(), begin, planned_routes.end()); + sequence_points = planner->get_sequence_for(train); current_sequence = 0; sequence_check_pending = false;