+ if(!planner)
+ start_planning(train.get_layout());
+ else if(planner->get_result()!=TrainRoutePlanner::PENDING)
+ {
+ destination_changed = false;
+ if(planner->get_result()==TrainRoutePlanner::COMPLETE)
+ {
+ const list<Route *> &planned_routes = planner->get_routes_for(train);
+ routes.clear();
+ routes.push_back(create_lead_route(0, planned_routes.front()));
+ routes.insert(routes.end(), planned_routes.begin(), planned_routes.end());
+ sequence_points = planner->get_sequence_for(train);
+ pending_sequence_checks.clear();
+ current_sequence = 0;
+
+ route_changed();
+ }
+ planner = 0;
+ }
+ }
+
+ for(list<SequencePoint *>::iterator i=pending_sequence_checks.begin(); i!=pending_sequence_checks.end(); ++i)
+ if((*i)->preceding_train->get_ai_of_type<TrainRouter>()->get_current_sequence()>=(*i)->sequence_in)
+ {
+ (*i)->preceding_train = 0;
+ if(*i==&sequence_points.front())
+ train.stop_at(0);
+ }
+ pending_sequence_checks.clear();
+
+ if(arriving==1 && !train.get_speed())
+ {
+ signal_arrived.emit(destination);
+ signal_event.emit(Message("arrived", destination));
+ arriving = 2;