TS Editor - редактор для Train Simulator

Обсуждение вопросов и решение проблем, связанных с внутриигровым редактором, а также процессом разработки самостоятельных дополнений или игровых модификаций.

Нужно ли создать отдельный раздел на форуме (отзывы, обсуждения, баги, идеи и т.п.)

Да
12
86%
Нет
2
14%
 
Всего голосов: 14

maestro
Разработчик
Сообщения: 140
Зарегистрирован: 11 ноя 2011
Репутация: 268

Re: TS Editor - редактор для Train Simulator

Сообщение maestro »

Вышла новая версия. До публикации на сайте RRS ссылка будет тут: https://yadi.sk/d/niyOgWpxqLWM7
Маршрут "Лесной край". Вся актуальная информация на RailUnion.net. Поддержать проект Яндекс.Деньгами: 410012195452990
Набор утилит TS Editor для Train Simulator: RailroadSim.net, обсуждение на RailUnion.net & RailWorks2.ru
maestro
Разработчик
Сообщения: 140
Зарегистрирован: 11 ноя 2011
Репутация: 268

Re: TS Editor - редактор для Train Simulator

Сообщение maestro »

Давно в этой теме не было информации. Пришло время новостей.

TS Editor 1.X. Что это было?

Разработка программы началась довольно давно (примерно в 2011 г.) В те времена было мало что известно об игре: что BIN файлы переводятся в XML и обратно с помощью утилиты SERZ.EXE, а пакеты дополнений представляют собой обычные ZIP архивы с небольшой порцией данных о пакете в начале файла. Поэтому изначально была идея сделать несколько приложений внутри одной программы: для редактирования файлов (Bin/Xml Editor), для установки/удаления пакетов (Packager) и для просмотра информации об установленных маршрутах с возможностью запуска утилит для их обработки (Routes Manager).

Да и сама игра была намного проще: использовались BIN и XML файлы, часть данных кэшировалась и оседала в файлах Blueprints.pak (даже сейчас трудно сказать, зачем; возможно, для оптимизации доступа к жёсткому диску, но тогда не понятно, почему туда попадали только блюпринты, но не геометрия или текстуры). Потом разработчики (на тот момент ещё RSC) добавили поддержку AP (хранилище несжатых данных со структурой в формате ZIP, к слову, очень похоже на использовавшийся ранее формат PAK, только в более стандартизованном виде (зачем содержимое AP файлов кэшируется в Blueprints.pak, не понятно, ибо бессмысленно)).

TS Editor изначально разрабатывался в виде трёх основных компонентов: собственно программа TS Editor, содержащая в себе встроенные приложения; TS Editor Plugins Host, используемый для загрузки и исполнения плагинов; и TS Editor Framework, несущий в себе библиотеку классов, частично покрывающую модель контента Train Simulator'а, и средства взаимодействия для плагинов.

Вследствие изменений игры TS Editor также был вынужден изменяться, чтобы корректно работать в новых условиях. Была добавлена поддержка AP файлов с помощью SharpZipLib. Потом в результате исследований были получены спецификации форматов файлов PAK и LAN (локализации). На основе этих спецификаций были внесены дополнения в фреймворк для работы с этими файлами. Фреймворк стал поддерживать три источника данных: содержимое диска, AP и PAK файлы. При этом доступ к этим файлам происходил по принципу TS: сначала была попытка найти файл в PAK-кэше, затем на диске, а потом в AP-хранилище.

Сами приложения внутри TS Editor'а также изменялись и дополнялись. Например, вначале настройки Train Simulator'а передавались ему (RailWorksProc2.exe) через командную строку из программы-лаунчера (Railworks.exe, ныне его остатки покоятся в программе Utilities.exe). Потом все настройки были перенесены в сам TS (в этот момент игра переехала в файл Railworks.exe, а Railworks.exe (без лаунчера) - в Utilities.exe). Запускать TS с разными настройками стало очень сложно, поскольку их изменение требовало перезапуска игры, что само по себе является процессом не быстрым. Здесь и родилась идея сделать собственный лаунчер, который записывал бы заданные настройки игры и потом запускал её. Так появилось приложение TS Launcher.

Приложение Join Packages было придумано, когда мне стало лень устанавливать маршрут в виде множества пакетов (хорошо, если меньше 10). Сделать его было не сложно, поскольку уже реализованный функционал Packager'а был достаточен для этого.

