- if(multiple_paths || !last->block->get_turnout_id())
- {
- /* We can keep the blocks reserved so far if we are facing the
- points or if there was no turnout immediately before this one.
- With multiple successive turnouts (as is common in crossovers) it's
- best to hold at one we can divert from. */
- good = last;
- good_sens = nsens;
- good_dist = dist;
- }
-
- // Figure out what path we'd like to take on the turnout
- int path = -1;
- for(list<RouteRef>::iterator i=cur_route; (path<0 && i!=routes.end()); ++i)
- path = i->route->get_turnout(link->get_turnout_id());
- if(path<0)
- path = entry_ep.track->get_active_path();
- if(!(track_ep.paths&(1<<path)))
- {
- for(unsigned i=0; track_ep.paths>>i; ++i)
- if(track_ep.paths&(1<<i))
- path = i;
- }
-
- if(path!=static_cast<int>(entry_ep.track->get_active_path()))
- {
- // The turnout is set to wrong path - switch and wait for it
- pending_block = link;
- entry_ep.track->set_active_path(path);
- if(pending_block)
- {
- link->reserve(0);
- break;
- }
- }
-
- if(multiple_paths && cur_route!=routes.end() && cur_route->diversion!=link->get_turnout_id())