Tutorial:Kombinatör eğitimi
Bu ileri düzey bir eğitimdir. Yeni başlayanlar, örnekler için Tutorial:Circuit network cookbook (Devre ağı yemek kitabı) sayfasına ve devre ağına genel bakış için Circuit network sayfasına başvurmalıdır. Bu eğitim, temel devre bilgisini varsayar ve SR latch'ler, bellek hücreleri ve saatler (clocks) gibi daha ileri konuları kapsar.
== Giriş == Kombinatör mantığı, istenen mantıksal sonucu elde etmek için çıkışların girişlere çapraz bağlanmasıyla sağlanır. İleri düzey mantık çok sayıda kombinatör gerektirse de, sadece birkaç kombinatör kullanılarak bazı çok yararlı temel mantıklar elde edilebilir. Kombinatör mantığı çalışır çünkü Factorio saniyede yalnızca 60 kez güncelleme yapar (60 ticks per second). Mantıksal olarak, her güncelleme adımı (tick) iki aşamaya ayrılır. İlk aşamada, tüm kombinatörler önce bağlı ağlardan gelen girişi okur ve hesaplamalarını yapar. Bu, her kombinatör için bir çıkış değeri üretir. Güncelleme adımı, her ağın değerinin tüm bağlı değerlerin toplamı olarak güncellendiği ikinci aşama ile sona erer.
Mantıksal değerler kombinatörler tarafından hesaplandığında, çıkışlar bir sonraki adıma kadar devre ağı tarafından algılanmaz. Dolayısıyla, belirli bir giriş durumunu tespit etmek için bir decider combinator (karar kombinatörü) kullanıldığında, çıkış değeri bir sonraki adıma kadar devre ağında etkili olmayacaktır. Bu davranışı hatırlamak önemlidir; birden fazla kombinatör seri bağlandığında sıralama hatalarına ve önemli gecikmelere neden olabilir.
Devre kabloları, elektronikteki bir veri yolu (bus) gibi davranır; bağlı kablolardaki bilgileri taşırlar, yani bir kablo üzerinde benzer sinyaller varsa bunları otomatik olarak toplarlar. Eğer sinyal farklıysa, o da kabloda taşınır ancak farklı bir sinyal olarak kabul edilir.
Kombinatörleri çapraz bağlarken, giriş ve çıkış ağlarını ayırmak ve istenmeyen girişlerin yanlışlıkla daha büyük bir devre ağına bağlanmasını önlemek için kullanılmayan rengi (kırmızı/yeşil) kullanmak iyi bir uygulamadır. Kombinatörler, hesaplamadan önce kırmızı ve yeşil girişleri toplayacaktır; bu nedenle çıkışı girişe geri bağlarken her iki renk de kullanılabilir. Ancak çoğu durumda, sonuçtaki çıkış ve girişle karışmaması için telin zıt rengini kullanmak daha yararlıdır.
Kombinatörleri anlamaya çalışırken en iyi dostunuz oyun içi düzenleyicidir. Oyunu durdurabilir ve "Bir kez ilerlet" (Tick once) tuş atamasıyla, düğümlerin ve ağların farklı aşamalardan geçerkenki durumlarını inceleyebilirsiniz.
Sanal sinyaller

