diff --git a/On.lua b/On.lua index 9bd4efb..3d9e39d 100644 --- a/On.lua +++ b/On.lua @@ -80,10 +80,9 @@ function MultiOn(Liste, Funktion) if Stellungen[i] ~= nil then Parameter[i]=Stellungen[i] -- Wenn es den nicht gibt, nochmal EEP abfragen - elseif Types[i] == "Signal" then - Parameter[i]=EEPGetSignal(Liste[i]) - elseif Types[i] == "Switch" then - Parameter[i]=EEPGetSwitch(Liste[i]) + else + local ID=Liste[i] + Parameter[i]=_G["EEPGet"..Types[ID]](ID) end end -- Wir haben die Parameter zusammen, damit rufen wir jetzt die Funktion auf @@ -93,24 +92,34 @@ function MultiOn(Liste, Funktion) end) end +-- Wie MultiOn, nur mit Erfordernis einer bestimmten Stellung +-- 'Wenn' und 'Dann' bestehen aus abwechselnd einer ID und der Stellung function MultiSchalten(Wenn, Dann) assert(#Wenn%2==0) assert(type(Dann)=="function" or #Dann%2==0) local IDs = {} local Soll = {} + -- Aufsplitten in eine Liste von IDs und eine Liste von Stellungen for i=1,#Wenn,2 do table.insert(IDs, Wenn[i]) table.insert(Soll, Wenn[i+1]) end + -- Die Liste mit IDs geht an MultiOn MultiOn(IDs, function(...) + -- Wenn wir aufgerufen werden, die Stellung vom Callback mit den Soll-Werten abgleichen local Ist = {...} for i=1,#Soll do if Ist[i] ~= Soll[i] then return end end + -- Wenn alles passt, dann 'Dann' ausführen + -- Wenn es eine Tabelle ist, dann via SetSignal/SetSwitch schalten if type(Dann)=="table" then for i=1,#Dann,2 do - EEPSetSignal(Dann[i], Dann[i+1], 1) + local ID=Dann[i] + local Stellung=Dann[i+1] + _G["EEPSet"..Types[ID]](ID, Stellung, 1) end + -- Es darf aber auch eine Funktion sein, die dann einfach aufgerufen wird elseif type(Dann)=="function" then Dann() end