mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
121 lines
3.6 KiB
Lua
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
|