if(!block || block->get_endpoints().size()<2)
{
if(!blocking_train)
+ {
good_end = blocks.end();
+ end_of_route = true;
+ }
break;
}
contested_blocks.push_back(block);
continue;
}
- else if(divert_track && (entry_conflict || exit_conflict))
+ else if(divert_track && (entry_conflict || exit_conflict || !other_train->is_active()))
// We are blocked, but there's a diversion possibility
try_divert = true;
track1 = track1.next(path);
- if(track1.looped())
+ if(!track1 || track1.looped())
return false;
}
bool ok = (track2!=from && diversion.has_track(*track2));
track2 = track2.next(path);
+ if(!track2)
+ return false;
if(ok)
break;