maisvendoo писал(а): ↑03 авг 2022, 21:40
БЛОК-М на РА-3 понимает ограничения скорости и расположение станций. Для скоростей, в каталог с маршрутом кладутся два файла:
speeds1.conf и
speeds.2conf
maisvendoo писал(а): ↑04 авг 2022, 06:36
speeds1.conf и
speeds.2conf, это скорости
туда и
обратно
Ну что, продолжаем играть, видеть сплошные баги и фиксить...
Ощущение, что работоспособность ограничений скорости в направлении
обратно не проверялась при разработке ни разу?
Потому что код, который должен загрузить
speeds2.conf - в принципе никогда не выполнялся:
ra3/ra3-head/src/ra3-head-init-safety-devices.cpp
Код: Выделить всё
...
// Загрузка электронной карты в БЛОК
QString speeds_name = "speeds";
if (dir > 0)
speeds_name += "1";
else
speeds_name += "2";
QString path = QDir::toNativeSeparators(route_dir) +
QDir::separator() + speeds_name + ".conf"
...
Итак, вроде всё верно, в направлении обратно
dir = -1 и должен загрузиться
speeds2.conf. Но грузится speed1! Проблема оказалась скрыта намного глубже, не здесь, а в движке игры:
RRS/simulator/train/src/train.cpp
Код: Выделить всё
...
vehicle->init(сonfigPath);
vehicle->setPayloadCoeff(payload_coeff);
vehicle->setDirection(dir);
...
Здесь мы видим, что для каждой единицы подвижного состава сперва вызывается её инициализация (и рассмотренная выше загрузка карты скоростей в БЛОК на РА-3 тоже происходит в этот момент), но только через строчку кода эта единица ПС узнает, в каком направлении её предстоит работать. А до этого по умолчанию
dir = 1, и в БЛОК грузится
speed1.conf
Ну хорошо, перетащив строчку кода на две строки вниз, собираем из исходников исправленный движок, запускаем, и ещё раз убеждаемся что в направлении обратно никто никогда не ездил. Да, ограничения скорости теперь загрузились из speeds2.conf, но работают они так, как если бы мы ехали "туда".
Например, когда допустимая скорость должна стать выше, симулятор её постепенно повышает, по мере удаления от этого места (как это должно быть при приближении к нему).
К счастью, эти баги удалось пофиксить умножениями на всё тот же
dir в нескольких местах кода. Но тут нужно небольшое уточнение:
maisvendoo писал(а): ↑03 авг 2022, 21:40
В каждой из строк: первое число - ордината в метрах, с которого начинается ограничение; второе число - величина ограничения в км/ч. Под ординатой понимается расстояние от начала маршрута до требуемого места. Второй файл выглядит аналогично
speeds2.conf
Код: Выделить всё
0 40
920 60
7980 40
8940 60
11380 40
11660 60
14220 40
14860 60
20260 40
23200 40
После моих исправлений, получившийся у меня код работает не совсем так как задумано. Он читает speeds2.conf "снизу вверх". То есть для корректной работы приведённый пример следовало бы записать так, со смещением ограничений на строчку вниз:
speeds2.conf
Код: Выделить всё
0 0
920 40
7980 60
8940 40
11380 60
11660 40
14220 60
14860 40
20260 60
23200 40
Я, конечно, снова сделал pull request, но, вероятно,
maisvendoo сочтёт нужным переписать мой код, чтобы он воспринимал строчки так как задумано изначально. А пока - для желающих экспериментировать со скоростями выкладываю свою версию патча к RRS 1.0.7 и РА-3:
https://drive.google.com/file/d/1SW58-4 ... sp=sharing
Скачанный архив распаковать в корневую папку игру с заменой.