Geliştirici günlüğü

Geliştirici Günlüğü #19: Aylık ve yıllık oyun işleri nasıl zamanlanıyor?

MKA Engine, oyun ve modların seçtiği günlük, haftalık, aylık ve yıllık zamanlarda işleri çağırır; başlangıç dünyası için gereken bir hazırlık da vardır.

İçindekiler
Yeni dünya haritasının yanında takvim; günlük, aylık ve yıllık oyun işleri seçilen zamanlarda işaretli

Kısaca: Bazı oyun işleri her gün değil, ay veya yıl başında yapılır; başlangıç dünyasından hesaplanan bazı değerlerin de ilk oyun adımından önce hazır olması gerekir. MKA Engine, oyun ve modların seçtiği zamanlarda bu işleri çağırabilir; hangi hesabın yapılacağını içerik sahibi belirler. Yeni dünya kurulumunda bir kez çalışan ayrı bir hazırlık işi de vardır.

Yıllık bütçe hesabını düşünelim. Gelirleri her sabah yeniden toplamak yerine yıl başında hesaplamak daha anlamlı olabilir. Yeni kurulan bir dünyada, başlangıç nüfusundan türetilen bir toplamın oyuncu ilk günü görmeden hazır olması da gerekebilir. Bu işlerin ne zaman yapılacağını oyun seçer; motor seçilen anı oyun akışında bulup ilgili işi çağırır.

Sorun ne idi?

Oyun zamanı ilerletirken bir aralığı işler; bu oyun adımı her zaman tek bir takvim gününü kapsamaz. Bazı oyunlar daha uzun adımlarla ilerleyebilir; böyle bir adım birden fazla gün, hafta veya ay başlangıcını içine alabilir. Modun kendi takvim hesabını kurması, adımın kapsadığı dönemi doğru yorumlamasını zorlaştırır.

Yeni oyun kurulurken de farklı bir ihtiyaç vardır. Başlangıç verilerinden hesaplanacak bir değer, oyuncunun ilk gördüğü dünya özetine yetişmelidir. Bunu sonraki bir oyun adımına bırakmak ilk görüntüde eksik değer gösterebilir; her adımda yeniden hesaplamak ise işi gereksiz yere tekrarlar.

Takvimde seçilen zamanda çalışmak

Oyun ya da mod, bir işi günlük, haftalık, aylık veya yıllık bir başlangıca bağlayabilir. Motor, seçilen başlangıcın kapsandığı oyun adımında o işi çağırır. Hangi hesabın yapılacağı motora ait değildir: örneğin verginin hangi dönemde toplanacağı oyun kuralıdır.

Oyun adımı bir takvim başlangıcını içeriyorsa iş o adımda bir kez çağrılır. Adım birkaç başlangıcı kapsasa bile motor işi her başlangıç için arka arkaya çalıştırmaz. Böylece çağrı anı açıktır; birden fazla dönemin içindeki günleri ayrı ayrı ele alması gereken mod, bu aralığı kendi hesabında gözetmelidir.

Dönemin ortasında başlayan oyun da bu kurala uyar. İlk kısa adım yeni bir ay başlangıcını içermiyorsa aylık iş hemen çağrılmaz; ay başlangıcını kapsayan sonraki adımda çağrılır. Motor başlangıç tarihini yeni bir dönem gibi varsaymaz.

Takvim şeridinde birkaç bölümü kapsayan oyun aralığı, haritaya bağlanan tek bir zamanlanmış işareti gösteriyor

Yeni dünya için bir kez yapılan hazırlık

Yeni oyun kurulurken motor, başlangıç dünyasından türetilen değerlerin hazırlanabileceği özel bir zaman sunar. Bu iş ilk günün özeti ve oyuncuya gösterilen ilk görüntü oluşturulmadan önce çağrılır. Böylece başlangıç nüfusu gibi verilerden hesaplanan bir değer, ilk oyun adımına hazır olabilir.

