-void TrainRouter::add_sequence_point(Block &b, Train &t, unsigned i, unsigned o)
-{
- SequencePoint sp(b, o);
- sp.preceding_train = &t;
- sp.sequence_in = i;
- sequence_points.push_back(sp);
+ reserving_route = routes.begin();
+ bool already_at_end = false;
+ if(!routes.empty())
+ {
+ TrackIter track = train.get_block_allocator().first().track_iter();
+ for(; track; track=track.next())
+ {
+ if(!advance_to_track(reserving_route, *track))
+ {
+ already_at_end = true;
+ break;
+ }
+ if(&track->get_block()==fncb.block())
+ break;
+ }
+ }
+
+ if(!already_at_end)
+ {
+ arrival = ON_THE_WAY;
+ train.stop_at(0);
+ train.refresh_blocks_from(*fncb);
+ }
+ else if(!arrival)
+ {
+ arrival = RESERVED_TO_END;
+ train.stop_at(&*fncb.flip());
+ train.refresh_blocks_from(*fncb);
+ }
+
+ const Route *route = get_route();
+ signal_route_changed.emit(route);
+ signal_event.emit(Message("route-changed", route));