Implementierung Begriffsselektion
This commit is contained in:
parent
4490e324a1
commit
159c336d5a
@ -1,6 +1,5 @@
|
|||||||
require("Prototype")
|
require("Prototype")
|
||||||
require("On")
|
require("On")
|
||||||
serpent=require("serpent")
|
|
||||||
|
|
||||||
-- Versionsnummer. Diese dient vor allem zu Diagnosezwecken.
|
-- Versionsnummer. Diese dient vor allem zu Diagnosezwecken.
|
||||||
-- Ich weiss jetzt noch nicht, wie viele verschiedene Versionen von dem Script spaeter herumfliegen werden.
|
-- Ich weiss jetzt noch nicht, wie viele verschiedene Versionen von dem Script spaeter herumfliegen werden.
|
||||||
@ -14,7 +13,9 @@ ERSATZFAHRT=4
|
|||||||
AUS=5
|
AUS=5
|
||||||
|
|
||||||
-- Grundsignal, entspricht allen Signalen vor EEP 6 sowie dem Unsichtbaren Signal aus dem Grundbestand
|
-- Grundsignal, entspricht allen Signalen vor EEP 6 sowie dem Unsichtbaren Signal aus dem Grundbestand
|
||||||
Signal=Prototype()
|
Signal=Prototype{}
|
||||||
|
Signal.Begriffe={{FAHRT},{HALT}}
|
||||||
|
Signal.Beschreibung="Signal"
|
||||||
|
|
||||||
function Signal:init(tab)
|
function Signal:init(tab)
|
||||||
for k,v in pairs(tab) do
|
for k,v in pairs(tab) do
|
||||||
@ -29,35 +30,140 @@ end
|
|||||||
|
|
||||||
-- ID to use with EEPGetSignal/EEPSetSignal
|
-- ID to use with EEPGetSignal/EEPSetSignal
|
||||||
function Signal:set_ID(id)
|
function Signal:set_ID(id)
|
||||||
if type(id) ~= "number" then error("Signal ID must be a number") end
|
if type(Signale) ~= "table" then Signale={} end
|
||||||
|
if Signale[id]~=nil then error("Signal ID "..id.." bereits verwendet") end
|
||||||
|
if type(id) ~= "number" then error("Signal ID muss eine Zahl sein") end
|
||||||
self.ID = id
|
self.ID = id
|
||||||
|
Signale[id]=self
|
||||||
end
|
end
|
||||||
Signal.set_1=Signal.set_ID
|
Signal.set_1=Signal.set_ID
|
||||||
|
|
||||||
-- Anfahrtsgeschwindigkeit ans Haltzeigende Signal
|
-- Anfahrtsgeschwindigkeit ans Haltzeigende Signal
|
||||||
function Signal:set_V_halt(v)
|
function Signal:set_V_halt(v)
|
||||||
if type(v) ~= "number" then error("V_halt must be number") end
|
if type(v) ~= "number" then error("V_halt muss eine Geschwindigkeit sein") end
|
||||||
self.V_halt = v
|
self.V_halt = v
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Unsichtbares Signal: Zugbeeinflussung
|
-- Unsichtbares Signal: Zum Schalten via GBS
|
||||||
|
-- ggf. auch vor dem Signal zum Ersatz der Haltefunktion
|
||||||
|
function Signal:set_S(S)
|
||||||
|
self.S = S
|
||||||
|
OnSignal(S, function()
|
||||||
|
self:Update()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Unsichtbares Signal: Zugbeeinflussung, hinter dem Signal
|
||||||
function Signal:set_V_regler(id)
|
function Signal:set_V_regler(id)
|
||||||
self.V_regler=id
|
self.V_regler=id
|
||||||
end
|
end
|
||||||
|
|
||||||
function Signal:set_Begriffe(Begriffe)
|
function Signal:set_Begriffe(Begriffe)
|
||||||
self.RFSS=false -- Rangierfahrstrassenstart
|
|
||||||
self.RFSZ=false -- Rangierfahrstrassenziel
|
|
||||||
self.ZFSS=false -- Zugfahrstrassenstart
|
|
||||||
self.ZFSZ=false -- Zugfahrstrassenziel
|
|
||||||
for i=1,#Begriffe do
|
|
||||||
if Begriffe[i][1]==RANGIERFAHRT then self.RFSS=true end
|
|
||||||
if Begriffe[i][1]==HALT then self.RFSZ=true; self.ZFSZ=true end
|
|
||||||
if Begriffe[i][1]==FAHRT then self.ZFSS=true end
|
|
||||||
end
|
|
||||||
self.Begriffe=Begriffe
|
self.Begriffe=Begriffe
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Signal:set_Wege(Wege)
|
||||||
|
if type(Fahrwege)~="table" then Fahrwege={} end
|
||||||
|
self.Wege=Wege
|
||||||
|
-- Eigenen Callback an alle potentiellen Wegelemente koppeln
|
||||||
|
local updateFunk = function()
|
||||||
|
self:Update()
|
||||||
|
end
|
||||||
|
for i=1,#Wege do
|
||||||
|
OnSignal(Wege[i][1], updateFunk)
|
||||||
|
if Wege[i].turns then
|
||||||
|
for j=1,#Wege[i].turns,2 do
|
||||||
|
OnSwitch(Wege[i].turns[j], updateFunk)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Stellung als struct
|
||||||
|
function Signal:Zeige(Stellung)
|
||||||
|
local order={}
|
||||||
|
for i=1,#self.Begriffe do
|
||||||
|
table.insert(order, i)
|
||||||
|
end
|
||||||
|
table.sort(order, function(a,b)
|
||||||
|
local StlgA = self.Begriffe[a]
|
||||||
|
local StlgB = self.Begriffe[b]
|
||||||
|
local props={1,"V_max","H_erwarten","V_erwarten"}
|
||||||
|
for i=1,#props do
|
||||||
|
-- Folgendes Muster: Wenn Stellung A und B sich in einem Merkmal unterscheiden
|
||||||
|
-- UND Stellung A in diesem Merkmal mit der Zielstellung uebereinstimmt,
|
||||||
|
-- DANN ist Stellung A besset geeignet, sonst nicht
|
||||||
|
if StlgA[props[i]] ~= StlgB[props[i]] then
|
||||||
|
if StlgA[props[i]] == Stellung[props[i]] then return true end
|
||||||
|
if StlgB[props[i]] == Stellung[props[i]] then return false end
|
||||||
|
-- Muster: Geschwindigkeitsmerkmal ist vorhanden und kleiner als Ziel, aber der Vergleichsbegriff:
|
||||||
|
-- - zeigt das Merkmal gar nicht
|
||||||
|
-- - zeigt eine hohere Geschwindigkeit als gewollt
|
||||||
|
-- - zeigt eine noch kleinere Geschwindigkeit
|
||||||
|
-- Dann ist der Vergleichsbegriff schlechter geeignet
|
||||||
|
if i == 2 or i == 4 then
|
||||||
|
if StlgA[props[i]] and Stellung[props[i]] and StlgA[props[i]] < Stellung[props[i]] then
|
||||||
|
if StlgB[props[i]] == nil then return true end
|
||||||
|
if StlgB[props[i]] > Stellung[props[i]] then return true end
|
||||||
|
if StlgB[props[i]] < StlgA[props[i]] then return true end
|
||||||
|
end
|
||||||
|
if StlgB[props[i]] and Stellung[props[i]] and StlgB[props[i]] < Stellung[props[i]] then
|
||||||
|
if StlgA[props[i]] == nil then return false end
|
||||||
|
if StlgA[props[i]] > Stellung[props[i]] then return false end
|
||||||
|
if StlgA[props[i]] < StlgB[props[i]] then return false end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end)
|
||||||
|
EEPSetSignal(self.ID, order[1], 1)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Fahrtstellung aktualisieren
|
||||||
|
function Signal:Update()
|
||||||
|
local Fahrt = true
|
||||||
|
if self.S and EEPGetSignal(self.S) == 2 then
|
||||||
|
Fahrt = false
|
||||||
|
end
|
||||||
|
if not Fahrt then
|
||||||
|
if self:Zeige{HALT} then return end
|
||||||
|
self:Zeige{FAHRT, H_erwarten}
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local Stlg = {FAHRT}
|
||||||
|
if self.Wege then
|
||||||
|
for i=1,#self.Wege do
|
||||||
|
local Weg = self.Wege[i]
|
||||||
|
local match = true
|
||||||
|
local V_max = nil
|
||||||
|
if Weg.turns then
|
||||||
|
for j=1,#Weg.turns,2 do
|
||||||
|
if Weg.turns[j+1] > 1 then V_max = 40 end
|
||||||
|
if EEPGetSwitch(Weg.turns[j]) ~= Weg.turns[j+1] then
|
||||||
|
match = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if match then Stlg.V_max = V_max end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if self:Zeige(Stlg) then return end
|
||||||
|
if self:Zeige{ERSATZFAHRT} then return end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Signal:set_Beschreibung(v)
|
||||||
|
self.Beschreibung=v
|
||||||
|
end
|
||||||
|
|
||||||
|
function Signal:TooltipText()
|
||||||
|
r=self.Beschreibung.." "..tonumber(self.ID).."\n"
|
||||||
|
return r
|
||||||
|
end
|
||||||
|
|
||||||
-- Signalbilder OSJD/EZMG/Hl-Signale des Ostblocks
|
-- Signalbilder OSJD/EZMG/Hl-Signale des Ostblocks
|
||||||
-- V_erwarten=60 wird durch V_erwarten=40 signalisiert
|
-- V_erwarten=60 wird durch V_erwarten=40 signalisiert
|
||||||
Hl1={FAHRT}
|
Hl1={FAHRT}
|
||||||
@ -78,20 +184,26 @@ Hl12a={FAHRT, V_max=40, H_erwarten=true}
|
|||||||
Hl12b={FAHRT, V_max=60, H_erwarten=true}
|
Hl12b={FAHRT, V_max=60, H_erwarten=true}
|
||||||
Hl13={HALT}
|
Hl13={HALT}
|
||||||
|
|
||||||
-- Zusatzsignale (DS 301 Namen)
|
-- Zusatzsignale
|
||||||
Zs1={ERSATZFAHRT}
|
Zs1={ERSATZFAHRT}
|
||||||
|
Ra10={HALT, Nur_Rangierfahrten=true} -- Rangierhalttafel
|
||||||
|
Ra11={HALT, Nur_Rangierfahrten=true} -- Wartezeichen
|
||||||
Sh1={RANGIERFAHRT} -- war Ra12 bei DR
|
Sh1={RANGIERFAHRT} -- war Ra12 bei DR
|
||||||
|
|
||||||
|
Rangierhalttafel=Signal{Begriffe={{FAHRT},Ra10},Beschreibung="Rangierhalttafel"}
|
||||||
|
|
||||||
-- V11NHK10024 HL-Signale der DR *V40* - Grundset
|
-- V11NHK10024 HL-Signale der DR *V40* - Grundset
|
||||||
Hl_Signal_Ausfahrt_V40=Signal{Begriffe={Hl13,Hl1,Hl3a,Zs1,Sh1,Hl13}}
|
Hl_Signal_Ausfahrt_V40=Signal{Begriffe={Hl13,Hl1,Hl3a,Zs1,Sh1,Hl13},Beschreibung="Ausfahrsignal"}
|
||||||
Hl_Signal_Ausfahrt_Vmax=Signal{Begriffe={Hl13,Hl1,Zs1,Sh1,Hl13}}
|
Hl_Signal_Ausfahrt_Vmax=Signal{Begriffe={Hl13,Hl1,Zs1,Sh1,Hl13},Beschreibung="Ausfahrsignal"}
|
||||||
Hl_Signal_Block=Signal{Begriffe={Hl13,Hl1,Zs1,Hl13}}
|
Hl_Signal_Block=Signal{Begriffe={Hl13,Hl1,Zs1,Hl13},Beschreibung="Blocksignal"}
|
||||||
Hl_Signal_Einfahrt_V40=Signal{Begriffe={Hl13,Hl1,Hl7,Hl10,Hl3a,Hl9a,Hl12a,Zs1,Hl13}}
|
Hl_Signal_Einfahrt_V40=Signal{Begriffe={Hl13,Hl1,Hl7,Hl10,Hl3a,Hl9a,Hl12a,Zs1,Hl13},Beschreibung="Einfahrsignal"}
|
||||||
Hl_Signal_Selbstblock=Signal{Begriffe={Hl13,Hl1,Hl10,Hl13}}
|
Hl_Signal_Selbstblock=Signal{Begriffe={Hl13,Hl1,Hl10,Hl13},Beschreibung="Blocksignal"}
|
||||||
Hl_Signal_Vorsignal_V40=Signal{Begriffe={Hl10,Hl7,Hl1}}
|
Hl_Signal_Vorsignal_V40=Signal{Begriffe={Hl10,Hl7,Hl1},Beschreibung="Vorsignal"}
|
||||||
Hl_Signal_Vorsignalwiederholer_V40=Signal{Begriffe={Hl10,Hl7,Hl1}}
|
Hl_Signal_Vorsignalwiederholer_V40=Signal{Begriffe={Hl10,Hl7,Hl1},Beschreibung="Vorsignalwdh"}
|
||||||
|
|
||||||
-- V11NHK10025 HL-Signale der DR *V60* - Erweiterungsset
|
-- V11NHK10025 HL-Signale der DR *V60* - Erweiterungsset
|
||||||
Hl_Signal_Ausfahrt_V60=Signal{Begriffe={Hl13,Hl1,Hl3b,Hl3a,Zs1,Sh1,Hl13}}
|
Hl_Signal_Ausfahrt_V60=Signal{Begriffe={Hl13,Hl1,Hl3b,Hl3a,Zs1,Sh1,Hl13}}
|
||||||
Hl_Signal_Einfahrt_V60=Signal{Begriffe={Hl13,Hl1,Hl4,Hl7,Hl10,Hl3b,Hl6b,Hl9b,Hl12b,Hl3a,Hl6a,Hl9a,Hl12a,Zs1,Hl13}}
|
Hl_Signal_Einfahrt_V60=Signal{Begriffe={Hl13,Hl1,Hl4,Hl7,Hl10,Hl3b,Hl6b,Hl9b,Hl12b,Hl3a,Hl6a,Hl9a,Hl12a,Zs1,Hl13}}
|
||||||
Hl_Signal_Vorsignalwiederholer_V60=Signal{Begriffe={Hl10,Hl7,Hl1}}
|
Hl_Signal_Vorsignalwiederholer_V60=Signal{Begriffe={Hl10,Hl7,Hl1}}
|
||||||
|
|
||||||
|
Hl_Zwerg_Rangiersignal=Signal{Begriffe={Ra11,Sh1},Beschreibung="Rangierhaltsignal"}
|
||||||
|
Loading…
Reference in New Issue
Block a user