GrandMA3 Plugin ile Dinamik Sequence Yönetimi

GrandMA3 plugin sistemiyle sequence'larınızı Lua betikleriyle dinamik olarak nasıl yöneteceğinizi öğrenin.

GrandMA3 Plugin ile Dinamik Sequence Yönetimi

GrandMA3'ün güçlü plugin altyapısı, Lua programlama dili aracılığıyla konsolun neredeyse tüm fonksiyonlarına erişim sağlar. Bu yapı sayesinde sequence'larınızı manuel müdahale gerektirmeden, koşullara göre otomatik olarak yönetebilirsiniz.

Plugin Ortamını Hazırlamak

Başlamadan önce GrandMA3 üzerinde bir plugin nesnesi oluşturmanız gerekir. Menu > Plugins yolunu izleyerek Plugin Pool'a gidin ve yeni bir plugin ekleyin. Plugin düzenleyicisi açıldığında Lua kodunuzu buraya yazacaksınız.

Her plugin iki temel fonksiyon içerebilir:

  • Main() — Plugin çalıştırıldığında bir kez tetiklenir
  • Loop() — Belirli aralıklarla tekrar eden işlemler için kullanılır

Sequence Bilgilerine Erişmek

GrandMA3 plugin API'si, DataPool üzerinden sequence nesnelerine ulaşmanızı sağlar. Aşağıdaki örnek, belirli bir sequence'ın mevcut cue numarasını okur:

local seq = DataPool().Sequences[1] local currentCue = seq.CueIndex Echo("Aktif Cue: " .. tostring(currentCue))

Burada Sequences[1] ifadesi, sequence pool'undaki ilk sequence'ı referans alır. Index numarasını ihtiyacınıza göre değiştirebilirsiniz.

Dinamik Cue Atlama ve Tetikleme

Sahne koşullarına göre otomatik cue geçişleri yapabilmek, dinamik sequence yönetiminin temelidir. Bunun için Go() ve Jump() komutlarını Lua üzerinden çağırabilirsiniz:

local seq = DataPool().Sequences[1] seq:Go() -- Sıradaki cue'ya geçer

Belirli bir cue'ya atlamak için ise:

Cmd("Go Sequence 1 Cue 5")
İpucu: Cmd() fonksiyonu, GrandMA3 komut satırına doğrudan string gönderir. Konsolun desteklediği tüm komutları bu yöntemle plugin içinden çalıştırabilirsiniz.

Koşullu Sequence Mantığı Oluşturmak

Gerçek dinamizm, koşullu ifadelerle başlar. Örneğin aktif cue numarasına göre farklı sequence'ları tetiklemek istiyorsanız:

local seq = DataPool().Sequences[1] local cue = seq.CueIndex if cue == 3 then Cmd("Go Sequence 2") elseif cue == 7 then Cmd("Go Sequence 3") end

Bu yaklaşım özellikle multi-part showların yönetiminde, bölümler arası otomatik geçişlerde büyük kolaylık sağlar.

Loop Kullanarak Sürekli İzleme

Sequence durumunu sürekli takip etmek istiyorsanız plugin'in Loop() fonksiyonunu kullanabilirsiniz:

  1. Plugin düzenleyicisinde Loop interval değerini ayarlayın (ms cinsinden)
  2. Loop fonksiyonu içine izleme mantığınızı yazın
  3. Gereksiz işlem yükünden kaçınmak için kontrolleri minimumda tutun
function Loop() local seq = DataPool().Sequences[1] if seq.IsRunning == false then Cmd("Go Sequence 1 Cue 1") end end
Önemli Not: Loop interval değerini çok düşük ayarlamak (10ms altı) konsolun genel performansını olumsuz etkileyebilir. 100–500ms aralığı çoğu senaryo için yeterlidir.

Hata Yönetimi ve Güvenli Kodlama

Plugin'ler canlı performans sırasında çalışacağı için hata toleransı kritik önem taşır. Lua'nın pcall() fonksiyonu ile kodunuzu güvenli bir blok içine alabilirsiniz:

local ok, err = pcall(function() local seq = DataPool().Sequences[1] seq:Go() end) if not ok then Echo("Hata: " .. tostring(err)) end

Bu yapı sayesinde beklenmedik bir hata oluştuğunda plugin çökmez; hata mesajı konsolun Echo penceresine iletilir ve show kesintisiz devam eder.