mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
init
This commit is contained in:
236
lua/metrostroi/systems/sys_81_718_bup.lua
Normal file
236
lua/metrostroi/systems/sys_81_718_bup.lua
Normal file
@@ -0,0 +1,236 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- 81-718 train control unit
|
||||
--------------------------------------------------------------------------------
|
||||
-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o.
|
||||
-- Contains proprietary code. See license.txt for additional information.
|
||||
--------------------------------------------------------------------------------
|
||||
Metrostroi.DefineSystem("81_718_BUP")
|
||||
|
||||
function TRAIN_SYSTEM:Initialize()
|
||||
self.Power = 0
|
||||
|
||||
|
||||
self.IV = 0
|
||||
self.IN = 0
|
||||
self.IX3 = 0
|
||||
self.IX2 = 0
|
||||
self.IX1 = 0
|
||||
self.I0 = 0
|
||||
self.IT1 = 0
|
||||
self.IT2 = 0
|
||||
self.IT3 = 0
|
||||
|
||||
self.IBX3 = 0
|
||||
self.IBX2 = 0
|
||||
self.IBX1 = 0
|
||||
self.IB0 = 0
|
||||
self.IBT1 = 0
|
||||
self.IBT2 = 0
|
||||
self.IBT3 = 0
|
||||
|
||||
self.IX = 0
|
||||
self.IT = 0
|
||||
|
||||
self.IKDV = 0
|
||||
self.INKDV = 0
|
||||
self.IBKDV = 0
|
||||
self.IBBUP = 0
|
||||
self.IPB = 0
|
||||
self.IARS = 0
|
||||
self.IAVT = 0
|
||||
self.IPVU = 0
|
||||
self.IRPB = 0
|
||||
self.IV = 0
|
||||
self.IN = 0
|
||||
self.IROT = 0
|
||||
self.ISOT = 0
|
||||
|
||||
self.BBUP = 0
|
||||
self.V0 = 0
|
||||
self.EKV = 0
|
||||
self.EBAV = 0
|
||||
self.EKR = 0
|
||||
self.EARS = 0
|
||||
|
||||
self.OX = 0
|
||||
self.OXp = 0
|
||||
self.OT = 0
|
||||
self.OU1 = 0
|
||||
self.OU2 = 0
|
||||
self.OV = 0
|
||||
self.ON = 0
|
||||
self.O0 = 0
|
||||
self.OZPT = 0
|
||||
|
||||
self.OBBAV = 0
|
||||
self.OBBUP = 0
|
||||
|
||||
self.BlockX = 1
|
||||
end
|
||||
|
||||
function TRAIN_SYSTEM:Inputs()
|
||||
return { }
|
||||
end
|
||||
|
||||
local outputs = {
|
||||
"Power",
|
||||
"IPB","IV","IN",
|
||||
"IX3","IX2","IX1","I0","IT1","IT2","IT3",
|
||||
"IBX3","IBX2","IBX1","IB0","IBT1","IBT2","IBT3",
|
||||
"IX","IT","IKDV","INKDV","IBKDV","IPB","IARS",
|
||||
"IAVT","IPVU","IRPB","IROT","ISOT",
|
||||
"BBUP","V0","EKV","EBAV","EKR","EARS",
|
||||
"OX","OT","OU1","OU2","OV","ON","O0","OZPT","OBBAV","OBBUP",
|
||||
}
|
||||
|
||||
function TRAIN_SYSTEM:Outputs()
|
||||
return outputs
|
||||
end
|
||||
|
||||
function TRAIN_SYSTEM:TriggerInput(name,value)
|
||||
end
|
||||
|
||||
function TRAIN_SYSTEM:Think()
|
||||
self.CurTime = self.CurTime or CurTime()
|
||||
if CurTime()-self.CurTime < 0.05 then return end
|
||||
self.DeltaTime = CurTime()-self.CurTime
|
||||
self.CurTime = CurTime()
|
||||
local Train = self.Train
|
||||
local BKBD = Train.BKBD
|
||||
local BKCU = Train.BKCU
|
||||
|
||||
if self.Power > 0 then
|
||||
--Обработка сигналов контроллера
|
||||
self.IX3 = Train.BKCU.Controller == 3 and 1 or 0
|
||||
self.IX2 = Train.BKCU.Controller == 2 and 1 or 0
|
||||
self.IX1 = Train.BKCU.Controller == 1 and 1 or 0
|
||||
self.I0 = Train.BKCU.Controller == 0 and 1 or 0
|
||||
self.IB0 = 1
|
||||
self.IT1 = Train.BKCU.Controller == -1 and 1 or 0
|
||||
self.IT2 = Train.BKCU.Controller == -2 and 1 or 0
|
||||
self.IT3 = Train.BKCU.Controller == -3 and 1 or 0
|
||||
|
||||
self.BBUP = math.min(1,self.IBBUP*(1-self.OBBUP)+self.BBUP+self.LastBlock)
|
||||
if self.BBUP == 0 then
|
||||
self.EKV = (self.IX3+self.IX2+self.IX1+self.I0+self.IT1+self.IT2+self.IT3)>1 and 1 or 0
|
||||
self.EKR = (self.IV+self.IN) > 1 and 1 or 0
|
||||
self.EARS = (self.IX+self.IT) > 1 and 1 or 0
|
||||
|
||||
if self.EKV > 0 or self.EKR>0 then
|
||||
self.OX = 0
|
||||
self.OT = 0
|
||||
else
|
||||
local CanDrive = (self.IKDV+self.IBKDV)--*self.IPB
|
||||
if Train.BKCU.Controller > 0 then
|
||||
self.OX = (1-self.EARS)*(1-self.EKV)*CanDrive*(1-self.BlockX)*self.IX*(1-self.IT)*(1-self.IAVT) --501Г
|
||||
self.BlockX = self.BlockX+(1-CanDrive)
|
||||
else
|
||||
self.OX = 0
|
||||
self.BlockX = 0
|
||||
end
|
||||
self.OT = Train.BKCU.Controller < 0 and 1 or 0 --502
|
||||
end
|
||||
if self.EKR > 0 then
|
||||
self.OV = 0
|
||||
self.ON = 0
|
||||
else
|
||||
self.OV = self.IV--505
|
||||
self.ON = self.IN--506
|
||||
end
|
||||
self.O0 = (1-self.OX)*(1-self.OT) --545
|
||||
if self.OX > 0 or self.OT > 0 then
|
||||
self.OU1 = math.abs(Train.BKCU.Controller) > 1 and 1 or 0 --503
|
||||
self.OU2 = math.abs(Train.BKCU.Controller) > 2 and 1 or 0 --504
|
||||
else
|
||||
self.OU1 = 0
|
||||
self.OU2 = 0
|
||||
end
|
||||
if self.IT>0 or self.IAVT>0 or self.OT > 0 and self.V0 == 0 then
|
||||
if not self.BrakeTimer then self.BrakeTimer = CurTime() end
|
||||
elseif self.BrakeTimer then
|
||||
self.BrakeTimer = false
|
||||
end
|
||||
if self.IT>0 then
|
||||
self.OT = 1
|
||||
self.OU1=1
|
||||
self.OU2=1
|
||||
end
|
||||
self.OZPT = self.BrakeTimer and CurTime()-self.BrakeTimer > 2.2 and math.min(1,self.OU2+self.IT) or 0
|
||||
|
||||
self.OBBAV = self.OX+self.OT
|
||||
self.EBAV = (self.IBX3+self.IBX2+self.IBX1+self.IB0+self.IBT1+self.IBT2+self.IBT3)>1 and 1 or 0
|
||||
self.OBBUP = 1
|
||||
else
|
||||
self.EKV = 0
|
||||
self.EKR = 0
|
||||
self.EARS = 0
|
||||
|
||||
self.OX = 0
|
||||
self.OT = 0
|
||||
self.OU1 = 0
|
||||
self.OU2 = 0
|
||||
self.OV = 0
|
||||
self.ON = 0
|
||||
self.O0 = 0
|
||||
self.OZPT = 0
|
||||
|
||||
self.OBBAV = 0
|
||||
self.EBAV = 0
|
||||
self.OBBUP = 1
|
||||
end
|
||||
else
|
||||
self.BlockX = 1
|
||||
|
||||
--self.IV = 0
|
||||
--self.IN = 0
|
||||
self.IX3 = 0
|
||||
self.IX2 = 0
|
||||
self.IX1 = 0
|
||||
self.I0 = 0
|
||||
self.IT1 = 0
|
||||
self.IT2 = 0
|
||||
self.IT3 = 0
|
||||
|
||||
self.IBX3 = 0
|
||||
self.IBX2 = 0
|
||||
self.IBX1 = 0
|
||||
self.IB0 = 0
|
||||
self.IBT1 = 0
|
||||
self.IBT2 = 0
|
||||
self.IBT3 = 0
|
||||
--self.IX = 0
|
||||
--self.IT = 0
|
||||
|
||||
--self.IKDV = 0
|
||||
--self.IBKDV = 0
|
||||
--self.IPB = 0
|
||||
self.IARS = 0
|
||||
--self.IAVT = 0
|
||||
self.IPVU = 0
|
||||
self.IRPB = 0
|
||||
self.IROT = 0
|
||||
self.ISOT = 0
|
||||
|
||||
|
||||
self.BBUP = 0
|
||||
self.LastBlock = self.IBBUP
|
||||
--self.V0 = 0
|
||||
self.EKV = 0
|
||||
self.EBAV = 0
|
||||
self.EKR = 0
|
||||
self.EARS = 0
|
||||
|
||||
self.OX = 0
|
||||
self.OXp = 0
|
||||
self.OT = 0
|
||||
self.OU1 = 0
|
||||
self.OU2 = 0
|
||||
self.OV = 0
|
||||
self.ON = 0
|
||||
self.O0 = 0
|
||||
self.OZPT = 0
|
||||
|
||||
self.OBBAV = 0
|
||||
self.OBBUP = 0
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user