Steuercode umordnen, Umsetzen-Usecase durcharbeiten
This commit is contained in:
parent
1d8ea19775
commit
345bc8951f
@ -93,7 +93,7 @@ function AnimiereFahrzeugStromabnehmer(Fahrzeug, Richtung)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Richtung: -1, 0 oder 1
|
-- Richtung: -1, 0 oder 1
|
||||||
function AnimiereZugStromabnehmer(Zug, Richtung)
|
function setzeStromabnehmer(Zug, Richtung)
|
||||||
local AnzahlFahrzeuge = EEPGetRollingstockItemsCount(Zug)
|
local AnzahlFahrzeuge = EEPGetRollingstockItemsCount(Zug)
|
||||||
local Startwert = 1
|
local Startwert = 1
|
||||||
local Endwert = AnzahlFahrzeuge
|
local Endwert = AnzahlFahrzeuge
|
||||||
@ -141,24 +141,109 @@ function KsKitInit()
|
|||||||
table.insert(GefundeneSignale, Signal)
|
table.insert(GefundeneSignale, Signal)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
for i=1,#GefundeneSignale do
|
local function KsKitZugSteuern(Zugname, Aktion)
|
||||||
local Signal = GefundeneSignale[i]
|
-- Wartezeit abarbeiten
|
||||||
local FSignal = Signal + 1000
|
-- Wie ist .D zu interpretieren?
|
||||||
EEPRegisterSignal(Signal)
|
-- nil -> kein Timer laufend
|
||||||
_G["EEPOnSignal_"..tostring(Signal)]=function(Stellung)
|
-- 0 -> Timer abgelaufen
|
||||||
SignalChanged[Signal]=true
|
-- >0 -> Timer laeuft noch
|
||||||
|
if Aktion.D and Aktion.D > 0 then
|
||||||
|
Aktion.D = Aktion.D - 1
|
||||||
|
return
|
||||||
end
|
end
|
||||||
EEPRegisterSignal(FSignal)
|
|
||||||
_G["EEPOnSignal_"..tostring(FSignal)]=function(FStellung)
|
local ok, V_ist = EEPGetTrainSpeed(Zugname)
|
||||||
SignalChanged[FSignal]=true
|
|
||||||
if FStellung > 1 then
|
-- Wenn wir stehen, merken wir uns unsere Ankunftszeit
|
||||||
print("Fahrstrasse ",string.format("%04d-%02d", FSignal, FStellung-1)," geschalten")
|
if V_ist == 0 and Aktion.A == nil then
|
||||||
|
-- 2 Sekunden Wartezeit bevor Ankunft registriert wird
|
||||||
|
if Aktion.D == nil then
|
||||||
|
Aktion.D = 10
|
||||||
|
return
|
||||||
|
end
|
||||||
|
-- Timer erfuellt, Ankunft registrieren
|
||||||
|
Aktion.D = nil
|
||||||
|
Aktion.A = EEPTime
|
||||||
|
-- Falls wir eine Abfahrtsgeschwindigkeit haben
|
||||||
|
if Aktion.V then
|
||||||
|
-- ... von Signalbeeinflussing trennen
|
||||||
|
EEPSetTrainSpeed(Zugname, 0)
|
||||||
|
-- Falls wir einen Fahrrichtungswechsel planen
|
||||||
|
-- fahren wir jetzt die Stromabnehmer herunter
|
||||||
|
if Aktion.R then
|
||||||
|
if _G["setzeStromabnehmer"] then
|
||||||
|
setzeStromabnehmer(Zugname, 0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Ankunftszeit loeschen falls wir schon wieder beschleunigen
|
||||||
|
if V_ist ~=0 and Aktion.A then
|
||||||
|
Aktion.A = nil
|
||||||
|
Aktion.S = nil
|
||||||
|
Aktion.R = nil
|
||||||
|
Aktion.V = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Wartezeit in Delay-Aktion uebertragen
|
||||||
|
if Aktion.W and Aktion.A then
|
||||||
|
if Aktion.D == nil then
|
||||||
|
Aktion.D = 5 * Aktion.W
|
||||||
|
return
|
||||||
|
end
|
||||||
|
Aktion.D = nil
|
||||||
|
Aktion.W = nil
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Nichts mehr tun wenn Warten ansteht
|
||||||
|
if Aktion.W then return end
|
||||||
|
|
||||||
|
-- Signal austragen, wenn wir einen Fahrtbegriff sehen
|
||||||
|
if Aktion.S then
|
||||||
|
local Begriff = leseSignal(Aktion.S)
|
||||||
|
if Begriff[1] ~= HALT then
|
||||||
|
Aktion.S = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Fahrstrasse schalten (greift nur wenn Signal auf Halt)
|
||||||
|
if Aktion.S then
|
||||||
|
local ZSignal = Aktion.S
|
||||||
|
local FSignal = ZSignal + 1000
|
||||||
|
local Fahrstrassen = {}
|
||||||
|
if Aktion.FS then
|
||||||
|
Fahrstrassen = Aktion.FS
|
||||||
|
elseif Selbstblock_Default then
|
||||||
|
Fahrstrassen = {1}
|
||||||
|
end
|
||||||
|
if #Fahrstrassen > 0 then
|
||||||
|
if EEPGetSignal(FSignal) == 1 then
|
||||||
|
EEPSetSignal(FSignal, 1+Fahrstrassen[math.random(#Fahrstrassen)])
|
||||||
|
--print("FS ",FSignal)
|
||||||
|
--Schaltauftraege[FSignal] = 1+Fahrstrassen[math.random(#Fahrstrassen)]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Sobald wir nicht mehr ans Signal gebunden sind, Abfahrt via EEPSetTrainSpeed
|
||||||
|
if Aktion.V and Zugaktionen[Zugname].A then
|
||||||
|
if _G["setzeStromabnehmer"] and Aktion.D == nil then
|
||||||
|
setzeStromabnehmer(Zugname, Aktion.V>0 and 1 or -1)
|
||||||
|
Aktion.D = 20
|
||||||
|
return
|
||||||
|
end
|
||||||
|
-- Timer erfuellt, Ankunft registrieren
|
||||||
|
Aktion.D = nil
|
||||||
|
EEPSetTrainSpeed(Zugname, Aktion.V)
|
||||||
|
Aktion.V = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function KsKitMain()
|
function KsKitMain()
|
||||||
-- Signale abfragen, ob vielleicht ein Zug vor ihnen steht
|
-- Signale abfragen, ob vielleicht ein Zug vor ihnen steht
|
||||||
for i=1,#GefundeneSignale do
|
for i=1,#GefundeneSignale do
|
||||||
@ -167,6 +252,7 @@ function KsKitMain()
|
|||||||
Zugname = EEPGetSignalTrainName(Signal, 1)
|
Zugname = EEPGetSignalTrainName(Signal, 1)
|
||||||
if not Zugaktionen[Zugname].S then
|
if not Zugaktionen[Zugname].S then
|
||||||
Zugaktionen[Zugname].S = Signal
|
Zugaktionen[Zugname].S = Signal
|
||||||
|
print("Zug ",Zugname," vom Signal ",Signal, " eingefangen")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -182,86 +268,8 @@ function KsKitMain()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for Zugname, Data in pairs(Zugaktionen) do
|
for Zugname, Aktion in pairs(Zugaktionen) do
|
||||||
local Haltegrund = "Kein Plan"
|
KsKitZugSteuern(Zugname, Aktion)
|
||||||
local ok, V_ist = EEPGetTrainSpeed(Zugname)
|
|
||||||
|
|
||||||
-- Wenn wir stehen, merken wir uns unsere Ankunftszeit
|
|
||||||
if V_ist == 0 then
|
|
||||||
if Zugaktionen[Zugname].A == nil then
|
|
||||||
Zugaktionen[Zugname].A = EEPTime
|
|
||||||
if Zugaktionen[Zugname].V then
|
|
||||||
EEPSetTrainSpeed(Zugname, 0)
|
|
||||||
if Zugaktionen[Zugname].R then
|
|
||||||
AnimiereZugStromabnehmer(Zugname, 0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- Ankunftszeit loeschen falls wir unterwegs sind
|
|
||||||
elseif Zugaktionen[Zugname].A then
|
|
||||||
Zugaktionen[Zugname].A = nil
|
|
||||||
Zugaktionen[Zugname].S = nil
|
|
||||||
Zugaktionen[Zugname].R = nil
|
|
||||||
Zugaktionen[Zugname].V = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if Zugaktionen[Zugname].W then
|
|
||||||
Haltegrund = "Planhalt"
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Wartezeit loeschen falls abgesessen
|
|
||||||
if Zugaktionen[Zugname].W and Zugaktionen[Zugname].A then
|
|
||||||
local Wartedauer = EEPTime - Zugaktionen[Zugname].A
|
|
||||||
if Wartedauer < 0 then
|
|
||||||
Wartedauer = Wartedauer + 24*60*60
|
|
||||||
end
|
|
||||||
if Wartedauer > Zugaktionen[Zugname].W then
|
|
||||||
Zugaktionen[Zugname].W = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Fahrstrasse schalten
|
|
||||||
if not Zugaktionen[Zugname].W and Zugaktionen[Zugname].S then
|
|
||||||
local ZSignal = Zugaktionen[Zugname].S
|
|
||||||
local FSignal = ZSignal + 1000
|
|
||||||
local Fahrstrassen = {}
|
|
||||||
if Zugaktionen[Zugname].FS then
|
|
||||||
Fahrstrassen = Zugaktionen[Zugname].FS
|
|
||||||
elseif Selbstblock_Default then
|
|
||||||
Fahrstrassen = {1}
|
|
||||||
end
|
|
||||||
if #Fahrstrassen > 0 then
|
|
||||||
if EEPGetSignal(FSignal) == 1 then
|
|
||||||
Schaltauftraege[FSignal] = 1+Fahrstrassen[math.random(#Fahrstrassen)]
|
|
||||||
end
|
|
||||||
Haltegrund = "FS angefordert"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Haltegrund merken, das wir ihn spaeter im Signal-Tooltip darstellen koennen
|
|
||||||
if Zugaktionen[Zugname].S then
|
|
||||||
SignalHaltegruende[Zugaktionen[Zugname].S] = Haltegrund
|
|
||||||
end
|
|
||||||
|
|
||||||
if Zugaktionen[Zugname].S then
|
|
||||||
local Begriff = leseSignal(Zugaktionen[Zugname].S)
|
|
||||||
if Begriff[1] ~= HALT then
|
|
||||||
if Zugaktionen[Zugname].V then
|
|
||||||
if Zugaktionen[Zugname].B and Zugaktionen[Zugname].B + 5 < EEPTime then
|
|
||||||
EEPSetTrainSpeed(Zugname, Zugaktionen[Zugname].V)
|
|
||||||
Zugaktionen[Zugname].V = nil
|
|
||||||
Zugaktionen[Zugname].B = nil
|
|
||||||
elseif not Zugaktionen[Zugname].B then
|
|
||||||
AnimiereZugStromabnehmer(Zugname, Zugaktionen[Zugname].V>0 and 1 or -1)
|
|
||||||
Zugaktionen[Zugname].B = EEPTime
|
|
||||||
Zugaktionen[Zugname].R = nil
|
|
||||||
end
|
|
||||||
else
|
|
||||||
Zugaktionen[Zugname].S = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
speicherTabelle(1, Zugaktionen)
|
speicherTabelle(1, Zugaktionen)
|
||||||
|
Loading…
Reference in New Issue
Block a user