Специализированне имена и типы объектов
Документ описывает строки, ключевые слова и “типы”, которые жёстко распознаются кодом симулятора и утилитами (без привязки к конкретному контенту). Это полезно, когда вы правите маршруты/объекты и хотите понимать, какие имена имеют специальное поведение.
objects.ref/traffic.refсодержат справочники (имя → файлы модели/текстур и т.п.). Большинство имён там — “обычные”.
Но часть имён и префиксов дополнительно интерпретируются кодом (см. “Спец-имена объектов”).
Атрибуты objects.ref
[mipmap]— включает mipmapping для всех следующих объектов. Работает только если глобальная опцияMipMappingвключена в настройках симулятора.[not_mipmap]— отключает mipmapping для всех следующих объектов.[smooth]— включает режим гладкого затенения (smooth shading) для следующих объектов.[not_smooth]— отключает smooth shading для следующих объектов.[optional]— помечает все следующие объекты как “опциональные” (их отсутствие не вызывает фатальной ошибки, а обрабатывается мягко).[not_optional]— отменяет признак “опциональности” для следующих объектов.[alpha]— включает поддержку альфа-канала (прозрачности) для следующих объектов (например, для объектов с полупрозрачными текстурами).[not_alpha]— отменяет атрибут альфа-канала для следующих объектов.
Формат строки-данных:
- Для
objects.ref:Name<TAB>ModelFile<TAB>TextureFile - Для
traffic.ref:Name<TAB>ModelFile<TAB>TextureFile<TAB>TrafficType<TAB>Length<TAB>Weight - Любая строка, начинающаяся с
;, считается комментарием и пропускается.
Типы светофоров (svetofor1.dat, svetofor2.dat)
Во входных файлах svetofor*.dat второй TAB-столбец — это строковый тип, который движок анализирует по символам в строке.
Поддерживаемые “built-in” значения:
ab_entr: входной светофор (в коде определяется поSignalType[5] = 'n').ab_exit: выходной (поSignalType[5] = 'x').ab_rout: маршрутный (поSignalType[5] = 'o', в ряде мест трактуется близко к выходному).ab_line: проходной (поSignalType[4] = 'l').
Автоматическая подстановка объекта-модели светофора по SignalType и caption:
- Для
ab_line: - если
captionравен'1'или'2'→ ставитсяsignal_pred(предупредительный), - иначе →
signal_line. - Для
ab_entr→signal_enter. - Для
ab_exitиab_rout→signal_exit.
Файлы маршрута, которые ожидает движок
В загрузке маршрута/сцены используются фиксированные базовые имена:
route1.trk,route2.trk(геометрия путей)route1.map(карта поверхности/объектов)svetofor1.dat,svetofor2.dat(светофоры)
“Типы” пути в route*.trk: поле strelki (жёстко распознаваемые значения)
В route*.trk есть строковое поле strelki. Движок и инструменты трактуют некоторые значения особым образом.
Подробно: откуда берутся строки 1-2, 2+22, префиксы m: / n:, как генерируются объекты 1track500l, 2track2-2 и порядок BuildFromProfile в Route Editor — см. Опции пути в profile.dat.
Базовые значения:
''или'0': “обычный” участок без спец-логики (в нескольких местах именно так проверяется “нет кривой/стрелки”).
Стрелка/съезд (используется в мире/редакторе/звуке):
'b': стрелка/боковой путь (в редакторе подсвечивается, для графики строится безье-ветка; в сигнализации влияет на флаги).
Кривые/радиусы и спец-метки:
'2000','-2000''1000','-1000''750','-750''500','-500'
Комбинированные маркеры (используются для звука/логики, трактуются как “switch-like”):
'1+22','1-22','2+22','2-22'
Отображаемые в Track.pas как “особые” (для подписей/подсветки в 3D):
'1+2','+2','2+1','2+'
Примечание:
- На практике
strelkiиспользуется и для стрелок, и для параметров кривой/радиуса, и как “маркер” для звуков/эффектов. Поэтому важно держать совместимость со строковыми сравнениями, а не только с числовым смыслом.
Спец-имена объектов
Ниже — “встроенные” имена/шаблоны, которые движок распознаёт, и что это меняет для игрока. Эти имена относятся к объектам из objects.dat / route*.map.
Видимость и оптимизация
big_*: объект может рисоваться дальше обычной дистанции видимости (в “полудальней зоне”: (distance > VisibleDistance), но меньше (MaxVisibleDistance + 500)).wire*: провода. Не рисуются дальше 250–750 м. в зависимости от дальности прорисовки.*trac*: объекты, считающиеся “track/rail” по шаблону, не рисуются дальше ~500м.
Растительность (LOD, плавное появление, освещение)
v_*: объект трактуется как “дерево/растительность”:
включается плавное появление на границе дальности видимости, используется LOD3 (если есть), а также используется освещение как для деревьев. Включается анимация раскачивания.v_gr*: дополнительная логика “трава”:
трава не рисуется далеко (полностью отключается после ~400м, а в диапазоне ~300–400м рисуется с затуханием альфы).v_bu*: кусты (как растительность) — не рисуются далеко (отсекаются после ~400м).field*: поле рисуется с “деревянным” солнечным освещением как спец-слой ландшафта.
Свисток
Вблизи (примерно до 1000м) некоторые объекты автоматически выставляют “надо свистеть”:
s_board*: “таблички/знаки” инициируютNeedWhistleпри приближении.platform*: платформы инициируютNeedWhistle.road_cross*иroad100*: переезды/дорожные объекты инициируютNeedWhistle.signal_enter*: входные сигналы инициируютNeedWhistle.
Переезд и дорожные сцены
road_cross*: объект считается переездом; чтобы логика/индикаторы знали, что это переезд. В отрисовке переезда может появляться машина (простая “сцена” сCarX), если она близко.road100*: ведёт себя как “дорожный” объект и использует ту же отрисовку “переезда с машиной”, даже если это неroad_cross*.
Фонари (light) — активные источники света ночью
light: ночью в пределах ~700м объект добавляется в список активных источников света.
Радиус берётся изcaption(число), а еслиcaptionпустой — используется радиус по умолчанию (около 100).
Таблички/столбы
plate_blue: поверх модели рисуется текстcaption(синяя табличка с надписью).stolbik: километровый столб — рисуются две надписи:captionиcaption+1(на обратной стороне).stolbik_opN(напримерstolbik_op0,stolbik_op1, …): “километровый столб на опоре/гантри” — те же две надписи, но позиционирование текста выбирается по составному имени (суффикс_op+ номерN).piket: пикет — аналогично рисуютсяcaptionиcaption+1.piket_opN: пикет на опоре/гантри — какpiket, но позиционирование текста выбирается по_opN.
Примечание по генерации в редакторе маршрута: при km_type=2 имя делается составным (stolbik_opN / piket_opN), где N = Gantry.Right;
Электронные часы (time*)
time*, обычно этоtime_el: объект рисует цифровое время поверх модели. Вcaptionможно задать параметры в формате<цвет><масштаб><секунды>- Если
captionначинается с буквыR/G/B/Y/W, задаётся цвет (соответственно синий/зелёный/красный/жёлтый/белый). - Если
captionимеет длину ≥ 3, то поcaption[2..3]вычисляется масштаб ((/10)). - Если
captionимеет длину ≥ 4 иcaption[4] = 's', выводитсяHH:MM:SS, иначеHH:MM.
Обьект time_el встроенный и его не надо добавлять в objects.ref
Сигналы, огни и “надписи на сигналах” (sig*, signal_*)
Эти имена влияют на то, где и какие огни рисуются, и как они связываются с текущим состоянием сигнализации.
signal_line*: рисуется “проходной” светофор с огнём на одной высоте (в коде используется позиция ~5.13).signal_exit*иsignal_enter*: рисуется огонь “мачтового” поездного светофора на другой высоте (позиция ~6.4).signal_enter*+ специальная подпись (см. ниже проcaption=ЧД/НД/YD/HD): включает особую отрисовку “входной по неправильному пути” (два огня на разных высотах).sig_k*: карликовый входной по неправильному пути (огни рисуются низко: ~1.29 и ~0.8).sig_povt*/sig_povt_k*: “повторительные” — если текущий следующий сигнал не зелёный, рисуется повторительный огонь (высота зависит от типа: карликовый/мачтовый).sig*_zag*(т.е.sig*+ содержитzag): “заградительный” — при активной ситуации/неисправности (Troubles[71]) принудительно рисуется запрещающий огонь.
Дополнительно для любых sig* (и не sig_ukaz) движок может рисовать надписи из caption на сигнальных табличках (набор “плашек” plate по символам).
Если имя содержит _k, надпись позиционируется иначе (для карликовых/низких конструкций).
sig_ukaz — указатель маршрута/направления (стрелки)
sig_ukaz: это не “обычная надпись”, а стрелочный указатель.
Еслиcaptionравен одному из символов|,\,/,-— рисуется соответствующий световой рисунок.
Еслиcaptionне пустой и не один из этих символов — выводится 1-й символcaptionкак знак.
Примечания про caption для сигналов
- Для ряда сигналов значение
caption— это имя/идентификатор, по которому код сопоставляет объект с текущимCurrSignalCaption/AltCaptionи выбирает, какой огонь рисовать. caption = ЧД/НД(а такжеYD/HD) используется как маркер “дополнительного входного по неправильному пути” для особой отрисовки.
Сценарные/служебные “люди/машины/объекты”
ukaz_ponab: индикатор PONAB; при активном событии (Troubles[15]) рядом рисуется набор желтых огней (индикация срабатывания).signalistStop: рисуется анимированной моделью (кадр зависит отSignalistStopFrame).ks2: кадр модели зависит отTroubles[55](визуальная реакция на неисправность/ситуацию).puteec: кадр/анимация зависит отSvistok/Tifon(реакция на свисток/тифон).kamaz,bad_track,prep_wagon: участвуют в “служебных” сценарных действиях и сбросах состояния (например, при нажатии F5 эти объекты “убираются” вниз по Z).
Route Editor: как формируются name и caption
Редактор маршрута Route Editor записывает в objects.dat ровно то, что выбрано/введено в поле выбора объекта.
Свойство name
- Список в выпадашке заполняется из загруженных
*.ref, которые были подхвачены редактором при старте, плюс отдельно добавляется встроенное имя: time_el
То есть вы можете:
- выбрать имя из списка (обычно это имена из
objects.ref), - или ввести имя вручную — и оно также будет записано как есть (дальше движок попробует найти его в
objects.ref/глобальном ref или обработать как built-in).
список “встроенных” имен
plateplate_bluesignal_predbshpalpiketputeecbad_trackbad_track2s_board1signalistRsignalistStopsignalistYstolbikzarazaznak_disknachalo_boardkonec_boardyellow_boardsignal_linesignal_pred_oldopk_curvedR
Свойство caption
По умолчанию caption для объекта при вставке не сохраняется. Редактор сохраняет подпись только для набора имён/шаблонов:
plate_bluean_p1lightsig*time_el
Дополнительно при чтении objects.dat редактор применяет ограничение:
- если
captionдлиннее 5 символов, он не записывается вcaption(для отрисовки/атрибутов).
Формат objects.dat
При вставке редактируемого объекта редактор дописывает строку в routes/<RoutePath>/Objects.dat:
ordinate<TAB>shift<TAB>angle<TAB>angle_vert<TAB>height<TAB>name<TAB>caption<TAB>angle_y
Спец-объекты, которые создаются кодом
При расстановке светофоров и служебных сущностей код явно назначает имена:
signal_pred,signal_line,signal_enter,signal_exit(см. раздел проsvetofor*.dat).sig_ukazиplate— создаются как отдельные переменные.