Standart eşya sinyallerine ek olarak, Factorio'nun devre ağı, herhangi bir oyun eşyasını temsil etmeyen bir dizi sinyal de içerir. Bunun yerine, bu sanal sinyaller devre ağı için kullanıcı tarafından tanımlanabilen kanallar olarak hizmet eder; kullanıcı onlara hangi anlamı yüklemek isterse onu taşırlar. Şu anda devre ağı üzerinden gönderilebilen 102 sanal sinyal vardır (veya Space Age
eklentisinde 172), bunlar Sinyaller, Düşmanlar, Çevre ve Sınıflandırılmamış sekmelerine ayrılmıştır. Bunlar şunları içerir ancak bunlarla sınırlı değildir:
36 alfanümerik karakter (A-Z, 0-9)
9 renk: kırmızı, yeşil, mavi, sarı, macenta, camgöbeği, beyaz, gri ve siyah
25 simge: çeşitli çarpılar, çizgiler ve oklar
Tüm düşman çeşitleri
Tüm çevresel nesneler (ağaçlar, kayalar, oyuncu ve uçurumlar)
İki kablo türü, spidertron, deşarj ve topçu kumandaları
Mantık sinyalleri
Mantık sinyalleri olarak bilinen üç ek sanal sinyal vardır. Diğer sinyallerin aksine, bunlar devre ağı üzerinden gönderilemezler; bunun yerine kombinatörlerin davranışını değiştiren ek mantıklar uygularlar. Özellikle, bu mantık sembolleri, tek bir ayrık sinyali temsil etmek yerine sıfır veya daha fazla rastgele sinyali temsil eden özel "joker karakterler" (wildcards) olarak hareket eder. Factorio'nun devre ağı üç tip joker karakter uygular.
Hepsi (Everything) jokeri

Hepsi jokeri, karar kombinatörleri ile kullanılır. Tam davranışı, giriş mi yoksa çıkış olarak mı kullanıldığına bağlıdır:
Giriş: Eğer tüm giriş sinyalleri koşulu sağlıyorsa veya hiç giriş sinyali yoksa doğru (true) döner; aksi takdirde yanlış (false) döner.
Çıkış: Sıfır olmayan tüm giriş sinyallerini döndürür.
Giriş olarak kullanıldığında, hepsi jokeri mantıksal VE (AND) veya bir evrensel niceleyici olarak düşünülebilir. Çıkış olarak kullanıldığında ise giriş sinyallerinin bir 'yankısı' veya 'dökümü' gibi davranır.
Not: Giriş bir her biri (each) jokeri olmadığı sürece çıkış olarak kullanılabilir.
Herhangi biri (Anything) jokeri

Herhangi biri jokeri de karar kombinatörleri ile kullanılır.
En az bir giriş sinyali verildiğinde, herhangi bir giriş sinyali koşulu geçerse doğru sonucunu verir. Hiçbir sinyal koşulu geçmezse veya hiç giriş sinyali yoksa yanlış sonucunu verir. Bu davranışıyla herhangi biri jokeri, mantıksal VEYA (OR) veya bir varlıksal niceleyici olarak düşünülebilir.
Bir karar kombinatörünün hem girişinde hem de çıkışında kullanıldığında, herhangi biri eşleşen sinyallerden birini döndürecektir.
Her biri (Each) jokeri

