+
+ if(start_new_route)
+ {
+ route = new Route(j->info->train->get_layout());
+ route->set_name("Router");
+ route->set_temporary(true);
+ for(unsigned k=0; (k<2 && history[k]); ++k)
+ route->add_track(*history[k]);
+ j->info->routes.push_front(route);
+ }
+
+ route->add_track(*j->track.track());
+ history[1] = history[0];
+ history[0] = j->track.track();
+
+ bool waitable = j->track.endpoint().paths!=j->track->get_type().get_paths();
+ map<Track *, TrainRouter::SequencePoint *>::iterator k = sequenced_tracks.find(j->track.track());
+ if(k!=sequenced_tracks.end())
+ {
+ if(!k->second->preceding_train)
+ {
+ k->second->preceding_train = j->info->train;
+ k->second->sequence_in = sequence;
+ }
+ j->info->sequence.push_front(TrainRouter::SequencePoint(j->track->get_block(), sequence));
+ if(waitable)
+ k->second = &j->info->sequence.front();
+ --sequence;
+ }
+ else if(waitable)
+ {
+ j->info->sequence.push_front(TrainRouter::SequencePoint(j->track->get_block(), sequence));
+ sequenced_tracks[j->track.track()] = &j->info->sequence.front();
+ --sequence;
+ }
+ }
+
+ result = COMPLETE;