- ++route;
- if(route==routes.end())
- return false;
- if(!is_valid_for_track(**route, track))
+ bool in_route = (*route)->has_track(*track);
+ bool prev_in_route = (*route)->has_track(prev_track);
+ bool known_path = (!taddr || (*route)->get_turnout(taddr)>=0);
+
+ if(in_route && (known_path || !prev_in_route))
+ return true;
+ else if(i==0 || prev_in_route)
+ ++route;
+ else