kskit/On.lua
2023-07-21 22:26:42 +00:00

49 lines
1.7 KiB
Lua

-- Schluessel ist der Callback-Name, Wert ist eine Tabelle mit den Funktionen
local Callbacks = {}
function On(Name, UserFunktion)
-- Das folgende muss nur fuer den ersten Aufruf je Callback gemacht werden
-- Spaetere Aufrufe koennen mit dem exitierenden Eintrag weiterarbeiten
if not Callbacks[Name] then
-- Wenn der User den Callback bereits definiert hat, alles abbrechen
-- Sonst kommt schwer nachzuvollziehende Gruetze raus
assert(_G[Name] == nil, Name.." bereits definiert")
-- Bei Weichen und Signalen muss der Callback registriert werden
-- Item ist entweder "Switch" oder "Signal"
local Item, Number = string.match(Name, 'EEPOn(.+)_(%d+)')
if Number ~= nil then
local RegisterFunc="EEPRegister"..Item
local ok = _G[RegisterFunc](Number)
if (ok==0) then print(RegisterFunc.."("..Number..") fehlgeschlagen") end
end
-- Tabelleneintrag fuer diesen Callback eroeffnen
Callbacks[Name] = {}
-- Hier erstellen wir den echten Callback, welcher dann von EEP aufgerufen wird
-- und der jede in unserer Tabelle eingetragene Funktion aufruft
_G[Name] = function(...)
for _, UserFunktion in pairs(Callbacks[Name]) do
UserFunktion(...)
end
-- Wir sind vielleicht die EEPMain und muessen daher 1 zurueckgeben
return 1
end
end
-- Die uns gegebene Funktion an unseren Tabelleneintrag anhaengen
table.insert(Callbacks[Name], UserFunktion)
end
-- EEPMain-Callback registrieren
function Main(Funktion)
On("EEPMain", Funktion)
end
-- Signal-Callback registrieren
function OnSignal(Signal, Funktion)
On("EEPOnSignal_"..tostring(Signal), Funktion)
end
-- Weichen-Callbacks registrieren
function OnSwitch(Switch, Funktion)
On("EEPOnSwitch_"..tostring(Switch), Funktion)
end