План третьей партии: система подсветки + система чертежей
Две ценные функции из 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 (объекты команд, шина событий, битовая сериализация). Рекомендуется продвигать как отдельные специализированные задачи — выполнять партиями, после каждой партии компилировать и проверять в сети, чтобы избежать регрессий при крупных изменениях.