Anlatı runtime’ını ve editör araçlarını ayrı modüllerde tutmak

NarrativeFact ve NarrativeFactEditor üzerinden somut bir mimari örneği: hikâye durumu, içerik üretim araçları ve bağımlılık yönü.

NarrativeFramework hem oynanış sistemlerini hem de bunları düzenlemek için kullanılan araçları içeriyor. Fact sisteminde bu sorumlulukları iki modülde tutuyorum: NarrativeFact ve NarrativeFactEditor.

Runtime’a ait olanlar

NarrativeFact, fact deposunu, koşul tiplerini, ayarları ve preset’leri barındırıyor. Build bağımlılıkları arasında Core, CoreUObject, Engine, GameplayTags ve DeveloperSettings var.

Bunlar, oyun anlatı durumunu sorgularken veya değiştirirken ihtiyaç duyduğu parçalar. Bu iş için bir editör penceresine veya asset düzenleme paneline ihtiyaçları yok.

Editöre ait olanlar

NarrativeFactEditor, runtime modülüne bağımlı. Ayrıca AssetTools, Slate, SlateCore, UnrealEd ve WorkspaceMenuStructure gibi editör bağımlılıklarını ve ortak NarrativeEditorFramework altyapımı kullanıyor.

Plugin tanımı, NarrativeFact modülünü Runtime, NarrativeFactEditor modülünü Editor olarak bildiriyor. Ayrım böylece hem kaynak yapısında hem modül tanımlarında ifade ediliyor.

Okunabilir bir bağımlılık yönü

Editör katmanı, düzenlenmesine yardımcı olduğu runtime tiplerini tanıyor. Runtime modülünün build tanımında ise NarrativeFactEditor veya UnrealEd bağımlılığı yok.

Bu yalnızca bir isimlendirme tercihi değil, somut bir sınır. Editör özelliğinin oynanış tipine erişmesi gerektiğinde bağımlılık runtime’a doğru ilerliyor. Bu modül çiftinde ters yönde bağımlılık bulunmuyor.

Entegrasyon katmanı olarak Flow

Fact ile ilgili Flow düğümleri NarrativeFlow içinde yer alıyor. Fact deposunun kendi build tanımında Flow bağımlılığı yok.

Böylece iki sorumluluğu ayrı ifade edebiliyorum: fact sistemi durumu temsil edip sorguluyor; Flow düğümleri bu durumu içerik olarak düzenlenen akışa bağlıyor. Önceki notta anlattığım bekleme düğümü bunun bir örneği.

Bu notun gösterdiği şey

Modül tanımları mevcut uygulamayı nasıl düzenlediğimi gösteriyor. Framework’ün bütün modüllerinin tamamlandığını veya bir performans ölçümü elde edildiğini iddia etmiyor.

Geliştirmekte olduğum bir proje için bu küçük ve incelenebilir sınırlar portfolyoda değerli: sorumlulukların nerede yaşadığını ve Coldwater Hollow’un arkasındaki kodu nasıl yapılandırdığımı gösteriyor.

Coldwater Hollow, runtime ve içerik üretim çalışmalarını bir araya getiriyor.