mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
148 lines
4.4 KiB
Lua
148 lines
4.4 KiB
Lua
AddCSLuaFile("shared.lua")
|
|
AddCSLuaFile("cl_init.lua")
|
|
include("shared.lua")
|
|
|
|
function ENT:Initialize()
|
|
self:SetModel("models/z-o-m-b-i-e/metro_2033/electro/m33_electro_box_08.mdl")
|
|
self.Sig = ""
|
|
end
|
|
|
|
function ENT:OnRemove()
|
|
end
|
|
|
|
function ENT:Think()
|
|
if not IsValid(self.SignalEntity) then
|
|
self.SignalEntity = Metrostroi.GetSignalByName(self.Signal)
|
|
if IsValid(self.SignalEntity) then
|
|
print(Format("Metrostroi Signal Controller: Linked to signal %s",self.Signal))
|
|
if not self.SignalEntity.Controllers then
|
|
self.SignalEntity.Controllers = {}
|
|
table.insert(self.SignalEntity.Controllers,self)
|
|
end
|
|
self.SignalEntity.ControllerLogic = self.DisableSignal
|
|
for k,v in pairs(self.SignalEntity.Controllers) do
|
|
if v == self then
|
|
self:NextThink(CurTime() + 1.0)
|
|
return true
|
|
end
|
|
end
|
|
table.insert(self.SignalEntity.Controllers,self)
|
|
end
|
|
end
|
|
self:NextThink(CurTime() + 1.0)
|
|
return true
|
|
end
|
|
|
|
function ENT:KeyValue(key ,value)
|
|
if key == "targetsignal" then
|
|
self.Signal = value
|
|
elseif key == "disablesignal" and value == "1" then
|
|
self.DisableSignal = true
|
|
elseif key == "LenseEnabled" then
|
|
if not self.Entities then self.Entities = {} end
|
|
local tbl = string.Explode(",",value)
|
|
timer.Simple(0,function() table.insert(self.Entities,{ents.FindByName(tbl[1]),tbl[2]}) end)
|
|
self:StoreOutput(key,value)
|
|
elseif key == "LenseDisabled" then
|
|
if not self.Entities then self.Entities = {} end
|
|
local tbl = string.Explode(",",value)
|
|
timer.Simple(0,function() table.insert(self.Entities,{ents.FindByName(tbl[1]),tbl[2],true}) end)
|
|
self:StoreOutput(key,value)
|
|
end
|
|
end
|
|
|
|
function ENT:TriggerOutput(output,_,data)
|
|
if not self.Entities then return end
|
|
for k,v in pairs(self.Entities) do
|
|
if output == "LenseEnabled" and not v[3] or output == "LenseDisabled" and v[3] then
|
|
for _,ent in pairs(v[1]) do
|
|
ent:Fire(v[2],data)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function ENT:AcceptInput( input, activator, called, data )
|
|
if not IsValid(self.SignalEntity) then
|
|
self.SignalEntity = Metrostroi.GetSignalByName(self.Signal)
|
|
if not IsValid(self.SignalEntity) then
|
|
if #ents.FindByClass("gmod_track_signal") > 0 then
|
|
ErrorNoHalt(Format("\nMetrostroi Signal Controller: Can't find signal %s!\nCheck, that you use official verion of signal\n",self.Signal))
|
|
else
|
|
ErrorNoHalt("\nMetrostroi Signal Controller: Please, load a signals first!\n")
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
local sig = self.SignalEntity
|
|
if input == "Open" then
|
|
for k,v in pairs(sig.Routes) do
|
|
if v.Manual then v.IsOpened = true end
|
|
end
|
|
elseif input == "OpenRoute" then
|
|
for k,v in pairs(sig.Routes) do
|
|
sig.Close = false
|
|
if v.RouteName and v.RouteName:upper() == data then
|
|
if v.Manual then v.IsOpened = true end
|
|
else
|
|
if v.Manual then v.IsOpened = false end
|
|
end
|
|
end
|
|
elseif input == "Close" then
|
|
for k,v in pairs(sig.Routes) do
|
|
if v.Manual then v.IsOpened = false end
|
|
end
|
|
elseif input == "SetKGU" then
|
|
sig.KGU = data == "1"
|
|
elseif input == "SetIS" then
|
|
sig.InvationSignal = data == "1"
|
|
elseif input == "SetSignal" then
|
|
local index = 0
|
|
for k,v in ipairs(sig.Lenses) do
|
|
if v ~= "M" then
|
|
--get the some models data
|
|
local dat = #v ~= 1 and sig.TrafficLightModels[sig.SignalType][#v-1] or sig.TrafficLightModels[sig.SignalType][sig.Signal_IS]
|
|
if not dat then continue end
|
|
for i = 1,#v do
|
|
if index == tonumber(data) then
|
|
sig.Sig = string.SetChar(sig.Sig,index,"1")
|
|
end
|
|
index = index + 1
|
|
end
|
|
end
|
|
end
|
|
elseif input == "ResetSignal" then
|
|
sig.Sig = ""
|
|
local index = 0
|
|
for k,v in ipairs(sig.Lenses) do
|
|
if v ~= "M" then
|
|
--get the some models data
|
|
local data = #v ~= 1 and sig.TrafficLightModels[sig.SignalType][#v-1] or sig.TrafficLightModels[sig.SignalType][sig.Signal_IS]
|
|
if not data then continue end
|
|
for i = 1,#v do
|
|
index = index + 1
|
|
sig.Sig = sig.Sig..0
|
|
end
|
|
end
|
|
end
|
|
elseif input == "SetFreq" then
|
|
sig.ARSSpeedLimit = tonumber(data) or 1
|
|
elseif input == "SetFreqMode26" then
|
|
sig.TwoToSix = true
|
|
elseif input == "SetFreqMode15" then
|
|
sig.TwoToSix = false
|
|
elseif input == "ResetFreq" then
|
|
sig.ARSSpeedLimit = 1
|
|
elseif input == "SetAutostop" then
|
|
sig.AutoEnabled = true
|
|
elseif input == "ResetAutostop" then
|
|
sig.AutoEnabled = false
|
|
elseif input == "SetRouteNumber" then
|
|
sig.RouteNumberReplace = data
|
|
elseif input == "ResetRouteNumber" then
|
|
sig.RouteNumberReplace = data
|
|
elseif input == "SetFreeBS" then
|
|
sig.FreeBS = tonumber(data) or 0
|
|
end
|
|
end
|