Hikâye koşulunu bekleyen Flow düğümünde yaşam döngüsü
WaitNarrativeFact düğümümde anında tamamlanma, değişiklik bildirimleri, iptal ve abonelik temizliğini nasıl ele alıyorum?
Bir hikâye akışının, belirli bir durum değişene kadar beklemesi gerekebiliyor. NarrativeFramework’te WaitNarrativeFact, bu ihtiyacı fact subsystem’e bağlayan Flow düğümü.
Buradaki mesele yalnızca koşul gerçekleşince devam etmek değil. Beklemenin nasıl başladığını ve hangi yollarla bittiğini de açıkça ele almak gerekiyor.
Abone olmadan önce kontrol
StartWaiting önce önceki bağları temizliyor. Ardından fact subsystem’i buluyor ve koşulu doğruluyor.
Subsystem yoksa veya koşul geçersizse düğüm Error çıkışını kullanıyor. Koşul zaten sağlanmışsa doğrudan Satisfied çıkışını tetikliyor. Yalnızca gerçekten beklenmesi gerekiyorsa bildirimlere abone oluyor.
Bu ilk kontrol, ilgili durum akış başlamadan önce değişmiş olduğunda önemli.
İlgili değişiklikleri dinlemek
Bekleme sırasında düğüm, seçilen fact’in değer ve tanımlılık delegate’lerine bağlanıyor. Her iki callback de mevcut koşulu yeniden değerlendiriyor.
Koşul hem integer değere hem de fact’in mevcut olup olmadığına bağlı olabildiği için iki bildirim de gerekli. Uygulama fact’i her karede tekrar sorgulamak yerine bu olayları bekliyor.
Üç açık sonuç
Düğüm Satisfied, Stopped ve Error çıkışları sunuyor. Stop girdisi beklemeyi bilinçli olarak sonlandırıyor. Böylece graph, iptali başarılı ilerleyişten ayırabiliyor.
Tamamlanma ortak bir yardımcı fonksiyondan geçiyor: önce abonelikler kaldırılıyor, sonra çıkış tetikleniyor. Cleanup da aynı temizleme yolunu çağırıyor. Delegate handle’ları sıfırlanıyor ve tutulan subsystem referansı temizleniyor.
Yüklemeden sonra beklemeyi yeniden kurmak
OnLoad_Implementation, tekrar StartWaiting çağırıyor. Eski runtime delegate bağlarını kalıcı durum gibi ele almak yerine mevcut durum kontrol edilip yeni abonelikler kuruluyor.
Editörde runtime davranışını açıklamak
Düğümün editör açıklaması koşulu gösteriyor. İnceleme durumu beklediğini, anında tamamlandığını veya hata aldığını belirtebiliyor. Editör doğrulaması da koşulun Narrative.Fact altında kayıtlı bir alt tag kullanmasını kontrol ediyor.
Bu düğümde tasarımın sınırı, yaşam döngüsünün tamamı: başlat, kontrol et, abone ol, durdur ve temizle. Bu adımlar graph’ın davranışını tek bir “koşul gerçekleşene kadar bekle” etiketinden daha anlaşılır kılıyor.
Düğümün izlediği fact deposu ayrı bir geliştirme notunda yer alıyor.