192 lines
4.7 KiB
Lua
192 lines
4.7 KiB
Lua
-- Versionsnummer. Diese dient vor allem zu Diagnosezwecken.
|
|
-- Ich weiss jetzt noch nicht, wie viele verschiedene Versionen von dem Script spaeter herumfliegen werden.
|
|
KsKitVer=0
|
|
|
|
Kennzahl=34
|
|
|
|
local Callbacks = {}
|
|
|
|
function On(Name, Funktion)
|
|
-- Erlaube es, Signal und Weichen via Nummer zu referenzieren
|
|
if type(Name) == "number" then
|
|
if EEPGetSwitch(Name) > 0 then
|
|
Name = "EEPOnSwitch_"..tostring(Name)
|
|
elseif EEPGetSignal(Name) > 0 then
|
|
Name = "EEPOnSignal_"..tostring(Name)
|
|
end
|
|
end
|
|
if type(Name) == "table" then
|
|
for _, Newname in pairs(Name) do
|
|
On(Newname, Funktion)
|
|
end
|
|
return
|
|
end
|
|
if type(Name) ~= "string" or string.match(Name, "EEP.+") == nil then
|
|
print("Verweigere Callback von "..type(Name).." "..tostring(Name))
|
|
return
|
|
end
|
|
if not Callbacks[Name] then
|
|
Callbacks[Name] = {}
|
|
if _G[Name] ~= nil then
|
|
print("Warnung: "..Name.."() von KsKit adoptiert")
|
|
table.insert(Callbacks[Name], _G[Name])
|
|
end
|
|
_G[Name] = function(...)
|
|
for cnt = 1, #Callbacks[Name] do
|
|
Callbacks[Name][cnt](...)
|
|
end
|
|
-- Nur EEPMain braucht dies, aber dringends
|
|
return 1
|
|
end
|
|
-- Bei Weichen und Signalen muss EEP vorher informiert werden
|
|
-- Item ist normal "Switch" oder "Signal"
|
|
local Item, Number = string.match(Name, 'EEPOn(.+)_(%d+)')
|
|
if Number ~= nil then
|
|
_G["EEPRegister"..Item](Number)
|
|
end
|
|
end
|
|
table.insert(Callbacks[Name], Funktion)
|
|
end
|
|
|
|
-- EEPMain-Callback registrieren
|
|
function Main(Funktion)
|
|
On("EEPMain", Funktion)
|
|
end
|
|
|
|
-- Signal-Callback registrieren
|
|
function OnSignal(Signal, Funktion)
|
|
On("EEPOnSignal_"..tostring(Signal), Funktion)
|
|
end
|
|
|
|
-- Weichen-Callbacks registrieren
|
|
function OnSwitch(Switch, Funktion)
|
|
On("EEPOnSwitch_"..tostring(Switch), Funktion)
|
|
end
|
|
|
|
-- Datenbank fuer Tabelle
|
|
KsFahrstrassen = {}
|
|
|
|
-- Fahrstrasse in Datenbank aufnehmen
|
|
function FS(Tabelle)
|
|
KsFahrstrassen[Tabelle[1]] = Tabelle
|
|
end
|
|
|
|
-- Datenbank fuer Signale
|
|
KsSignale = {}
|
|
|
|
-- KsSignale von GK3 sind sehr systematisch benannt, die moeglichen Stellungen lassen sich aus dem Namen herleiten
|
|
function GK3KsBegriffe(Modell)
|
|
local Teile = {}
|
|
for str in string.gmatch(Modell, "([^_ ]+)") do
|
|
Teile[str]=true
|
|
end
|
|
local Stellungen = {}
|
|
|
|
-- Halt am Hauptsignal
|
|
if Teile["A"] or Teile["B"] then
|
|
table.insert(Stellungen, {"Hp0"})
|
|
end
|
|
|
|
-- Halt erwarten
|
|
-- ... am Wiederholer
|
|
if Teile["VSigWdh"] then
|
|
table.insert(Stellungen, {"Ks2","Kl"})
|
|
end
|
|
-- ... An MAS oder Vorsignalen
|
|
if Teile["MAS"] or Teile["VSig"] then
|
|
if Teile["verkuerzt"] then
|
|
table.insert(Stellungen, {"Ks2","Kl"})
|
|
end
|
|
table.insert(Stellungen, {"Ks2"})
|
|
if Teile["Kl"] then
|
|
table.insert(Stellungen, {"Ks2","Kl"})
|
|
end
|
|
end
|
|
|
|
-- Fahrt/Fahrt erwarten
|
|
table.insert(Stellungen, {"Ks1"})
|
|
|
|
-- Langsamfahrt erwarten
|
|
-- ... am Wiederholer
|
|
if Teile["VSigWdh"] then
|
|
table.insert(Stellungen, {"Ks1bl","Kl"})
|
|
end
|
|
-- ... am MAS oder Vorsignalen
|
|
if Teile["MAS"] or Teile["VSig"] or Teile["VSigWdh"] then
|
|
if Teile["verkuerzt"] then
|
|
table.insert(Stellungen, {"Ks1bl","Kl"})
|
|
end
|
|
table.insert(Stellungen, {"Ks1bl"})
|
|
if Teile["Kl"] then
|
|
table.insert(Stellungen, {"Ks1bl","Kl"})
|
|
end
|
|
end
|
|
|
|
-- Rangierfahrt an Ausfahrsignalen
|
|
if Teile["A"] then
|
|
table.insert(Stellungen, {"Sh1"})
|
|
end
|
|
|
|
-- Ersatzsignal an Ausfahrsignalen und Blocksignalen ohne Vorsichtssignal
|
|
if Teile["A"] or (Teile["B"] and not Teile["V"]) then
|
|
table.insert(Stellungen, {"Zs1"})
|
|
end
|
|
|
|
-- Vorsichtssignal an Hauptsignalen
|
|
if Teile["V"] then
|
|
table.insert(Stellungen, {"Zs7"})
|
|
end
|
|
|
|
-- Kennlicht
|
|
if Teile["Kl"] or Teile["VSigWdh"] or Teile["verkuerzt"] then
|
|
table.insert(Stellungen, {"Kl"})
|
|
end
|
|
|
|
-- Dunkel geschaltet
|
|
table.insert(Stellungen, {})
|
|
return Stellungen
|
|
end
|
|
|
|
local GK3KsBauarten={
|
|
"Ks_Sig_A",
|
|
"Ks_Sig_A_MAS",
|
|
"Ks_Sig_A_MAS_Kl",
|
|
"Ks_Sig_A_V",
|
|
"Ks_Sig_A_V_MAS",
|
|
"Ks_Sig_A_V_MAS_Kl",
|
|
"Ks_Sig_B",
|
|
"Ks_Sig_B_MAS",
|
|
"Ks_Sig_B_V",
|
|
"Ks_Sig_B_V_MAS",
|
|
"Ks_Sig_B_V_MAS_Kl",
|
|
"Ks_Sig_VSig",
|
|
"Ks_Sig_VSigWdh",
|
|
"Ks_Sig_VSig_verkuerzt"
|
|
}
|
|
|
|
for cnt=1, #GK3KsBauarten do
|
|
_G[GK3KsBauarten[cnt]]=function(Meta)
|
|
Signal=Meta[1]
|
|
Meta[1] = nil
|
|
-- Falls kein name gegeben, einen generieren
|
|
if Meta.Name == nil then
|
|
Meta.Name = string.format("%d", Signal)
|
|
end
|
|
if type(Meta.Schild) == "number" then
|
|
Meta.Schild="#"..tostring(Meta.Schild)
|
|
end
|
|
Meta.Kennzahl = Kennzahl
|
|
Meta.Begriffe = GK3KsBegriffe(GK3KsBauarten[cnt])
|
|
KsSignale[Signal] = Meta
|
|
end
|
|
end
|
|
|
|
function KsKitInit()
|
|
for Signal, Meta in pairs(KsSignale) do
|
|
if Meta.Schild ~= nil then
|
|
EEPStructureSetTextureText(Meta.Schild, 1, Meta.Kennzahl)
|
|
EEPStructureSetTextureText(Meta.Schild, 2, Meta.Name)
|
|
end
|
|
end
|
|
end
|