EnTTtelah menjadi mimpi sejauh ini, kami belum menemukan satu bug hingga saat ini dan sangat mudah untuk dikerjakan- setiap pengguna entt yang pernah ada
EnTT adalah perpustakaan yang hanya header, kecil dan mudah digunakan untuk pemrograman game dan lebih banyak lagi ditulis dalam C ++ modern .
Antara lain, ini digunakan di Minecraft oleh Mojang, SDK runtime ArcGIS oleh Esri dan Ragdoll yang menakjubkan.
Jika Anda tidak melihat proyek Anda dalam daftar, silakan buka masalah, kirimkan PR atau tambahkan tag #EnTT ke topik Anda! ?
Apakah Anda ingin mengikuti perubahan atau Anda memiliki pertanyaan yang tidak mengharuskan Anda untuk membuka masalah?
Bergabunglah dengan saluran Gitter dan server Discord, temui pengguna lain seperti Anda. Semakin banyak kita, semakin baik untuk semua orang.
Jangan lupa untuk memeriksa FAQ dan wiki juga. Jawaban Anda mungkin sudah ada di sana.
Apakah Anda ingin mendukung EnTT ? Pertimbangkan menjadi sponsor atau memberikan donasi melalui PayPal .
Terima kasih banyak kepada orang -orang ini dan terima kasih khusus kepada:


