Skip to content

Perencanaan Batch Ketiga: Sistem Sorotan + Sistem Cetak Biru ​

Dua fitur bernilai tinggi dari cmclient telah diteliti secara mendalam, halaman ini mencatat skema porting dan estimasi beban kerja.

I. Sistem Sorotan Objek (cm_highlight, 2888 baris) ​

Fitur: Saat alat bangun aktif, sorot objek yang akan dibangun secara real-time——pratinjau tepat untuk 15 objek termasuk seluruh segmen rel, seluruh area stasiun, jalan/tempat parkir, sinyal, jembatan, terowongan, dermaga, bandara, industri, dll.

Dependensi porting (vanilla API → jrpm API):

Dependensi cmclientPadanan jrpm
DrawSelectionSprite / SetSelectionTilesDirty / DrawTileSelectionRect / DrawAutorailSelection (di dalam viewport.cpp)Ada tetapi tanda tangan berbeda (jgrpp telah direstrukturisasi), perlu diselaraskan satu per satu
TileZoning (pewarnaan zonasi kota)jrpm tidak ada → perlu dibuat baru
_fn_mod dan status global lainnyaEksklusif cmclient → perlu desain ulang
Konstruktor objek ObjectTileHighlight::make_rail/road_stop/...Bergantung pada API stasiun/jalan NewGRF, jrpm dan vanilla berbeda

Beban kerja: Sekitar 2–3 putaran (setiap putaran 4–6 jam), kesulitan inti ada pada penyelarasan pipeline rendering viewport.

II. Sistem Cetak Biru (cm_blueprint, 660 baris) ​

Fitur: Pilih area → rekam urutan perintah bangun (rel/stasiun/terowongan/jembatan/sinyal) → penyimpanan 16 slot → bangun ulang satu tombol + rotasi.

Dependensi porting:

Dependensi cmclientPadanan jrpm
cm_commands.hpp Lapisan objek perintah (as_company / with_callback / set_auto / no_estimate + 100+ kelas perintah yang dihasilkan, 2251 baris)jrpm tidak memiliki abstraksi ini → harus di-porting/ditulis ulang terlebih dahulu
Status _station_gui dari cm_station_gui.hppStruktur status GUI stasiun jrpm berbeda
Pointer pintar sp<Blueprint>jrpm dapat menggunakan std::shared_ptr
Penelusuran ubin BlueprintCopyAreaBergantung pada API umum seperti TileIndexDiffC (jrpm punya)

Beban kerja: Sekitar 2–3 putaran (termasuk lapisan objek perintah).

III. Urutan Implementasi yang Direkomendasikan ​

Langkah 1: Lapisan objek perintah (desain cm_command_type, implementasi ulang dengan Command<T>::Do/Post milik jrpm)
         —— Fondasi bersama untuk cetak biru dan pemutaran ulang perintah (load_commands)
Langkah 2: Sorotan objek (selaraskan pipeline viewport, porting objek satu per satu)
Langkah 3: Cetak biru (salin/putar/slot/pemutaran ulang)
Langkah 4 (opsional): Pemutaran ulang perintah (pemutaran ulang seluruh game lzma) + Zonasi kota (growth_tiles, perlu ekstensi arsip)

Catatan Prasyarat ​

Ketiga fitur ini total sekitar 5000+ baris, melintasi tiga lapisan inti sistem perintah/arsip/rendering viewport, dan bergantung pada serangkaian lapisan perantara yang tidak dimiliki jrpm (objek perintah, bus acara, serialisasi bitstream). Lebih aman untuk melanjutkan sebagai proyek khusus independen——disarankan untuk dilakukan secara bertahap, setiap batch dikompilasi + diverifikasi online sebelum dikomit, untuk menghindari perubahan besar sekali waktu yang sulit menemukan regresi.