Я лишь о том, на что похож результат.
Кстати, можно и без разных выходов из цикла (а тут он, кажется, и так один). В ЦД включаем отдельно ветвь ожидания (и проверки, что транспорт ещё ходит). Пока ждём - пароль подходит только к её охране (есть, скажем, флаг обнаружения транспорта, проверяемый по всей ЦД-шапке, но устанавливаемый только в этой ветке - или охранная переменная
Вид/МаршрутТранспорта имеет значение, трактуемое как "не обнаружен <на текущем проходе ветви>"). И исполнитель каждый раз выполняет проверку/обнаружение. Ну а когда обнаружен - охрана нужной ветки из числа остальных впускает по соответствующему значению (подмножеству значений). И делаем, что нужно дальше по смыслу, вытекающему из этого значения (подмножества). А уж если не ходит/не ждём (тут надо тайм-аут прописать, кстати) - выходим из конструкции, как у автора и сделано. Так примерно...
Это тоже в порядке оптимизации того естественного представления, которое Вы предложили.