- BlockIter fncb = train.get_first_noncritical_block();
- TrackIter next_track = fncb.track_iter();
- if(!routes.front()->has_track(*next_track.flip()))
+ BlockIter lcb = train.get_last_critical_block();
+ TrackIter last_track_rev = lcb.reverse().track_iter();
+
+ unsigned count = 0;
+ for(TrackIter i=last_track_rev; (i && i->get_block().get_train()==&train); i=i.next())
+ {
+ if(routes.front()->has_track(*i))
+ ++count;
+ else if(count>0)
+ {
+ if(count==routes.front()->get_tracks().size())
+ last_track_rev = i;
+ break;
+ }
+ }
+
+ TrackIter next_track = last_track_rev.flip();
+ if(!routes.front()->has_track(*last_track_rev) && !routes.front()->has_track(*next_track))