1
0
mirror of https://github.com/metrostroi-repo/MetrostroiAddon.git synced 2026-05-02 00:42:29 +00:00
This commit is contained in:
g_brzhezinskiy
2021-01-02 12:51:45 +03:00
commit 1d05caf866
613 changed files with 337020 additions and 0 deletions

View File

@@ -0,0 +1,108 @@
--------------------------------------------------------------------------------
-- АРС-АЛС
--------------------------------------------------------------------------------
Metrostroi.DefineSystem("NoARS")
TRAIN_SYSTEM.DontAccelerateSimulation = true
function TRAIN_SYSTEM:Initialize()
--self.Train:LoadSystem("UOS","Relay","Switch", {bass = true})
--self.Train:LoadSystem("BPS","Relay","Switch",{ bass = true,normally_closed = true })
-- ALS state
self.Signal80 = false
self.Signal70 = false
self.Signal60 = false
self.Signal40 = false
self.Signal0 = false
self.Special = false
self.NoFreq = true
self.RealNoFreq = true
-- Internal state
self.Speed = 0
self.SpeedLimit = 0
self.NextLimit = 0
self.Ring = false
self.Overspeed = false
-- ARS wires
self["33D"] = 1
self["33G"] = 0
self["33Zh"] = 1--KAH
--
self["2"] = 0
self["20"] = 0
self["29"] = 0
--
self["31"] = 0
self["32"] = 0
self["8"] =0
-- Lamps
---self.LKT = false
self.LVD = false
end
function TRAIN_SYSTEM:Outputs()
return { "2", "8", "20", "31", "32", "29", "33D", "33G", "33Zh",
"Speed", "Signal80","Signal70","Signal60","Signal40","Signal0","Special","NoFreq","RealNoFreq",
"SpeedLimit", "NextLimit","Ring","KVT","EnableARS","EnableALS","Signal", "UAVA"}
end
function TRAIN_SYSTEM:Inputs()
return { "IgnoreThisARS","AttentionPedal","Ring" }
end
function TRAIN_SYSTEM:TriggerInput(name,value)
end
function TRAIN_SYSTEM:Think()
if self.Train.RV_2.Value < 1 then self.Train.RV_2:TriggerInput("Set",1)
end
local Train = self.Train
local tbl = Train.SubwayTrain and Train.SubwayTrain.ALS
local haveautostop = tbl and tbl.HaveAutostop
local autostop = haveautostop and Train.SpeedSign > 0 and Train.Speed > 0.1
if autostop then
local ars,arsback
self.Timer = self.Timer or CurTime()
if CurTime() - self.Timer > 1.00 then
self.Timer = CurTime()
-- Get train position
local pos = Metrostroi.TrainPositions[Train] --Metrostroi.GetPositionOnTrack(Train:GetPos(),Train:GetAngles()) --(this metod laggy for dir checks)
if pos then pos = pos[1] end
-- Get previous ARS section
if pos then
ars,arsback = Metrostroi.GetARSJoint(pos.node1,pos.x,Metrostroi.TrainDirections[Train], Train)
end
if autostop then
if IsValid(arsback) then
if arsback == self.AutostopSignal then
local ply,mode = Train:GetDriverPly()
local nomsg = hook.Run("MetrostroiPassedRed",Train,ply,mode,arsback)
Train.Pneumatic:TriggerInput("Autostop",nomsg and 0 or 1)
if not nomsg and (not IsValid(Train.FrontTrain) or not IsValid(Train.RearTrain)) then
RunConsoleCommand("say",Format("%s Passed stop %s signal [%s]",Train:GetDriverName(),arsback.InvationSignal and "InvationSignal" or "",arsback.Name))
end
self.AutostopSignal = nil
end
end
if IsValid(ars) then
if ars.AutoEnabled then
self.AutostopSignal = ars
elseif self.AutostopSignal == ars then
self.AutostopSignal = nil
end
end
end
end
end
self["33D"] = ((Train.Pneumatic and Train.Pneumatic.EmergencyValve) or self.UAVAContacts) and 0 or 1
if Train.UAVAContact and Train.UAVAContact.Value > 0.5 and not Train.Pneumatic.EmergencyValve then
self.UAVAContacts = nil
end
end