Setelah mempelajari beberapa pola desain gim, saya puas dengan Entity-Component-System (ES System) untuk mesin gim saya. Saya sudah membaca artikel (terutama T = Mesin ) dan meninjau beberapa kode sumber dan saya pikir saya sudah cukup untuk memulai.
Hanya ada satu ide dasar yang saya perjuangkan. Bagaimana cara saya berurusan dengan kelompok entitas yang saling bergantung?
Izinkan saya menggunakan contoh:
Anggaplah saya membuat penembak overhead standar (pikirkan Jamestown ) dan saya ingin membangun "entitas bos" dengan beberapa bagian yang berbeda tetapi terhubung. Rinciannya mungkin terlihat seperti ini:
- Badan kapal: Gerakan, Rendering
- Cannon: Posisi (terkunci relatif terhadap tubuh Kapal), Melacak \ Menembak pahlawan, Mengambil Kerusakan sampai dinonaktifkan
- Inti: Posisi (dikunci relatif terhadap tubuh Kapal), Pelacakan \ Menembak pahlawan, Mengambil Kerusakan sampai dinonaktifkan, Menonaktifkan (er ... menghancurkan) semua entitas lain dalam grup kapal
Tujuan saya akan menjadi sesuatu yang akan diidentifikasi (dan dimanipulasi) sebagai elemen permainan yang berbeda tanpa harus menulis ulang subsistem dari bawah ke atas setiap kali saya ingin membangun Elemen agregat baru.
Bagaimana cara menerapkan desain semacam ini dalam Sistem ES?
- Apakah saya menerapkan semacam hubungan entitas orangtua-anak (entitas dapat memiliki anak)? Ini tampaknya bertentangan dengan metodologi bahwa Entitas hanyalah wadah kosong dan membuatnya terasa lebih OOP.
- Apakah saya menerapkannya sebagai entitas yang terpisah, dengan beberapa jenis Komponen yang terhubung (BossComponent) dan sistem terkait (BossSubSystem)? Saya tidak dapat membantu tetapi berpikir bahwa ini akan sulit untuk diterapkan karena bagaimana komponen berkomunikasi tampaknya menjadi perangkap besar.
- Apakah saya menerapkannya sebagai satu Entitas, dengan koleksi komponen (ShipComponent, CannonComponents, CoreComponent)? Yang ini sepertinya mengarah pada maksud Sistem ES (komponen di sini tampak terlalu mirip entitas yang berat), tapi saya tahu ini jadi saya pikir saya akan meletakkannya di sana.
- Apakah saya menerapkannya sebagai hal lain yang telah saya sebutkan?
Saya tahu bahwa ini dapat diimplementasikan dengan sangat mudah di OOP, tetapi saya memilih ES daripada OOP adalah salah satu yang akan saya ikuti. Jika saya harus memutuskan dengan teori ES murni untuk mengimplementasikan desain ini saya akan (tidak seperti saya belum pernah kompromi desain murni sebelumnya), tetapi saya lebih suka melakukan itu untuk alasan kinerja daripada mulai dengan desain yang buruk.
Untuk kredit tambahan, pikirkan desain yang sama tetapi, masing-masing "entitas bos" sebenarnya terhubung ke "entitas BigBoss" yang lebih besar yang terbuat dari badan utama, inti utama, dan 3 "Entitas Bos". Ini akan membuat saya melihat solusi untuk setidaknya 3 dimensi (kakek-nenek-anak) ... yang seharusnya lebih dari cukup untuk saya.