তৃতীয় ব্যাচ পরিকল্পনা: হাইলাইট সিস্টেম + ব্লুপ্রিন্ট সিস্টেম
cmclient-এর দুটি উচ্চ-মূল্যের বৈশিষ্ট্য গভীরভাবে গবেষণা করা হয়েছে, এই পৃষ্ঠায় পোর্টিং পরিকল্পনা ও কাজের পরিমাণ মূল্যায়ন রেকর্ড করা হয়েছে।
এক. অবজেক্ট-লেভেল হাইলাইট সিস্টেম (cm_highlight, ২৮৮৮ লাইন)
বৈশিষ্ট্য: বিল্ড টুল সক্রিয় হলে, নির্মাণ করতে যাওয়া অবজেক্টের实时 হাইলাইট——রেলের পুরো অংশ, স্টেশন পুরো এলাকা, রাস্তা/পার্কিং লট, সিগন্যাল, ব্রিজ, টানেল, পিয়ার, এয়ারপোর্ট, ইন্ডাস্ট্রি ইত্যাদি ১৫ ধরনের অবজেক্টের সঠিক প্রিভিউ।
পোর্টিং নির্ভরতা (vanilla API → jrpm API):
| cmclient নির্ভরতা | jrpm-এ সংশ্লিষ্ট |
|---|---|
DrawSelectionSprite / SetSelectionTilesDirty / DrawTileSelectionRect / DrawAutorailSelection (viewport.cpp ভিতরে) | বিদ্যমান কিন্তু সিগনেচার ভিন্ন (jgrpp পুনর্গঠন করেছে), একে একে সারিবদ্ধ করতে হবে |
TileZoning (টাউন জোনিং রঙিনকরণ) | jrpm-এ নেই → নতুন তৈরি করতে হবে |
_fn_mod ইত্যাদি গ্লোবাল স্টেট | cmclient-নির্দিষ্ট → পুনরায় ডিজাইন করতে হবে |
ObjectTileHighlight::make_rail/road_stop/... প্রতি অবজেক্ট কনস্ট্রাক্টর | NewGRF স্টেশন/রাস্তা API-র উপর নির্ভরশীল, jrpm ও vanilla-তে পার্থক্য আছে |
কাজের পরিমাণ: প্রায় ২–৩ রাউন্ড (প্রতি রাউন্ড ৪–৬ ঘন্টা), মূল অসুবিধা ভিউপোর্ট ড্র পাইপলাইন সারিবদ্ধকরণ।
দুই. ব্লুপ্রিন্ট সিস্টেম (cm_blueprint, ৬৬০ লাইন)
বৈশিষ্ট্য: এলাকা নির্বাচন → বিল্ড কমান্ড সিকোয়েন্স রেকর্ড (রেল/স্টেশন/টানেল/ব্রিজ/সিগন্যাল) → ১৬ স্লট স্টোরেজ → এক ক্লিকে পুনর্নির্মাণ + ঘূর্ণন।
পোর্টিং নির্ভরতা:
| cmclient নির্ভরতা | jrpm-এ সংশ্লিষ্ট |
|---|---|
cm_commands.hpp কমান্ড অবজেক্ট লেয়ার (as_company / with_callback / set_auto / no_estimate + 100+ জেনারেটেড কমান্ড ক্লাস, ২২৫১ লাইন) | jrpm-এ এই অ্যাবস্ট্রাকশন নেই → প্রথমে পোর্ট/পুনর্লিখন করতে হবে |
cm_station_gui.hpp-এর _station_gui স্টেট | jrpm স্টেশন GUI স্টেট স্ট্রাকচার ভিন্ন |
sp<Blueprint> স্মার্ট পয়েন্টার | jrpm std::shared_ptr ব্যবহার করতে পারে |
BlueprintCopyArea-এর টাইল ট্রাভার্সাল | TileIndexDiffC ইত্যাদি জেনেরিক API-র উপর নির্ভরশীল (jrpm-এ আছে) |
কাজের পরিমাণ: প্রায় ২–৩ রাউন্ড (কমান্ড অবজেক্ট লেয়ার সহ)।
তিন. প্রস্তাবিত বাস্তবায়ন ক্রম
ধাপ ১: কমান্ড অবজেক্ট লেয়ার (cm_command_type ডিজাইন, jrpm-এর Command<T>::Do/Post দিয়ে পুনরায় বাস্তবায়ন)
—— ব্লুপ্রিন্ট ও কমান্ড রিপ্লে (load_commands)-এর সাধারণ ভিত্তি
ধাপ ২: অবজেক্ট-লেভেল হাইলাইট (ভিউপোর্ট পাইপলাইন সারিবদ্ধকরণ, একে একে অবজেক্ট পোর্ট)
ধাপ ৩: ব্লুপ্রিন্ট (কপি/ঘূর্ণন/স্লট/রিপ্লে)
ধাপ ৪ (ঐচ্ছিক): কমান্ড রিপ্লে (lzma সম্পূর্ণ খেলা রিপ্লে) + টাউন জোনিং (growth_tiles,存档 এক্সটেনশন প্রয়োজন)পূর্বশর্ত ব্যাখ্যা
এই তিনটি বৈশিষ্ট্য মোট প্রায় ৫০০০+ লাইন, কমান্ড সিস্টেম/存档/ভিউপোর্ট ড্র তিনটি মূল স্তর জুড়ে বিস্তৃত, এবং jrpm-এ নেই এমন一批 মধ্যস্তরের উপর নির্ভরশীল (কমান্ড অবজেক্ট, ইভেন্ট বাস, বিটস্ট্রিম সিরিয়ালাইজেশন)। স্বাধীন বিশেষ প্রকল্প হিসেবে এগিয়ে নেওয়া বেশি নিরাপদ——প্রতি ব্যাচ কম্পাইল + মাল্টিপ্লেয়ার যাচাইয়ের পর কমিট করার পরামর্শ দেওয়া হয়, একবারে বড় পরিবর্তন এড়িয়ে যা রিগ্রেশন শনাক্ত করা কঠিন করে তোলে।