Richtiger Umgang mit Signal/Switch unterscheidung

This commit is contained in:
Nero 2023-07-23 10:51:11 +00:00
parent 53d6aea5ad
commit 4a28547d80

19
On.lua
View File

@ -80,10 +80,9 @@ function MultiOn(Liste, Funktion)
if Stellungen[i] ~= nil then if Stellungen[i] ~= nil then
Parameter[i]=Stellungen[i] Parameter[i]=Stellungen[i]
-- Wenn es den nicht gibt, nochmal EEP abfragen -- Wenn es den nicht gibt, nochmal EEP abfragen
elseif Types[i] == "Signal" then else
Parameter[i]=EEPGetSignal(Liste[i]) local ID=Liste[i]
elseif Types[i] == "Switch" then Parameter[i]=_G["EEPGet"..Types[ID]](ID)
Parameter[i]=EEPGetSwitch(Liste[i])
end end
end end
-- Wir haben die Parameter zusammen, damit rufen wir jetzt die Funktion auf -- Wir haben die Parameter zusammen, damit rufen wir jetzt die Funktion auf
@ -93,24 +92,34 @@ function MultiOn(Liste, Funktion)
end) end)
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) function MultiSchalten(Wenn, Dann)
assert(#Wenn%2==0) assert(#Wenn%2==0)
assert(type(Dann)=="function" or #Dann%2==0) assert(type(Dann)=="function" or #Dann%2==0)
local IDs = {} local IDs = {}
local Soll = {} local Soll = {}
-- Aufsplitten in eine Liste von IDs und eine Liste von Stellungen
for i=1,#Wenn,2 do for i=1,#Wenn,2 do
table.insert(IDs, Wenn[i]) table.insert(IDs, Wenn[i])
table.insert(Soll, Wenn[i+1]) table.insert(Soll, Wenn[i+1])
end end
-- Die Liste mit IDs geht an MultiOn
MultiOn(IDs, function(...) MultiOn(IDs, function(...)
-- Wenn wir aufgerufen werden, die Stellung vom Callback mit den Soll-Werten abgleichen
local Ist = {...} local Ist = {...}
for i=1,#Soll do for i=1,#Soll do
if Ist[i] ~= Soll[i] then return end if Ist[i] ~= Soll[i] then return end
end end
-- Wenn alles passt, dann 'Dann' ausführen
-- Wenn es eine Tabelle ist, dann via SetSignal/SetSwitch schalten
if type(Dann)=="table" then if type(Dann)=="table" then
for i=1,#Dann,2 do 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 end
-- Es darf aber auch eine Funktion sein, die dann einfach aufgerufen wird
elseif type(Dann)=="function" then elseif type(Dann)=="function" then
Dann() Dann()
end end