Sistem entitas-komponen (juga dikenal sebagai ECS ) adalah pola arsitektur yang digunakan sebagian besar dalam pengembangan game. Untuk perincian lebih lanjut:
Proyek ini dimulai sebagai sistem komponen entitas murni. Seiring waktu basis kode telah tumbuh karena semakin banyak kelas dan fungsionalitas ditambahkan.
Berikut adalah daftar singkat, namun tidak lengkap tentang apa yang ditawarkannya hari ini:
constexpr untuk nama sumber daya yang dapat dibaca manusia. Pertimbangkan daftar ini dalam proses serta proyek. Seluruh API sepenuhnya didokumentasikan dalam kode untuk mereka yang cukup berani untuk membacanya.
Tolong, perhatikan bahwa semua alat juga ramah-DLL sekarang dan berjalan dengan lancar melintasi batas.
Satu hal yang paling diketahui adalah bahwa EnTT juga digunakan di Minecraft .
Mengingat bahwa permainan ini tersedia secara harfiah di mana -mana, saya dapat dengan yakin mengatakan bahwa perpustakaan telah cukup diuji pada setiap platform yang dapat muncul di pikiran.
# include < entt/entt.hpp >
struct position {
float x;
float y;
};
struct velocity {
float dx;
float dy;
};
void update (entt::registry ®istry) {
auto view = registry. view < const position, velocity>();
// use a callback
view. each ([]( const auto &pos, auto &vel) { /* ... */ });
// use an extended callback
view. each ([]( const auto entity, const auto &pos, auto &vel) { /* ... */ });
// use a range-for
for ( auto [entity, pos, vel]: view. each ()) {
// ...
}
// use forward iterators and get only the components of interest
for ( auto entity: view) {
auto &vel = view. get <velocity>(entity);
// ...
}
}
int main () {
entt::registry registry;
for ( auto i = 0u ; i < 10u ; ++i) {
const auto entity = registry. create ();
registry. emplace <position>(entity, i * 1 . f , i * 1 . f );
if (i % 2 == 0 ) { registry. emplace <velocity>(entity, i * . 1f , i * . 1f ); }
}
update (registry);
} Saya mulai mengembangkan EnTT karena alasan yang salah : tujuan saya adalah merancang sistem komponen entitas untuk mengalahkan perpustakaan sumber terbuka terkenal lainnya baik dalam hal kinerja dan kemungkinan penggunaan memori.
Pada akhirnya, saya melakukannya, tetapi itu tidak terlalu memuaskan. Sebenarnya itu tidak memuaskan sama sekali. Yang tercepat dan tidak lebih, memang sedikit sedikit. Ketika saya menyadarinya, saya berusaha keras untuk menjaga kinerja EnTT yang luar biasa dan untuk menambahkan semua fitur yang ingin saya lihat di perpustakaan saya sendiri pada saat yang sama.
Saat ini, EnTT akhirnya adalah apa yang saya cari: masih lebih cepat dari para pesaingnya , penggunaan memori yang lebih rendah dalam kasus rata -rata, API yang sangat bagus dan serangkaian fitur yang luar biasa. Dan bahkan lebih, tentu saja.
Untuk apa nilainya, Anda tidak akan pernah melihat saya mencoba membuat proyek lain terlihat buruk atau menawarkan perbandingan yang meragukan hanya untuk membuat perpustakaan ini tampak lebih keren.
Saya menyerahkan kegiatan ini kepada orang lain, jika mereka menikmatinya (dan tampaknya beberapa orang benar -benar menyukainya). Saya lebih suka memanfaatkan waktu saya dengan lebih baik.
Jika Anda tertarik, Anda dapat mengkompilasi tes benchmark dalam mode rilis (untuk mengaktifkan optimasi kompiler, jika tidak, itu tidak akan masuk akal) dengan mengatur opsi CMake ON ENTT_BUILD_BENCHMARK , kemudian evaluasi sendiri apakah Anda puas dengan hasil atau tidak.
Ada juga banyak proyek di luar sana yang menggunakan EnTT sebagai dasar untuk perbandingan (ini seharusnya sudah memberi tahu Anda banyak). Banyak dari tolok ukur ini benar -benar salah, banyak yang lain tidak lengkap, pandai menghilangkan beberapa informasi dan menggunakan fungsi yang salah untuk membandingkan fitur yang diberikan. Tentu saja ada juga yang bagus tetapi mereka menua dengan cepat jika tidak ada yang memperbaruinya, terutama ketika perpustakaan yang mereka hadapi secara aktif dikembangkan.
Dari semuanya, ini sepertinya proyek yang paling terkini dan juga mencakup sejumlah perpustakaan tertentu. Saya tidak bisa mengatakan dengan tepat apakah EnTT digunakan dengan benar atau tidak. Namun, bahkan jika digunakan dengan buruk, itu masih harus memberi pembaca gambaran di mana ia akan beroperasi.
EnTT adalah perpustakaan header saja. Ini berarti bahwa memasukkan header entt.hpp sudah cukup untuk memasukkan perpustakaan secara keseluruhan dan menggunakannya. Bagi mereka yang hanya tertarik pada sistem komponen entitas, pertimbangkan untuk memasukkan satu-satunya entity/registry.hpp header sebagai gantinya.
Ini masalah menambahkan baris berikut ke bagian atas file:
# include < entt/entt.hpp >Gunakan baris di bawah ini untuk memasukkan hanya sistem komponen entitas sebagai gantinya:
# include < entt/entity/registry.hpp > Kemudian berikan argumen -I yang tepat ke kompiler untuk menambahkan direktori src ke jalur include.
Untuk dapat menggunakan EnTT , pengguna harus menyediakan kompiler berfitur lengkap yang mendukung setidaknya C ++ 17.
Persyaratan di bawah ini wajib untuk mengkompilasi tes dan mengekstrak dokumentasi:
CMake Versi 3.7 atau lebih baru.Doxygen Versi 1.8 atau lebih baru. Atau, Bazel juga didukung sebagai sistem build (kredit untuk Zaucy yang menawarkan untuk mempertahankannya).
Dalam dokumentasi di bawah ini, saya akan tetap merujuk pada CMake , ini menjadi sistem pembangunan resmi perpustakaan.
Untuk menggunakan EnTT dari proyek CMake , cukup tautkan target yang ada ke alias EnTT::EnTT .
Perpustakaan menawarkan semua yang Anda butuhkan untuk menemukan (seperti dalam find_package ), menanamkan (seperti dalam add_subdirectory ), mengambil (seperti dalam FetchContent ) atau menggunakannya dalam banyak cara yang dapat Anda pikirkan dan yang melibatkan CMake .
Meliputi semua kasus yang mungkin akan memerlukan risalah dan bukan file readme sederhana, tetapi saya yakin siapa pun yang membaca bagian ini juga tahu apa itu dan dapat menggunakan EnTT dari proyek CMake tanpa masalah.
Saat menggunakan CMake , cukup aktifkan opsi ENTT_INCLUDE_NATVIS dan nikmati.
Kalau tidak, sebagian besar alat dibahas melalui NATVIS dan semua file dapat ditemukan di direktori natvis , dibagi dengan modul.
Jika Anda menemukan kesalahan atau memiliki saran, kontribusi apa pun diterima!
EnTT tersedia untuk beberapa alat pengemasan yang paling dikenal. Secara khusus:
Conan , manajer paket C/C ++ untuk pengembang.
vcpkg , Alat Pengemasan Microsoft VC ++.
Anda dapat mengunduh dan menginstal EnTT hanya dalam beberapa langkah sederhana:
$ git clone https://github.com/Microsoft/vcpkg.git
$ cd vcpkg
$ ./bootstrap-vcpkg.sh
$ ./vcpkg integrate install
$ vcpkg install entt
Atau Anda dapat menggunakan fitur experimental untuk menguji perubahan terbaru:
vcpkg install entt[experimental] --head
Port EnTT di vcpkg selalu up to date oleh anggota tim Microsoft dan kontributor komunitas.
Jika versi sudah ketinggalan zaman, silakan buat masalah atau tarik permintaan pada repositori vcpkg .
Homebrew , manajer paket yang hilang untuk macOS.
Tersedia sebagai formula homebrew. Cukup ketikkan berikut untuk menginstalnya:
brew install skypjack/entt/entt
build2 , Build Toolchain untuk mengembangkan dan mengemas kode C dan C ++.
Untuk menggunakan paket entt dalam proyek build2 , tambahkan baris berikut atau yang serupa dengan file manifest :
depends: entt ^3.0.0
Periksa juga bahwa konfigurasi mengacu pada repositori yang valid, sehingga paket dapat ditemukan oleh build2 :
cppget.org , repositori pusat komunitas open-source, dapat diakses sebagai https://pkg.cppget.org/1/stable .
Repositori Sumber Paket: Dapat Diakses sebagai https://github.com/build2-packaging/entt.git atau ssh://[email protected]/build2-packaging/entt.git . Jangan ragu untuk melaporkan masalah dengan paket ini.
Keduanya dapat digunakan dengan bpkg add-repo atau ditambahkan dalam Proyek repositories.manifest . Lihat dokumentasi resmi untuk lebih jelasnya.
bzlmod , Sistem Manajemen Ketergantungan Eksternal Bazel.
Untuk menggunakan modul entt dalam proyek bazel , tambahkan yang berikut ini ke file MODULE.bazel Anda:
bazel_dep ( name = "entt" , version = "3.12.2" ) Entt sekarang akan tersedia sebagai @entt (pendek untuk @entt//:entt ) untuk digunakan dalam deps cc_* Anda.
Pertimbangkan daftar ini dalam proses dan bantu saya untuk membuatnya lebih lama jika Anda suka.
EnTT juga mendukung pkg-config (setidaknya untuk beberapa definisi dukungan ). File yang sesuai yang disebut entt.pc dihasilkan dan diinstal dalam direktori yang tepat saat menjalankan CMake .
Ini juga harus membuatnya lebih mudah digunakan dengan alat seperti Meson atau serupa.
Dokumentasi didasarkan pada doxygen. Untuk membangunnya:
$ cd build
$ cmake .. -DENTT_BUILD_DOCS=ON
$ make
Referensi API dibuat dalam format HTML di direktori build/docs/html . Untuk menavigasi dengan browser favorit Anda:
$ cd build
$ your_favorite_browser docs/html/index.html
Versi yang sama juga tersedia online untuk rilis terbaru, yaitu tag stabil terakhir.
Selain itu, ada wiki yang didedikasikan untuk proyek di mana pengguna dapat menemukan semua halaman dokumentasi terkait.
Untuk mengkompilasi dan menjalankan tes, EnTT membutuhkan Googletest .
cmake mengunduh dan mengkompilasi perpustakaan sebelum menyusun apa pun. Untuk membangun tes, atur opsi CMake ENTT_BUILD_TESTING ke ON .
Untuk membangun set tes paling dasar:
$ cd build$ cmake -DENTT_BUILD_TESTING=ON ..$ make$ make testPerhatikan bahwa tolok ukur bukan bagian dari set ini.
EnTT banyak digunakan dalam aplikasi pribadi dan komersial. Saya bahkan tidak dapat menyebutkan sebagian besar dari mereka karena beberapa tanda tangan yang saya masukkan pada beberapa dokumen waktu yang lalu. Untungnya, ada juga orang yang meluangkan waktu untuk mengimplementasikan proyek sumber terbuka berdasarkan EnTT dan tidak menahan diri ketika datang untuk mendokumentasikannya.
Di sini Anda dapat menemukan daftar permainan, aplikasi, dan artikel yang tidak lengkap yang dapat digunakan sebagai referensi.
Jika Anda mengetahui sumber daya lain di luar sana yang ada tentang EnTT , jangan ragu untuk membuka masalah atau PR dan saya akan dengan senang hati menambahkannya ke daftar.
Permintaan fitur, PR, saran, dan umpan balik sangat dihargai.
Jika Anda menemukan Anda dapat membantu dan ingin berkontribusi pada proyek dengan pengalaman Anda atau Anda ingin mendapatkan bagian dari proyek dengan alasan lain, jangan ragu untuk menghubungi saya secara langsung (Anda dapat menemukan surat di profil).
Saya tidak dapat berjanji bahwa setiap kontribusi akan diterima, tetapi saya dapat memastikan bahwa saya akan melakukan yang terbaik untuk mengambil semuanya sesegera mungkin.
Jika Anda memutuskan untuk berpartisipasi, silakan lihat pedoman untuk berkontribusi sebelumnya untuk membuat masalah atau tarik permintaan.
Lihat juga daftar kontributor untuk mengetahui siapa yang telah berpartisipasi sejauh ini.
Kode dan Dokumentasi Hak Cipta (C) 2017-2024 Michele Caini.
Hak Cipta Logo Berwarna-warni (C) 2018-2021 Richard Caseres.
Kode yang dirilis di bawah lisensi MIT.
Dokumentasi yang dirilis di bawah CC oleh 4.0.
Semua logo yang dirilis di bawah CC BY-SA 4.0.