mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-04 00:52:33 +00:00
init
This commit is contained in:
6
lua/entities/gmod_track_signal_controller/cl_init.lua
Normal file
6
lua/entities/gmod_track_signal_controller/cl_init.lua
Normal file
@@ -0,0 +1,6 @@
|
||||
include("shared.lua")
|
||||
|
||||
function ENT:Initialize()
|
||||
end
|
||||
function ENT:OnRemove()
|
||||
end
|
||||
145
lua/entities/gmod_track_signal_controller/init.lua
Normal file
145
lua/entities/gmod_track_signal_controller/init.lua
Normal file
@@ -0,0 +1,145 @@
|
||||
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
|
||||
end
|
||||
end
|
||||
10
lua/entities/gmod_track_signal_controller/shared.lua
Normal file
10
lua/entities/gmod_track_signal_controller/shared.lua
Normal file
@@ -0,0 +1,10 @@
|
||||
ENT.Type = "anim"
|
||||
|
||||
ENT.PrintName = "Map signal controller"
|
||||
ENT.Category = "Metrostroi (utility)"
|
||||
|
||||
ENT.Spawnable = false
|
||||
ENT.AdminSpawnable = false
|
||||
|
||||
function ENT:SetupDataTables()
|
||||
end
|
||||
Reference in New Issue
Block a user