Приложение Assets Explorer было добавлено последним. Его функционал больше подходил для просмотра установленных материалов и их зависимостей; запуск плагинов так и не был реализован. Был сделан, чтобы покрыть остававшуюся "невидимой" часть контента - материалы.

Ещё несколько слов можно сказать о приложениях Assets Searcher и Assets Manager (первое - агент для поиска материалов, второе - интерфейс пользователя для просмотра базы). Поскольку весь контент игры хранился в одной папке и занимал обычно очень много места, а плагинам требовалось предоставлять пользователю материалы за адекватное время, было принято решение хранить важную информацию о материалах в собственной базе. Чтобы содержать базу актуальной, Packager при установке/удалении пакетов всё время "дёргал" агента, информируя его об изменениях (если он не был отключен). Конечно, это не добавляло приложению производительности, но активное использование SERZ'а для получения информации о материалах внутри плагинов было бы намного большим злом.

Но всё изменилось, когда удалось "разобрать" BIN-файлы. Внедрить их спецификацию в старый разросшийся код показалось весьма сложной задачей, и было принято решение его по-тихому похоронить. А ещё структура программы изначально не разрабатывалась как модульная, добавление новых модулей происходило путём жёсткого связывания их внутри программы. В итоге это добавило сложностей во взаимодействие программных компонентов, и назрела необходимость что-то менять.

Разработка TS Editor завершилась в октябре прошлого года.

TS Editor 2.0. Что нового и для чего это нужно?

Вторая жизнь программы началась с создания новой архитектуры связывания и подключения программных компонентов - TS Editor Extensions Framework, позволяющей создание сервисов и расширений, а также механизма взаимодействия между сервисами (база для API). Именно с этого момента TS Editor уже не мог существовать в своём прежнем виде.

TS Editor Extensions Framework разделил все сущности программы на сервисы и расширения.

Сервис - активный программный компонент, выполняющий, как правило, какую-то одну задачу. Примеры: хостинг приложений, модуль поиска зависимостей, сервер конфигурации материалов, сервер хранения настроек и т.п. Все сервисы изолированы друг от друга. Каждый сервис стандартизованным путём реализует собственный API, позволяющий обращаться к нему извне.

Расширение - пассивный программный компонент. Работает, только когда его вызывает другое расширение или сервис.

Таким образом, TS Editor трансформировался в хост-процесс, внутри которого работают сервисы, использующие расширения. Весь остальной функционал начал разъезжаться на составляющие.

Первым под раздачу попал TS Editor Framework (который теперь, наверное, можно считать просто библиотекой классов, но название пока сохранилось). Была сильно расширена объектная модель, а также удалены некоторые составляющие, не имеющие прямого отношения к этой модели. Так, если раньше он поддерживал три источника контента (папка TS, AP и PAK), то теперь он не поддерживает ни одного. Теперь не получить доступ к контенту, не настроив окружение (подключить расширения, реализующие доступ).

Вторым в очереди на изменение стало приложение Bin/Xml Editor. Просто по причине самодостаточности и малой связности с другими компонентами. Ну и как же без нововведения - теперь поддерживается внутренний кодек Bin-файлов (выигрыш в скорости распаковки/упаковки порядка 3-5 раз, необходимо включать в настройках). Кстати, один интересный факт о приложении SERZ: оно имеет свойство падать при обработке бинарных файлов с незавершённой структурой (незакрытые элементы). Я подумал, что раз игра с этими файлами работает, значит, кривизна их структуры не является проблемой. Поэтому встроенный декодер корректно распаковывает такие файлы.

Дальше изменения постигли приложение Packager. Они были не фатальными: поддержка пакетов и упаковщиков тихо разъехалась по расширениям. Ну и добавился собственный экземпляр менеджера контента. Скриншоты приводить смысла не вижу, изменения не столь заметны.

С приложением TS Launcher дело обстояло несколько сложнее, но результат превзошёл ожидания: код приложения стал намного проще. Однако его изменение заняло несколько больше времени. Каждая настройка теперь - отдельное расширение.

