Richtiger Umgang mit Signal/Switch unterscheidung

This commit is contained in:
Nero 2023-07-23 10:51:11 +00:00
parent 53d6aea5ad
commit 4a28547d80
1 changed files with 14 additions and 5 deletions

19
On.lua
View File

@ -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