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şturur
  • t:start() — Zamanlayıcıyı başlatır
  • t:stop() — Zamanlayıcıyı durdurur ve kaynakları serbest bırakır
  • aralik — 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

  1. Plugin çalışırken konsol kilitlenmemesi için uzun döngülerde mutlaka gma.sleep() kullanın
  2. Timer nesnelerini plugin sonlanmadan önce her zaman durdurun; aksi halde bellek sızıntısı oluşabilir
  3. gma.cmd() ile executor çağırırken executor numarasının doğruluğunu show dosyanıza göre kontrol edin
  4. 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.