Skip to content

План третьей партии: система подсветки + система чертежей ​

Две ценные функции из cmclient были тщательно изучены, на этой странице задокументированы план портирования и оценка объёма работ.

1. Объектная система подсветки (cm_highlight, 2888 строк) ​

Функция: при активации инструмента строительства в реальном времени подсвечивается предварительный просмотр объектов — целые участки путей, вся зона станции, дороги/парковки, сигналы, мосты, тоннели, причалы, аэропорты, промышленные объекты и т.д. — точный предпросмотр 15 типов объектов.

Зависимости портирования (vanilla API → jrpm API):

Зависимость cmclientАналог в jrpm
DrawSelectionSprite / SetSelectionTilesDirty / DrawTileSelectionRect / DrawAutorailSelection (внутри viewport.cpp)Существуют, но с другой сигнатурой (jgrpp перерабатывал), требуется построчное согласование
TileZoning (раскраска зон городов)В jrpm нет → требуется создание
_fn_mod и другие глобальные состоянияСпецифичны для cmclient → требуется перепроектирование
Конструкторы объектов ObjectTileHighlight::make_rail/road_stop/...Зависят от API станций/дорог NewGRF, в jrpm отличаются от vanilla

Объём работ: примерно 2–3 раунда (по 4–6 часов каждый), основная сложность в согласовании конвейера отрисовки viewport.

2. Система чертежей (cm_blueprint, 660 строк) ​

Функция: выделение области → запись последовательности команд строительства (пути/станции/тоннели/мосты/сигналы) → хранение в 16 слотах → воспроизведение одним нажатием + поворот.

Зависимости портирования:

Зависимость cmclientАналог в jrpm
cm_commands.hpp слой объектов команд (as_company / with_callback / set_auto / no_estimate + 100+ сгенерированных классов команд, 2251 строка)В jrpm нет этой абстракции → требуется сначала портировать/переписать
Состояние _station_gui из cm_station_gui.hppСтруктура состояния GUI станций в jrpm отличается
Умный указатель sp<Blueprint>В jrpm доступен std::shared_ptr
Обход тайлов BlueprintCopyAreaЗависит от общих API типа TileIndexDiffC (в jrpm есть)

Объём работ: примерно 2–3 раунда (включая слой объектов команд).

3. Рекомендуемый порядок выполнения ​

Шаг 1: Слой объектов команд (дизайн cm_command_type, перереализация через Command<T>::Do/Post jrpm)
         — общая основа для чертежей и воспроизведения команд (load_commands)
Шаг 2: Объектная подсветка (согласование конвейера viewport, портирование逐个 объектов)
Шаг 3: Чертежи (копирование/поворот/слоты/воспроизведение)
Шаг 4 (опционально): Воспроизведение команд (lzma полная игра) + зонирование городов (growth_tiles, требуется расширение сохранения)

Предварительные замечания ​

Эти три функции в сумме составляют около 5000+ строк, затрагивают три ключевых слоя (система команд/сохранения/отрисовка viewport) и зависят от ряда промежуточных слоёв, отсутствующих в jrpm (объекты команд, шина событий, битовая сериализация). Рекомендуется продвигать как отдельные специализированные задачи — выполнять партиями, после каждой партии компилировать и проверять в сети, чтобы избежать регрессий при крупных изменениях.