mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
init
This commit is contained in:
101
lua/metrostroi/systems/sys_81_720_igla_pcbk.lua
Normal file
101
lua/metrostroi/systems/sys_81_720_igla_pcbk.lua
Normal file
@@ -0,0 +1,101 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- ASOTP "IGLA" black wagon controller unit for 81-720
|
||||
--------------------------------------------------------------------------------
|
||||
-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o.
|
||||
-- Contains proprietary code. See license.txt for additional information.
|
||||
--------------------------------------------------------------------------------
|
||||
Metrostroi.DefineSystem("81_720_IGLA_PCBK")
|
||||
TRAIN_SYSTEM.DontAccelerateSimulation = true
|
||||
|
||||
function TRAIN_SYSTEM:Initialize()
|
||||
self.States = {}
|
||||
self.State = -1
|
||||
self.Timer = 0
|
||||
self.Time = 0
|
||||
|
||||
end
|
||||
if TURBOSTROI then return end
|
||||
function TRAIN_SYSTEM:Inputs()
|
||||
return { "" }
|
||||
end
|
||||
function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata)
|
||||
if textdata== "Update" then
|
||||
self.Update = true
|
||||
end
|
||||
end
|
||||
function TRAIN_SYSTEM:CANWrite(name,value)
|
||||
self.Train:CANWrite("IGLA_PCBK",self.Train:GetWagonNumber(),"IGLA_CBKI",nil,name,value)
|
||||
end
|
||||
function TRAIN_SYSTEM:CState(name,value)
|
||||
if self.Update or self.States[name] ~= value then
|
||||
self.States[name] = value
|
||||
self.Train:CANWrite("IGLA_PCBK",self.Train:GetWagonNumber(),"IGLA_CBKI",nil,name,value)
|
||||
end
|
||||
end
|
||||
function TRAIN_SYSTEM:Think(dT)
|
||||
local Train = self.Train
|
||||
local power = Train.Panel.PCBKPower > 0
|
||||
if not power or self.Reset then
|
||||
self.Reset = false
|
||||
if self.State ~= -1 then
|
||||
self.State = -1
|
||||
self.Timer = nil
|
||||
end
|
||||
end
|
||||
if self.State == -1 and power then
|
||||
self.State = 0
|
||||
self.Timer = CurTime()+math.random()*0.3
|
||||
end
|
||||
if self.State == 0 and CurTime()-self.Timer > 1.2 then
|
||||
self.State = 1
|
||||
self.Time = CurTime()
|
||||
self.EngageTimer = nil
|
||||
end
|
||||
if self.State == 1 and (CurTime() - self.Time) > 1.4 then
|
||||
if self.Update then
|
||||
self:CANWrite("Timer",CurTime())
|
||||
end
|
||||
self.Time= CurTime()+math.random()*0.4
|
||||
local schengaged = Train.BUV.Brake > 0 or Train.BUV.Drive > 0
|
||||
local schengagedD = Train.BUV.Drive > 0
|
||||
local schengagedB = Train.BUV.Brake > 0
|
||||
local BV = Train.BV.Value < 0.5
|
||||
local DOORS = false
|
||||
local BBE = Train.BUV.BBE == 0
|
||||
local PARKING = false
|
||||
local BRAKES = false
|
||||
local SCHEME = false
|
||||
if schengaged then
|
||||
for i=1,4 do
|
||||
DOORS = Train.Pneumatic.LeftDoorState[i] > 0 or Train.Pneumatic.RightDoorState[i] > 0
|
||||
if DOORS then break end
|
||||
end
|
||||
--PARKING = Train.ParkingBrake.Value > 0.5 and not schengagedB
|
||||
BRAKES = Train.Pneumatic.BrakeCylinderPressure > 0.5 and not schengagedB
|
||||
SCHEME = Train.K2.Value+Train.K3.Value == 0
|
||||
if BBE and schengagedD and not self.BBETimer then self.BBETimer = CurTime() end
|
||||
else
|
||||
if (not BBE or not self.States.BBE) and self.BBETimer then self.BBETimer = nil end
|
||||
end
|
||||
if schengaged and SCHEME then
|
||||
if not self.EngageTimer then self.EngageTimer = CurTime() end
|
||||
if BRAKES and not self.BrakesTimer then self.BrakesTimer = CurTime() end
|
||||
if not BRAKES and self.BrakesTimer then self.BrakesTimer = nil end
|
||||
else
|
||||
if self.EngageTimer then self.EngageTimer = nil end
|
||||
if self.BrakesTimer then self.BrakesTimer = nil end
|
||||
end
|
||||
--[[ self:CState("SCHEME",self.EngageTimer and CurTime()-self.EngageTimer > 3)
|
||||
self:CState("BV",BV)
|
||||
self:CState("DOORS",DOORS)
|
||||
self:CState("BBE",self.BBETimer and CurTime()-self.BBETimer > 7)
|
||||
self:CState("PARKING",PARKING)
|
||||
self:CState("BRAKES",self.BrakesTimer and CurTime()-self.BrakesTimer > 3)
|
||||
self:CState("UAVA",Train.Pneumatic.EmergencyValve)
|
||||
if Train.IGLA_CBKI then
|
||||
self:CState("ARS",Train.BARS.Active > 0 and Train.BUKP.ControllerState > 0 and math.max(20,Train.BARS.SpeedLimit)+9 < Train.ALSCoil.Speed)
|
||||
self:CState("RU",Train.RV["KRR15-16"] > 0)
|
||||
end--]]
|
||||
self.Update = false
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user