Kayıtlı oyun açıldığında bu hazırlık yeniden yapılmaz. Başlangıçta hesaplanan değer kayıtla birlikte saklanır; yükleme aynı oyunu kaldığı yerden sürdürür. Bu işi kullanmayan oyun için de ek bir hesaplama yapılmaz.

Yeni dünya hazırlanırken abaküsle hesaplanıp haritaya konan değer, kayıtlı dünya açıldığında aynı haritada korunuyor

Atlanan iş diğer sonuçları değiştirir mi?

Takvimde o adım için zamanı gelmeyen iş çağrılmaz. Bunun başka işlerin rastgele sonuçlarını kaydırmaması önemlidir: bir işin atlanması, diğer işlerin alacağı sonuçları farklı bir sıraya taşımaz. Böylece aynı oyun durumu, aynı koşullarda tutarlı sonuçlar vermeyi sürdürür.

Ne gördük?

Motor ve mod katmanındaki doğrulamalar, takvim başlangıcını kapsayan adımda seçilen işin bir kez çağrıldığını ve çağrı sırasının korunduğunu gösteriyor. Yeni oyun hazırlığının ilk özetten önce çalışması ve kayıt yüklenince yeniden yapılmaması da doğrulandı. Burada hız karşılaştırması yok; anlattığımız sonuçlar zamanlama ve başlangıç değerlerinin hazır oluşuyla ilgili.

Neden böyle seçtik?

Tarih aralıklarının hangi dönem başlangıcını içerdiğini motor zaten bilir. Bu bilgiyi oyun ve modların ayrı ayrı hesaplaması yerine motorun çağrı zamanını belirlemesi, uzun adımlarda takvim sınırını kaçırma riskini azaltır. Hangi işin hangi dönemde yapılacağı yine oyunun veya modun kararıdır.

Başlangıç değerleri için ayrı bir hazırlık anı kullanmak, aynı hesabı her gün tekrarlama ihtiyacını da ortadan kaldırır. Oyun bu hazırlığı istemiyorsa hiçbir başlangıç hesabı çalışmaz.

Bedeli ne?

Bir çağrı kendi başına önceki çalışmasından kalan bilgiyi saklamaz; dönemler arasındaki fark önemliyse oyun veya mod bu bilgiyi dünyasında tutmalıdır. Ayrıca uzun bir oyun adımında çağrı, kapsanan her dönem için değil adım başına bir kez yapılır. Hız kazancı ölçülmedi.

Sırada ne var?

Takvimle çalışan oyun işlerinden sonra, oyun dünyasındaki aile ve veraset ilişkilerinin nasıl ele alındığını inceleyeceğiz.

Sık sorulanlar

Aylık bir iş ayın her günü mü çalışır?

Hayır. Ay başlangıcını kapsayan oyun adımında bir kez çağrılır. Adım birden fazla ay başlangıcını kapsasa da her biri için ayrı çağrı yapılmaz.

Yeni oyun hazırlığı kayıt yüklenince tekrar çalışır mı?

Hayır. Başlangıçta hesaplanan değerler kayıtla birlikte saklanır; yükleme aynı oyunu sürdürür.

Motor hangi işin aylık veya yıllık olacağına karar verir mi?

Hayır. Dönemi oyun veya mod seçer; motor seçilen zamanın kapsandığı oyun adımında işi çağırır.

Bir takvim işi atlanırsa diğer işlerin rastgele sonuçları değişir mi?

Hayır. Atlanan iş diğer işlerin rastgele sonuçlarını başka bir sıraya kaydırmaz.

Dönemlerin veriye nasıl yansıdığı için Geliştirici Günlüğü #12, oyun adımının genel sırası için Geliştirici Günlüğü #4 ve olayların çalışma anı için Geliştirici Günlüğü #6 yazılarımıza bakabilirsiniz. Daha fazla bilgi için MKA Engine sayfasını, sorularınız için iletişim sayfasını ziyaret edin.

Kaynaklar ve ilgili belgeler

Bunlar da ilginizi çekebilir