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
|
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
|
||||||
|
Loading…
Reference in New Issue
Block a user