1
0
mirror of https://github.com/metrostroi-repo/MetrostroiAddon.git synced 2026-05-02 00:42:29 +00:00
Files
MetrostroiAddon/lua/metrostroi/systems/sys_81_720_rv.lua
g_brzhezinskiy 1d05caf866 init
2021-01-02 12:51:45 +03:00

121 lines
3.6 KiB
Lua

--------------------------------------------------------------------------------
-- 81-720 reverser
--------------------------------------------------------------------------------
-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o.
-- Contains proprietary code. See license.txt for additional information.
--------------------------------------------------------------------------------
Metrostroi.DefineSystem("81_720_RV")
TRAIN_SYSTEM.KROMatrix = {
{"KRO9", "10"},
{ 1 , 0, 1 },
{"KRO11", "12"},
{ 0, 0, 1 },
{"KRO15", "16"},
{ 1, 0, 0 },
{"KRO13", "14"},
{ 1, 0, 1 },
{"KRO1", "2" },
{ 1, 0, 1 },
{"KRO5", "6" },
{ 0, 1, 0 },
{"KRO3", "4" },
{ 0, 0, 1 },
{"KRO7", "8" },
{ 1, 1, 0 },
}
TRAIN_SYSTEM.KRRMatrix = {
{"KRR7", "8" },
{ 1, 0, 1 },
{"KRR3", "4" },
{ 0, 0, 1 },
{"KRR13", "14"},
{ 1, 0, 0 },
{"KRR11", "12"},
{ 1, 0, 1 },
{"KRR1", "2" },
{ 1, 0, 1 },
{"KRR15", "16"},
{ 1, 0, 1 },
{"KRR5", "6" },
{ 0, 0, 1 },
{"KRR9", "10"},
{ 1 , 0, 0 },
}
function TRAIN_SYSTEM:Initialize()
self.KROPosition = 0
self.KRRPosition = 0
self.ChangeSpeed = 0.10
-- Initialize contacts values
for i=1,#self.KROMatrix/2 do
local v = self.KROMatrix[i*2-1]
self[v[1].."-"..v[2]] = 0
end
for i=1,#self.KRRMatrix/2 do
local v = self.KRRMatrix[i*2-1]
self[v[1].."-"..v[2]] = 0
end
end
function TRAIN_SYSTEM:Inputs()
return { "KROSet", "KRRSet", }
end
local outputs = { "KROPosition","KRRPosition"}
for i=1,#TRAIN_SYSTEM.KROMatrix/2 do
local v = TRAIN_SYSTEM.KROMatrix[i*2-1]
table.insert(outputs,v[1].."-"..v[2])
end
for i=1,#TRAIN_SYSTEM.KRRMatrix/2 do
local v = TRAIN_SYSTEM.KRRMatrix[i*2-1]
table.insert(outputs,v[1].."-"..v[2])
end
function TRAIN_SYSTEM:Outputs()
return outputs
end
function TRAIN_SYSTEM:TriggerInput(name,value)
local prevKROPosition = self.KROPosition
-- Change position
if name == "KROSet" then
if (self.Enabled ~= 0) and (math.floor(value) ~= self.KROPosition) then
local prevKROPosition = self.KROPosition
self.KROPosition = math.floor(value)
if self.KROPosition > 1 then self.KROPosition = 1 end
if self.KROPosition < -1 then self.KROPosition = -1 end
if prevKROPosition ~= self.KROPosition then
self.Train:PlayOnce("kro_"..prevKROPosition.."_"..self.KROPosition,"cabin",1)
end
end
end
if name == "KRRSet" then
if (self.Enabled ~= 0) and (math.floor(value) ~= self.KRRPosition) then
local prevKRRPosition = self.KRRPosition
self.KRRPosition = math.floor(value)
if self.KRRPosition > 1 then self.KRRPosition = 1 end
if self.KRRPosition < -1 then self.KRRPosition = -1 end
if prevKRRPosition ~= self.KRRPosition then
self.Train:PlayOnce("krr_"..prevKRRPosition.."_"..self.KRRPosition,"cabin",1)
end
end
end
end
function TRAIN_SYSTEM:Think()
local Train = self.Train
-- Move controller
self.Timer = self.Timer or CurTime()
-- Update contacts
for i=1,#self.KROMatrix/2 do
local v = self.KROMatrix[i*2-1]
local d = self.KROMatrix[i*2]
self[v[1].."-"..v[2]] = d[self.KROPosition+2]
end
for i=1,#self.KRRMatrix/2 do
local v = self.KRRMatrix[i*2-1]
local d = self.KRRMatrix[i*2]
self[v[1].."-"..v[2]] = d[self.KRRPosition+2]
end
end