+ {
+ Time::TimeDelta dt;
+ if(trains[i].state==MOVING || (trains[i].state==BLOCKED && prev && prev->trains[i].state==MOVING))
+ dt = trains[i].get_time_to_next_track();
+ else if(trains[i].state==BLOCKED && trains[trains[i].blocked_by].state==ARRIVED)
+ dt = trains[i].estimated_wait;
+ else
+ continue;
+
+ if(dt<min_dt || next_train<0)