Тепловоз: |
Конфигурация |
Сценарий |
Паровоз: |
Конфигурация |
Сценарий |
Размещение файла: ...\Trainz\world\custom\interiors\
Типовая структура каталогов для самодельной кабины должна быть такой:
World | |||||
Custom | |||||
Interior | |||||
Custom_Interior | |||||
Config.TXT | |||||
Custom_interior.IM | |||||
custom_interior.TGA | |||||
Env_metal.BMP | |||||
*.tecture.TXT |
Это внутренний вид кабины локомотива.
На него ссылается тег interior в файле config.TXT локомотива.
В TRS2004 файл config.TXT для кабины теперь может быть настроен с использованием таблицы сеток. Это позволяет лучше управлять анимацией и обеспечивает базу для написания сценариев. file now has the
В следующем примере в обычную кабину UP DD40 добавлены сценарии для анимированных стеклоочистителей и вентилятора, управляемых переключателем. Когда эти переключатели включают, генерируется сетка, изображающая загорающуюся лампочку.
Кабина DD40 - хороший пример того, что можно сделать с помощью только стандартных рычагов. Открывающиеся окна, открывающиеся жалюзи и вращающий стул - все это "рычаги". Пользы от них, конечно, немного, но зато немного веселей!
Загрузите исходный текст и внутренние файлы кабины отсюда:
http://www.auran.com/TRS2004/downloads/contentcreation/TRS2004_dd40_interior.zip
Помните: кабины, сделанные с помощью таблицы сеток, нельзя использовать в
версиях более ранних, чем TRS2004.
Зеленым выделены расширения версии UTC
Пример файлаConfig.TXT для кабины тепловоза |
kuid <KUID:-3:10085> kind interior rem DD40 script “DD40Cabin” mesh-table description "" |
Ниже приводится файл сценария для кабины DD40. В нем настраиваются анимации вентилятора и стеклоочистителей, управляемых переключателями, а также происходит включение/выключение лампочек. |
Пример файла сценария Cabin.GS для кабины тепловоза |
include “defaultlocomotivecabin.gs”
class DD40CabinData isclass CabinData class DD40Cabin isclass DefaultLocomotiveCabin // Lights thread void SlowFanDown(void); void UpdateFan(void); float fanSpeed; //! связать эту кабину с игровым объектом (т.е. с локомотивом). // взять данные кабины // АНИМИРОВАННЫЙ ВЕНТИЛЯТОР cabin_fan_switch.SetValue(value); // АНИМИРОВАННЫЙ СТЕКЛООЧИСТИТЕЛЬ window_wipers.SetValue(value); // ПЕРЕКЛЮЧАТЕЛЬ 3 // ПЕРЕКЛЮЧАТЕЛЬ 4 // ПЕРЕКЛЮЧАТЕЛЬ 5 // ПЕРЕКЛЮЧАТЕЛЬ 6 // ПЕРЕКЛЮЧАТЕЛЬ 7 // ПЕРЕКЛЮЧАТЕЛЬ 8 void UserPressKey(string s) float value; cabin_fan_switch.SetValue(value); UpdateFan(); float value; window_wipers.SetValue(value); UpdateWipers(); public void Init(void) cabin_fan_switch = GetNamedControl(“fan_switch”); cabin_fan_light = GetNamedControl(“switchlight0”); RunAnimation(); } void UserSetControl(CabinControl p_control, float p_value) if (p_control == cabin_fan_switch) if (wantFanAnimation) else if (p_control == window_wipers) if (wantWiperAnimation) } else if (p_control == switch3) light3.SetValue(value); light4.SetValue(value); light5.SetValue(value); else if (p_control == switch6) light6.SetValue(value); else if (p_control == switch7) else if (p_control == switch8) light8.SetValue(value); else } thread void SlowFanDown(void) if (isFanSlowingDown) isFanSlowingDown = true; // Slow it down... Sleep(0.5); fanSpeed = 0.0; thread void SpeedFanUp(void) if (isFanSpeedingUp) isFanSpeedingUp = true; // Speed it up... Sleep(0.5); fanSpeed = 1.0; void UpdateFan(void) if (cd.animatingFan) void UpdateWipers(void) // Об остальном волноваться не надо - разберемся, когда цикл закончится thread void RunAnimation(void) wait() } }; |
Обзор
Кабины паровозов в TRS2004 настраиваются в общем также, как
кабина тепловоза или электровоза, однако есть несколько тонкостей,
необходимых именно для паровоза.
Многие рычаги и заслонки состоят из нескольких движущихся объектов и требуют анимацию под управлением мыши. Это не похоже на обычные рычаги, состоящие только из одного объекта, вращающегося вокруг одной точки.
Переделывать надо не только рычаги. Топка, расположанная в кабине, должна извергать огонь и пламя, надо управлять кочегаром в зависимости от потребности паровоза в угле.
Загрузите исходные тексты и внутренние файлы кабины PB15 с адреса: http://www.auran.com/TRS2004/downloads/contentcreation/TRS2004_PB15_interior.zip
См. файл Config.TXT для кабины PB15 на следующей странице:
Пример файла Config.TXT для кабины локомотива |
kuid <KUID:-3:10191> kind interior script “PB15Cabin” camera -0.769, 0.566, 0.617 obsolete-table soundscript mesh-table description "" |
Вот файл сценария для кабины паровоза PB15. Сценарий отвечает за отображения всех рычагов управления паровозом на физическую систему, и отрабатывает специфические для PB-15 функции, например, управляет кочегаром. |
Пример файла сценария Cabin.GS для кабины паровоза |
include “train.gs” include “locomotive.gs” include “cabin.gs” class PB15CabinData isclass CabinData class PB15Cabin isclass Cabin CabinControl speedometer; bool shovellingCoal; thread void RunAnimation(void); public void Init(void) waterGlassLeft_dial = GetNamedControl(“waterglass_left”); firebox = GetNamedControl(“firebox”); waterInjector0 = GetNamedControl(“water_injector_0”); fire_plates = GetNamedControl(“fire_plates”); RunAnimation(); //! Присоединить эту кабину к игровому объекту (т.е. к локомотиву). // получить данные кабины // в файле конфигурации локомотива значения манометра описываются в кПа public void Update(void) // if (speedometer) if (main_reservoir_needle) value = GetPressureParam(“brake-cylinder-pressure”); if (no3_pipe_needle) if (brake_pipe_needle) if (equaliser_needle) if (flow_needle) value = loco.GetEngineParam(“current-drawn”); // if (reverser_lever) if (train_brake_lever) if (train_lapbrake_lever) if (loco_brake_lever) if (dynamic_brake_lever) if (wheelslip_light) if (horn_rope) if (pantograph_lever) if (light_switch) if (waterGlassLeft_dial) if (waterGlassRight_dial) // обновить данные кабины cd.fireboxDoorOpen = fire_plates.GetValue() > 0.9; if (firebox) if(fire_plates) firebox.SetNamedValue(“fire-life”, loco.GetEngineParam(“fire-temperature”) / 1600.0); if (boiler_needle) if (waterInjector0) if (waterInjector1) void UserSetControl(CabinControl p_control, float p_value) if (p_control == reverser_lever) // else if (p_control == throttle_lever) else if (p_control == train_brake_lever) else if (p_control == train_lapbrake_lever) else if (p_control == loco_brake_lever) else if (p_control == dynamic_brake_lever) else if (p_control == horn_rope) else if (p_control == pantograph_lever) else if (p_control == light_switch) else if (p_control == regulator_lever) else if (p_control == waterInjector0 or p_control == waterInjector1) void UserPressKey(string s) shovellingCoal = true; thread void RunAnimation(void) wait() on “Animation-Event”, “Coalman_loop2_end”: on “Animation-Event”, “Coalman_loop2shovel_end”: on “Animation-Event”, “Coalman_shovel_end”: on “Animation-Event”, “Coalman_wipebrow_end”: on “Animation-Event”, “Coalman_shovel2loop_end”: on “Animation-Event”, “Coalman_wave_end”: } }; |
ТЕГ | ОПИСАНИЕ | ||
script | Ссылается на имя сценария и класса объекта (класс должен иметься в указанном файле). | ||
class | |||
mesh | Файл сетки-модели (*.IM or *.PM) | ||
camera | Положение камеры относительно a.cabfront (0,0,0 = влево/вправо, вперед/назад, вверх/вниз) | ||
cameralist |
Несколько позиций внутренней камеры относительно a.cabfront. SP3 игнорирует этот тег. 0,0,0,0,0 =влево/вправо, вперед/назад, ввер/вниз, отклонение, наклон Чтобы узнать значение этих переменных, добавьте freeintcam в файл trainzoptions.TXT. Осмотрите кабину с помощью клавиш со стрелками и мыши. Координаты выводятся в левом нижнем углу экрана. |
||
cameradefault |
Внутренняя камера, включаемая по умолчанию после входа в кабину (обычно та же самая, что и camera). SP3 игнорирует этот раздел. |
||
attachment | Начало раздела привязок. Указывает дополнительные сетки и их типы, размещаемые в точках привязки внутри главной модели *.IM. | ||
Типы привязок для кабины: | |||
pantograph_lever | Включатель токосъемника. Используется для поднятия и спуска токосъемника на электровозах. | ||
horn | Гудок локомотива | ||
independantbrake_lever | рычаг независимого (локомотивного) тормоза | ||
reverser_lever | Реверсор (вперед/назад/нейтральный) | ||
throttle_lever | контроллер | ||
trainbrake_lever | Рычаг поездного тормоза с автоматическим притормаживанием | ||
trainbrakelap_lever | Рычаг поездного тормоза с позицией для притормаживания | ||
dynamicbrake_lever | Для выбора динамического тормоза | ||
bplocomain_needle | Стрелка манометра главного резервуара | ||
bploco_equalizer | Стрелка манометра уравнительного резервуара | ||
bptrainbrakepipe_needle | Стрелка манометра тормозной магистрали | ||
bptrainbrakecylinder_needle | стрелка манометра тормозного цилиндра | ||
speedo_needle | стрелка указателя скорости | ||
ampmeter_needle | стрелка указателя тяги | ||
flow_needle | стрелка измерителя воздушного потока | ||
windows | Текстурированная сетка с высокой прозрачностью (полу-прозначная) для создания впечатления отражения. Сетка имеет то же самое начало координат, что и главная модель *.IM (или *.PM), следовательно, точка привязки не требуется. | ||
wheelslip_light | Сетка - предупреждающий сигнал, загорающийся только когда локомотив теряет сцепление. Эта сетка имеет то же самое начало координат, что и главная модель *.IM (или *.PM), следовательно, точка привязки не требуется. | ||
switch0, switch1 etc. | Переключатели | ||
light_switch | Переключатель освещения | ||
Вы можете также вставить различные сетки в точках привязки. В Trainz они не имеют никаких функций, но выглядят довольно симпатично. | |||
Например, вращающийся стул |
|||
swivel_chair |
|||
Настройки привязок кабины: | |||
Типы: | lever | Рычаги, переключатели, приборы и т.д. | |
needle | Стрелки | ||
animated-lever | Анимированные рычаги, напр. в кабинах паровоза | ||
collision-proxy | управление мышью для анимированных рычагов | ||
pullrope | Гудок с веревкой, как в F7 | ||
light | Индикатор проскальзывания колес | ||
mesh | Вставляемый файл сетки | ||
att | Точки привязки, в которую вставляется сетка. Если точка привязки не указана, сетка будет вставлена в a.cabfront (ту же точку привязки, что и основная сетка) | ||
limits | Математические границы, используемые Trainz для определения функций объектов. Эти значения отличаются друг от друга, поскольку различные объекты используют различные математические единицы измерения. Обычно подходят стандартные значения, указанные в поставляемых файлах config.TXT. | ||
angles | Границы поворота в радианах относительно точки привязки. Для ориентировки посмотрите на круговую диаграмму радианы/градусы.. | ||
notches | Положение засечек между границами шкалы. Выражается как десятичная дробь между 0 и 1. | ||
notchheight | Размер указанных засечек. | ||
radius | Положение засечки относительно точки привязки. | ||
mousespeed | Управляет использованием мыши на экране. Используйте для того, чтобы можно было тянуть/толкать рычаги и переключатели. | ||
2. | Удваивает скорость мыши в направлении по умолчанию | ||
-0.5 | Меняет направление мыши на обратное и уменьшает ее скорость в два раза. | ||
-1 |
Меняет направление мыши на обратное. | ||
test-collisions | 0 | Для этой сетки нельзя использовать мышь. Вместо этого должна использоваться специальная сетка. Пример: анимированные рычаги. | |
opacity | Используется для сетки окна, чтобы придать ей прозрачность (и вид отражающей поверхности)Used for the window mesh to give transparency. |
См. также: Разработка кабины.
.