Описание процесса конвертирования будет вестить на примере немецкого вокзала, а конвертировать будем харьковский вокзал Alex'a.
Структура папок:
res\
config\train-station - файлы с расширением *.lua итоговая сборка происходит именно в них. Три файла для трех типов станций по длине (160 м / 240 м / 320 м)
models\
material\station\train\1900 - материалы, используемые моделью;
mesh\station\train\1900 - меши, т.е. непосредственно 3D-модели в паре со скриптами;
model\station\train\1900 - файлы промежуточной сборки;
textures\models\station\train\1900 - текстура.
содержание lua-скрипта короткой станции (1900_small.lua):
function data()
return {
cargo = false, -- предназначение станции true - товарная, false - пассажирская
yearFrom = 1850, -- дата возможности постройки
yearTo = 1950, -- дата окончания возможности постройки, (кстати, здания апгрейдятся сами?)
minPlatforms = 1, -- минимальное количество платформ
maxPlatforms = 3, -- максимальное количество платформ
building = "station/train/1900/1900_gebaude.mdl", -- mdl-файл непосредственно со зданием станции/вокзала
firstPlatform = { -- первая платформа прилегающая к зданию
bounds = { -5.0, 20.0 }, -- габариты первой платформы
parts = { -- составные части модели платформы (в маленькой станции нам надо набрать блоками 160 м)
"station/train/1900/1900_small_end_links.mdl", -- mdl-файл конца платформы
"station/train/1900/1900_small_40m.mdl", -- mdl-файл средней части платформы
"station/train/1900/1900_small_40m_ubergang.mdl", -- mdl-файл части платформы с переходом
"station/train/1900/1900_small_40m.mdl", -- mdl-файл средней части платформы
"station/train/1900/1900_small_40m.mdl", -- mdl-файл средней части платформы
"station/train/1900/1900_small_end_links_hinten.mdl" -- mdl-файл обратного конца платформы
} --
},
platform = { -- вторая платформа
-- bounds = { -2.5, 2.5 }, -- габариты второй платформы (почему-то закомменченные, т.е. этот блок ?не обязательный?, как я понимаю)
parts = {
"station/train/1900/1900_mid_end_links.mdl", -- составные части платформы по аналогии с первой платформой сами платформы шире, так как обслуживают пути по левую и правую стороны
"station/train/1900/1900_mid_40m.mdl",
"station/train/1900/1900_mid_40m_ubergang.mdl",
"station/train/1900/1900_mid_40m.mdl",
"station/train/1900/1900_mid_40m.mdl",
"station/train/1900/1900_mid_end_links.mdl"
}
},
lastPlatform = { -- последняя платформа
parts = {
"station/train/1900/1900_small_end_links_hinten2.mdl", -- mdl-файлы последней платформы
"station/train/1900/1900_small_hinten.mdl",
"station/train/1900/1900_small_hinten_ubergang.mdl",
"station/train/1900/1900_small_hinten.mdl",
"station/train/1900/1900_small_hinten.mdl",
"station/train/1900/1900_small_end_links2.mdl",
}
},
buildingCosts = 250000, -- стоимость строительства
platformCosts = 5000 -- стоимость дополнительной платформы при строительстве
}
end
красным я выделил то, что мне пока не понятно, а именно количество платформ - что за этим кроется, если максимум ж/д путей пять, тогда как в lua-скрипте длинной станции указаны минимум 4 и максимум 12.
Давайте сначала заменим здание вокзала, а затем будем разбираться с платформами. Для этого откроем файл station/train/1900/1900_gebaude.mdl и посмотрим его содержание.
local laneutil = require "laneutil"
function data()
return {
boundingInfo = { -- габариты модели
bbMax = { -- максимум
22.0, 1.0, 10.70592,
},
bbMin = { -- минимум
-22.0, -20.0, -0.15,
},
},
collider = {
params = {
},
type = "MESH",
},
lods = {
{
animations = {
},
children = {
{
id = "station/train/1900/1900_gebaude.msh", -- меш - скрипт к мешу вокзала, один из пары файлов что получается при конвертировании файла из 3D-редактора (OBJ, ASE) с помощью TFMC от Omich
transf = { -- второй файл пары с самой моделью имеет расширение blob
1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, -- координаты меша в координатной системе mdl-файла
},
type = "MESH",
}, {
id = "station/train/1900/1900_pferdewagen.msh", -- повозка
transf = {
1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, -2.76799, -4.39362, 0.0, 1.0,
},
type = "MESH",
}, {
id = "tree/europeanlinden_rt_1_lod0.msh", -- дерево
transf = {
0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, -17.8, -1.45, 0.2, 1,
},
type = "MESH",
}, {
id = "tree/europeanlinden_rt_1_lod0.msh", -- дерево
transf = {
0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 17.5, -1.4, 0.2, 1,
},
type = "MESH",
}, {
id = "asset/lamp_old_lod_0.msh", -- дерево
transf = {
0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 7.8, 0, 0.25, 1,
},
type = "MESH",
}, {
id = "asset/lamp_old_lod_0.msh", -- фонарь
transf = {
0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, -7.8, 0, 0.25, 1,
},
type = "MESH",
},
},
events = {
},
matConfigs = {
{
0, 0, 0, 0, 0, 0,
},
},
static = false,
visibleFrom = 0,
visibleTo = 2500,
},
},
metadata = { --здесь уже начинается код уникальный для станций
transportNetworkProvider = {
laneLists = {
{
transportModes = { "PERSON" }, -- объект перемещения т.е. "PERSON" (человек) для пассажирской станции, "CARGO" (груз) для товарной.
nodes = laneutil.makeLanes({ -- обращение к laneutil - скрипту для построения путей пешеходов
-- Linie Links -- пути перемещения пассажиров
{ { 4.5, 1.0, .3 }, { 4.5 ,-1.0, .3}, { 0, -1, .0 }, { 0, -1 , .0 }, 1.5 },
{ { 4.5, -1.0, .3 }, { 4.5 ,-8.0, .3}, { 0, -1, .0 }, { 0, -1 , .0 }, 1.5 },
{ { 4.5, -8.0, .3 }, { 3.0 ,-10.0, .3}, { 0, -1, .0 }, { 0, -1 , .0 }, 1.5 },
{ { 3.0,-10.0, .3 }, { 3.0 ,-18.0, .3}, { 0, -1, .0 }, { 0, -1 , .0 }, 1.5 },
-- Linie Rechts
{ { -4.5, 1.0, .3 }, { -4.5 ,-1.0, .3}, { 0, -1, .0 }, { 0, -1 , .0 }, 1.5 },
{ { -4.5, -1.0, .3 }, { -4.5 ,-2.0, .0}, { 0, -1, .0 }, { 0, -1 , .0 }, 1.5 },
{ { -4.5, -2.0, .0 }, { -4.5 ,-7.0, .0}, { 0, -1, .0 }, { 0, -1 , .0 }, 1.5 },
{ { -4.5, -7.0, .0 }, { -4.5 ,-8.0, .3}, { 0, -1, .0 }, { 0, -1 , .0 }, 1.5 },
{ { -4.5, -8.0, .3 }, { -4.5 ,-9.5, .3}, { 0, -1, .0 }, { 0, -1 , .0 }, 1.5 },
{ { -4.5, -9.5, .3 }, { 0.7 ,-9.5, .3}, { 1, 0, .0 }, { 1, 0 , .0 }, 1.5 },
{ { 0.7 ,-9.5, .3 }, { 0.7 ,-18.0, .3}, { 0, -1, .0 }, { 0, -1 , .0 }, 1.5 },
{ { 0.7 ,-18.0, .3}, { 3.0 ,-18.0, .3}, { 1, 0, .0 }, { 1, 0 , .0 }, 1.5 },
-- Zu Übergang
{ { 3.0 ,-18.0, .3 }, { 3.0 ,-23.0, .3}, { 0, -1, .0 }, { 0, -1 , .0 }, 1.5 },
})
}
}
}
}
}
end
Таким образом выяснилось, что mdl-файл вокзала содержит в себе несколько мешей: здание вокзала и окружение (деревья, бочки, лавочки и скамейки).
Что же такое "Linie links", "Linie Rechts"? Чек-поинты используемые для построения пути пешеходов. О них подробно на английском языке можно прочитать в
руководстве по прокладке путей на примере маленькой грузовой станции.