Her biri jokeri hem karar kombinatörleri hem de arithmetic combinatorlar (aritmetik kombinatörler) ile kullanılır ve önceki ikisine göre benzersiz bir şekilde davranır. Genel olarak konuşursak, her sinyal üzerinde ayrı ayrı bir kombinatör işlemi gerçekleştirir; işlem, nasıl kullanıldığına ve hangi kombinatör tipinde kullanıldığına bağlıdır. Giriş olarak kullanılabilir ve sadece giriş olarak da kullanıldığında çıkış olarak kullanılabilir.
Bir karar kombinatöründe, giriş olarak kullanıldığında her biri jokeri, her bir giriş sinyalini kombinatör koşuluyla ayrı ayrı karşılaştırır ve koşulu geçen her bir sinyali döndürür. Çıkış olarak nasıl döndürüleceği, aynı zamanda çıkış olarak seçilip seçilmediğine bağlıdır:
Yalnızca Giriş: Koşulu geçen her bir giriş sinyalini toplar ve çıkış ayarlarına bağlı olarak ya geçen sinyallerin sayısını ya da değerlerinin toplamını istenen çıkış sinyali olarak döndürür.
Giriş ve Çıkış: Koşulu geçen her bir sinyali, çıkış ayarlarına bağlı olan değerleriyle birlikte döndürür.
Bir aritmetik kombinatörde, belirlenen aritmetik işlem her bir giriş sinyaline ayrı ayrı uygulanır:
Yalnızca Giriş: Giriş sinyalleri üzerindeki her işlemin sonucu toplanır ve istenen çıkış sinyali olarak döndürür.
Giriş ve Çıkış: Her bir giriş sinyali, üzerine belirtilen işlem uygulanmış olarak döndürülür.
Bu nedenle Her biri jokeri diğer iki jokere göre çok daha karmaşıktır, ancak bu karmaşıklığı karşılığında büyük bir güç sunar.
== Giriş yalıtıcı ve kapı (gate) == (Giriş: Her biri + 0, Çıkış: Her biri) olarak ayarlanan bir aritmetik kombinatör, kablo renklerini değiştirmek ve mantığın geriye doğru giriş ağını beslemesini önlemek için bir yalıtıcı (insulator) olarak kullanılabilir.
(Çıkış: Hepsi, Giriş->Çıkış) olarak ayarlanan bir karar kombinatörü de mantık koşulu doğru olduğu sürece bir yalıtıcı işlevi görecektir. Bu, girişleri yalnızca istendiğinde geçiren bir "kapı" (gate) görevi görebilir. Bu yöntem, uzak tren istasyonlarının sandık içeriklerini sırayla sorgulamak için kullanılabilir.
== Kur/Sıfırla (Set/Reset) mandal anahtarı == Bir şeyin belirli bir miktarda tetiklenmesini (SET), ancak bu miktar başka bir değere (RESET değeri) ulaşana kadar AÇIK kalmasını istiyorsanız; bir karar kombinatörü ve bir aritmetik kombinatöre ihtiyacınız olacaktır.
İlk karar kombinatörünü istenen "set" koşuluna ayarlayın ve 1 çıktısı verecek şekilde yapılandırın. Ardından çıkışı bir aritmetik kombinatörün girişine bağlayın. Bunu, set ve reset değerleri arasındaki fark olan "sapma" (bias) değeriyle çarpacak şekilde yapılandırın ve aritmetik çıkışını karar kombinatörünün girişine bağlayın. Aritmetik çıkış kanalı, karar kombinatörünün giriş kanalıyla aynı olmalıdır. Set koşuluna ulaşıldığında, karar kombinatörü '1' çıktısı verecek ve aritmetik kombinatörün sapması uygulanacaktır. Bu, değer reset noktasının altına düşene kadar çıkışı "doğru" (true) olarak tutacaktır.
Bu özel örnekte, pompa hafif yağ 20000'e ulaştığında çalışır ve 5000'e ulaştığında durur:
== Temel bellek == Bir karar kombinatörü, bir sayaç veya daha ileri mantıklar için değerleri saklamak amacıyla kullanılabilir. Karar kombinatörü şu şekilde yapılandırılır:
Giriş ve çıkış aynı ağa bağlıdır (genellikle birbirine),
Koşul, pozitif değerler için "sinyal > 0" veya hem pozitif hem negatifler için "≠ 0" olarak ayarlanır,
Çıkış, belirli bir giriş sinyalinin "giriş sayısı" (input count) veya
olarak ayarlanır. Ağdaki tüm girişler sıfır olduğu sürece, daha önce ayarlanan değeri koruyacaktır.
== Temel saatler (Clocks) == Saatler, bir kombinatörün çıkışının kendi girişine bağlanmasıyla oluşturulur, böylece her döngü kendi sayısını ilerletir.
Tek bir karar kombinatörü ile kendi kendini sıfırlayan bir saat oluşturulabilir. Çıkışı girişe bağlayın ve belirli bir sayıdan "küçüktür (<)" koşuluyla (Giriş → Çıkış) yapılandırın. Girişe bir sabit kombinatör bağlandığında, sayıya ulaşana kadar her döngüde sabit kombinatörün değeri kadar sayacaktır. Sayıya ulaşıldığında kombinatör çıkışını temizleyecek ve saat sıfırlanacaktır.