Birkaç oyun tasarım modelinin üzerinden geçtikten sonra oyun motorum için Entity-Component-System (ES Sistemi) ile anlaştım. Makaleler okudum (çoğunlukla T = Makine ) ve bazı kaynak kodları inceliyorum ve başlamak için yeterince başladığımı düşünüyorum.
Mücadele ettiğim tek bir temel fikir var. Birbirine bağlı varlık grupları ile nasıl başa çıkabilirim?
Bir örnek kullanmama izin ver:
Standart bir tepegöz atıcı yaptığımı ( Jamestown'u düşünün ) ve birden çok farklı ancak birbirine bağlı parçaları olan bir "patron varlık" oluşturmak istediğimi varsayalım . Yıkılma şöyle bir şeye benzeyebilir:
- Gemi gövdesi: Hareket, Rendering
- Savaş Topu: Pozisyon (Gemi gövdesine göre kilitlenmiş), Takipte \ Kahramanda Ateş Et, Engelli Kadar Zarar Görüyor
- Çekirdek: Konum (Gemi gövdesine göre kilitlenmiş), Takip Etme \ Kahramana ateş etme, Engelli oluncaya kadar Hasar Alma, gemi grubundaki diğer tüm varlıkları Devre Dışı Bırakma (er ... yok etme)
Amacım, her yeni bir toplam Eleman inşa etmek istediğimde alt sistemi yeniden yazmak zorunda kalmadan farklı bir oyun öğesi olarak tanımlanacak (ve manipüle edilecek) bir şey olurdu.
Bu tür bir tasarımı ES Sisteminde nasıl uygularım?
- Bir tür ebeveyn-çocuk varlığı ilişkisini uygulayabilir miyim (işletmelerin çocukları olabilir)? Bu, Kurumların sadece boş konteyner olmaları ve daha fazla OOP hissetmelerine neden olan metodolojiyle çelişmektedir.
- Bunları bir tür Bileşen (BossComponent) ve ilgili sistemle (BossSubSystem) bağlayan ayrı varlıklar olarak mı uyguluyorum? Yardımcı olamam ama bileşenlerin nasıl iletişim kurdukları büyük bir ayı tuzağı gibi göründüğü için bunun zor olacağını düşünüyorum.
- Bunları bir bileşen koleksiyonuyla (ShipComponent, CannonComponents, CoreComponent) tek bir Varlık olarak mı uyguluyorum? Bu, ES Sisteminin amacından sapmış gibi görünüyor (buradaki bileşenler ağır ağırlık varlıklarına çok benziyor), ama bunu biliyorum, o yüzden bunu ortaya koyacağımı düşündüm.
- Onları bahsettiğim başka bir şey olarak mı uyguluyorum?
Bunun OOP'da çok kolay bir şekilde uygulanabileceğini biliyorum, ancak ES'yi OOP'a göre seçmem buna bağlı kalacağım. Bu tasarımı uygulamak için saf ES teorisini kırmam gerekirse, (daha önce saf tasarımdan ödün vermek zorunda olmadığım gibi değil), ancak bunu kötü tasarımla başlamak yerine performans nedeniyle yapmayı tercih ederim.
Ekstra kredi için, aynı tasarımı düşünün, ancak, "patron varlıkların" her biri aslında bir ana gövdeden, ana çekirdekten ve 3 "Patron Varlıktan" oluşan daha büyük bir "BigBoss varlık" ile bağlantılıydı. Bu benim için fazlasıyla yeterli olacak en az 3 boyut için bir çözüm görmeme izin verdi (büyük ebeveyn-ebeveyn-çocuk).