
Hər hansı C++ kitabxanası Godot layihəsinə necə daxil olur
Conan bloqunda dərc olunan təlimat hər hansı C/C++ kitabxanasının GDExtension və godot-cpp 10 vasitəsilə Godot layihəsinə necə daxil olduğunu izah edir. Nümunədə flecs ECS kitabxanası bir səhnədə 100 000 hissəciyi idarə edir.
Godot MIT lisenziyalı pulsuz, açıq mənbəli oyun mühərrikidir, layihələrin çoxu isə GDScript ilə yazılır. Gec-tez artıq C və ya C++ kitabxanası kimi mövcud olan funksionallığa ehtiyac yaranır. GDScript native kodu çağıra bilmir, Godot onu GDExtension vasitəsilə daxil edir, rəsmi C++ bindings olan godot-cpp isə bu kodu adi mühərrik sinifləri kimi təqdim edir.
Conan bloqundakı təlimat bu yolu izah edir: godot-cpp 10 artıq ConanCenter-dədir, nümunədə isə flecs ECS kitabxanası səhnədə 100 000 hissəciyi idarə edir.
Godot C++ kodu ilə necə genişlənir
Godot layihəsi scene-lərdən, node ağaclarından ibarətdir, davranış isə node-a bərkidilmiş script ilə əlavə olunur. C++ kodu iki yolla əlavə edilir: engine module mühərrikin içində kompilyasiya olunur, lakin bütün platformalar üçün öz Godot yığımınızı tələb edir, GDExtension isə shared kitabxananı rəsmi Godot-a runtime zamanı yükləyir və sabit C interfeysi ilə əlaqə saxlayır.

Yığım, çətin hissə
godot-cpp verbose C interfeysini C++ API ilə əhatə edir. 10-cu versiyadan bir release Godot-un 4.3-dən bütün versiyaları ilə işləyir, versiya api_version option-u ilə seçilir, genişlənmə isə üç target-dan birinə kompilyasiya olunur. Sənədlər godot-cpp-nin git submodule kimi əlavə olunmasını təklif edir, amma o zaman hər layihə hər platforma üçün kitabxanaları özü yığır.
Conan asılılıqları götürür
ConanCenter-də godot-cpp recipe-si bu bindings-i adi paketə çevirir: api_version (4.3-dən 4.7-yə qədər, default 4.7) və target Conan option-larıdır. Hər kombinasiya bir dəfə yığılır və sonra bütün layihələrə xidmət edir. ConanCenter-də 1 900-dən çox kitabxana var və Conan hamısını eyni cür yığır.
flecs ilə 100 000 hissəcik
Nümunədə GDExtension flecs üzərində 100 000 hissəciyi idarə edən yeni Swarm node-u qeydiyyatdan keçirir: onlar siçandan qaçır və kənarlara dəyirlər. ECS-də entity sadə id-dir, component ona bərkidilmiş verilənlərdir, system isə bütün uyğun entity-lər üzərindən keçən funksiyadır. Eyni tipli component-lər yaddaşda birlikdə saxlanılır, buna görə çoxlu entity üzərində keçid sürətlidir.

Hər frame-də _process() flecs-ə siçanın mövqeyini ötürür, world.progress() ilə system-ləri işə salır və mövqeləri MultiMesh buffer-inə kopyalayır: MultiMesh bir draw call-da bir mesh-in çoxlu instance-ını çəkir, çünki 100 000 hissəcik üçün ayrı node həddindən artıq ağırdır. Sinif GDREGISTER_RUNTIME_CLASS ilə qeydiyyatdan keçir, yəni editor-da yalnız placeholder-dir.
Yığım bir əmrlə həyata keçirilir: conan build . --build=missing. Conan godot-cpp və flecs-i tapır, hazır binary-ləri ConanCenter-dən endirir və genişlənməni yığır. godot-cpp C++17 tələb edir, buna görə köhnə profile -s compiler.cppstd=17 əlavə olunur.
SiTech — AI ilə gücləndirilmiş veb hazırlanması
Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.