GrandMA2'de Zamanlayıcı Plugin Yazımı
GrandMA2 konsolunda Lua diliyle zamanlayıcı (timer) plugin geliştirmeyi adım adım öğrenin; temel fonksiyonlar ve pratik örneklerle.
GrandMA2'de Zamanlayıcı Plugin Yazımı
GrandMA2, sahne aydınlatmasında tekrarlayan görevleri otomatikleştirmek için güçlü bir Lua tabanlı plugin sistemi sunar. Zamanlayıcı (timer) pluginleri; belirli aralıklarla efekt tetikleme, devre sayma, otomatik sahne geçişleri gibi işlemler için idealdir.
Temel Kavramlar
GrandMA2 plugin sistemi, konsolun kendi Lua yorumlayıcısı üzerinde çalışır. Zamanlayıcı oluştururken iki temel yaklaşım kullanılır:
- os.clock() — CPU süresini ölçer, kısa aralıklar için uygundur
- os.time() — Unix zaman damgası döndürür, saniye bazlı sayımlar için kullanılır
- gma.timer — Konsolun yerleşik zamanlayıcı API'si, en stabil seçenektir
Basit Bir Geri Sayım Plugini
Aşağıdaki örnek, belirli bir süre dolduğunda bir executor'ı tetikleyen temel bir zamanlayıcı pluginidir:
local function Main(display_handle, action)
local sure = 10
local baslangic = os.time()
while true do
local gecen = os.time() - baslangic
local kalan = sure - gecen
if kalan <= 0 then
gma.cmd("Go+ Executor 201")
break
end
gma.echo("Kalan süre: " .. kalan .. " sn")
gma.sleep(1.0)
end
end
return Main
İpucu: gma.sleep() fonksiyonu saniye cinsinden değer alır. 0.5 yazarsanız 500 milisaniye bekler. Çok kısa değerler (0.01 altı) konsolda performans sorununa yol açabilir.gma.timer API ile Periyodik Tetikleme
GrandMA2'nin yerleşik gma.timer nesnesi, belirli aralıklarla otomatik çalışan fonksiyonlar tanımlamak için daha temiz bir yöntem sunar:
local sayac = 0
local function zamanlayici_callback()
sayac = sayac + 1
gma.echo("Tetikleme: " .. sayac)
if sayac >= 5 then
gma.cmd("Go+ Executor 202")
sayac = 0
end
end
local function Main(display_handle, action)
local t = gma.timer.new(zamanlayici_callback, 2.0)
t:start()
gma.sleep(30.0)
t:stop()
end
return Main
Parametre Açıklamaları
gma.timer.new(callback, aralik)— Yeni bir timer nesnesi oluştururt:start()— Zamanlayıcıyı başlatırt:stop()— Zamanlayıcıyı durdurur ve kaynakları serbest bırakıraralik— Saniye cinsinden tetikleme sıklığı
Kullanıcıdan Süre Alma
Plugini daha esnek hale getirmek için gma.textinput() fonksiyonuyla kullanıcıdan dinamik süre alabilirsiniz:
local function Main(display_handle, action)
local girdi = gma.textinput("Kaç saniye?", "10")
local sure = tonumber(girdi) or 10
gma.echo("Zamanlayıcı başladı: " .. sure .. " sn")
gma.sleep(sure)
gma.cmd("Go+ Executor 203")
end
return Main
Dikkat Edilmesi Gereken Noktalar
- Plugin çalışırken konsol kilitlenmemesi için uzun döngülerde mutlaka
gma.sleep()kullanın - Timer nesnelerini plugin sonlanmadan önce her zaman durdurun; aksi halde bellek sızıntısı oluşabilir
gma.cmd()ile executor çağırırken executor numarasının doğruluğunu show dosyanıza göre kontrol edin- Zamanlayıcı hassasiyeti konsoldan konsolya farklılık gösterebilir; kritik zamanlamalarda sahnede test yapın
Önemli Not: GrandMA2 plugin sistemi tek iş parçacıklı (single-threaded) çalışır. Birden fazla zamanlayıcı aynı anda çalıştırmak yerine tek bir döngüde birden fazla sayacı yönetmek daha güvenlidir.