Richtiger Umgang mit Signal/Switch unterscheidung
This commit is contained in:
parent
53d6aea5ad
commit
4a28547d80
19
On.lua
19
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
|
||||
|
Loading…
Reference in New Issue
Block a user