bool TrainRouter::set_route(const Route *r)
{
- train.free_noncritical_blocks();
+ BlockIter fncb = train.get_first_noncritical_block();
Route *lead = 0;
if(r && train.is_placed())
{
const BlockAllocator &allocator = train.get_block_allocator();
TrackIter first = allocator.first().track_iter();
- TrackIter next = allocator.last().next().track_iter();
+ TrackIter next = fncb.track_iter();
if(!r->has_track(*next))
{
lead = Route::find(next, *r);
train.stop_at(0);
arriving = false;
- train.reserve_more();
+ train.refresh_blocks_from(*fncb);
const Route *route = get_route();
signal_route_changed.emit(route);
}
}
-void TrainRouter::tick(const Time::TimeStamp &, const Time::TimeDelta &)
+void TrainRouter::tick(const Time::TimeDelta &)
{
if(update_pending)
create_plans(train.get_layout());
if(arriving && !train.get_speed())
{
- train.set_active(false);
signal_arrived.emit();
signal_event.emit(Message("arrived"));
set_route(0);