Сложности начались, когда очередь дошла до приложения Routes Manager (теперь оно называется Routes Explorer). Раньше все компоненты были связаны друг с другом, образуя своеобразное виртуальное дерево. Каждый узел дерева "знал", какие узлы ему нужно создавать, когда пользователь переходит от одного узла дерева к другому. Однако в новой концепции расширений узел не может знать, какие узлы он может создать, поскольку расширения, реализующие эти узлы, могут быть удалены или добавлены. Впрочем, после достаточно долгого обдумывания задача была решена. (На скриншоте также обратите внимание на классическое дерево в левой стороне окна.)
Второй проблемой оказалось то, что узлы могли отображать разнородные данные в однородной среде (в том самом списке, столбцы которого можно было изначально подогнать под общий формат). Здесь разработка была на некоторое время приостановлена в связи с необходимостью создания нового контрола, способного отображать разнородные данные в стандартизованном виде. Когда контрол приобрёл достаточный функционал и стал относительно стабильным, разработка была продолжена.
Дальше возникла спонтанная идея подсыпать в приложение немного "сахара", чтобы улучшить его вид. Этим "сахаром" оказалась возможность выводить произвольную информацию в произвольной форме (см. правую сторону окна приложения). Цена реализации идеи оказалась близка к нулю, вследствие чего и была реализована.
Панель вызова плагинов (ныне это тоже расширения) также немного трансформировалась, но поведение изменилось прилично (не скажу, в чём заключается, но если вам этого не хватало, вы быстро почувствуете разницу).

Последним в очереди на изменение (точнее, на создание нового с нуля) оказалось приложение Assets Explorer. Его разработка ещё не завершена, оно пока не очень оптимизировано, но результат, прямо скажем, впечатляет. Чего только стоят встраиваемые редакторы материалов (разумеется, расширения). Единственный недостаток приложения - оно не показывает экземпляры файлов, как это было сделано в предыдущей версии (а нужны ли они вообще?) А благодаря добавленной в фреймворк поддержке материалов теперь их можно править прямо здесь! (С помощью достаточно простого расширения.)

Почему Assets Explorer оказался последним? Ведь были ещё приложения Join Packages, Assets Searcher и Assets Manager.

Все эти приложения потеряли смысл своего существования и просто не были перенесены на новую платформу. Два последних стали не нужны именно вследствие получения двоичного доступа к Bin-файлам. Теперь, чтобы получить имя и тип материала, не нужно распаковывать файл из AP-хранилища во временную папку, запускать для этого файла SERZ (не знаю как сейчас, но раньше он читал BIN-файл за два прохода. Зачем - не знаю, мой декодер прекрасно справляется за один), после чего строить из нового временного файла XML документ и искать в нём нужные узлы. Теперь достаточно прочитать сотню-другую байт и найти там нужные данные. Держать базу материалов, которая постоянно стремится стать неактуальной, при возможности быстро получить эти данные напрямую из источника стало просто незачем. А с возможностью подключения и отключения контента - вообще бессмысленно.
Сложнее обстоят дела с Join Packages. Оно было удалено, поскольку его функционал был весьма ограничен. Но ведь у нас теперь есть обновлённый Packager, который позволяет подключить ЛЮБОЙ источник контента, а что мешает быть таковым RWP-пакету или любому другому формату? Единственная (временная) проблема - отсутствие реализации ContentProvider'а для RWP/ZIP. Впрочем, желающие могут самостоятельно реализовать это приложение с использованием уже имеющегося функционала (расширений для Packager).
Спойлер
Контекстное меню в трее:
Изображение
Окно со списком приложений и некоторого дополнительного инструментария:
Изображение
Другие приложения:
Изображение Изображение
Изображение Изображение Изображение
И о приблизительных сроках выхода: ограниченное бета-тестирование (начало) - январь-февраль 2018 г., релиз - весна 2018 г.

P.S. Если вас заинтересовала возможность писать расширения для новой версии TS Editor и у вас есть идеи, которые вы хотели бы реализовать, дайте мне знать. Я напишу ещё один длинный пост о том, как это делается, с примерами кода.

P.P.S. :ded: Всех с Новым годом! Надеюсь, это сообщение подняло вам настроение.
Маршрут "Лесной край". Вся актуальная информация на RailUnion.net. Поддержать проект Яндекс.Деньгами: 410012195452990
Набор утилит TS Editor для Train Simulator: RailroadSim.net, обсуждение на RailUnion.net & RailWorks2.ru
Ответить