mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
init
This commit is contained in:
169
lua/entities/_obsolete/gmod_track_arm_/init.lua
Normal file
169
lua/entities/_obsolete/gmod_track_arm_/init.lua
Normal file
@@ -0,0 +1,169 @@
|
||||
AddCSLuaFile("cl_init.lua")
|
||||
AddCSLuaFile("shared.lua")
|
||||
include("shared.lua")
|
||||
|
||||
function ENT:Initialize()
|
||||
self:SetModel("models/props_combine/breendesk.mdl")
|
||||
self.BaseClass.Initialize(self)
|
||||
self.DriverSeat = self:CreateSeat("driver", Vector(-40, 0, 0), Angle(0, 0, 0), "models//nova/chair_office02.mdl")
|
||||
self.CursorX = 0
|
||||
self.CursorY = 0
|
||||
self:CursorMove(0, 0)
|
||||
self.Station = 0
|
||||
end
|
||||
|
||||
hook.Add("AcceptInput", "metrostroi_arm_trigger_check", function(ent, inputName, activator, called, data)
|
||||
if inputName == "ARMStartTouch" then
|
||||
called.ARMTriggered = true
|
||||
print(called, called:GetName(), activator, "Enable")
|
||||
end
|
||||
|
||||
if inputName == "ARMEndTouch" then
|
||||
called.ARMTriggered = false
|
||||
print(called, called:GetName(), activator, "Disable")
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
local function GetOccupation(tbl)
|
||||
for sID,signame in ipairs(tbl) do
|
||||
if signame[1] == "@" then
|
||||
local trigger = Metrostroi.ARMGet(signame:sub(2,-1), "trigger")
|
||||
if not trigger or trigger.ARMTriggered then
|
||||
return true
|
||||
end
|
||||
elseif signame ~= "" then
|
||||
local signal = Metrostroi.ARMGet(signame, "signal")
|
||||
if not signal or signal.OccupiedBy and signal.OccupiedBy ~= signal then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function ENT:Think()
|
||||
local armTbl = Metrostroi.ARMTable
|
||||
local armConf = Metrostroi.ARMConfigGenerated
|
||||
local station = armConf[self.Station]
|
||||
local armTblStation = armTbl[self.Station]
|
||||
if not station then return end
|
||||
if not armTblStation or (IsValid(armTblStation.Controller) and armTblStation.Controller ~= self) then return end
|
||||
armTblStation.Controller = self
|
||||
for buttonID,button in ipairs(station.buttons) do
|
||||
--print(button,button.selected)
|
||||
Metrostroi.ARMSync(self.Station, 1000+buttonID, "buttonPressable",button.pressable)
|
||||
Metrostroi.ARMSync(self.Station, 1000+buttonID, "buttonSelected",button.selected)
|
||||
end
|
||||
for segmID, segm in ipairs(station) do
|
||||
if type(segm) == "table" then
|
||||
if segm.occup then
|
||||
Metrostroi.ARMSync(self.Station, segmID, "occup", GetOccupation(segm.occup) or segm.occupAlt and GetOccupation(segm.occupAlt))
|
||||
end
|
||||
|
||||
if segm.occup2 then
|
||||
Metrostroi.ARMSync(self.Station, segmID, "occup2", GetOccupation(segm.occup2))
|
||||
end
|
||||
Metrostroi.ARMSync(self.Station, segmID, "route", segm.route and true)
|
||||
|
||||
|
||||
if segm.switch then
|
||||
local switch = Metrostroi.ARMGet(segm.switch, "switch")
|
||||
local main = switch and switch.MainTrack and not switch.AlternateTrack
|
||||
local alt = switch and not switch.MainTrack and switch.AlternateTrack
|
||||
Metrostroi.ARMSync(self.Station, segmID, "switch_m", main)
|
||||
Metrostroi.ARMSync(self.Station, segmID, "switch_a", alt)
|
||||
Metrostroi.ARMSync(self.Station, segmID, "switch_na", not main and not alt)
|
||||
end
|
||||
if segm.signal1 then
|
||||
local signal = Metrostroi.ARMGet(segm.signal1.name, "signal")
|
||||
local colors = signal and signal.Colors
|
||||
if segm.signal1.type > 1 then Metrostroi.ARMSync(self.Station, segmID, "signal1I", signal and signal.InvationSignal) end
|
||||
if segm.signal1.type > 2 then
|
||||
local Y = #colors:gsub("[^yY]","") > 1
|
||||
if Y then colors = colors:SetChar(colors:find("[yY]"),"") end
|
||||
Metrostroi.ARMSync(self.Station, segmID, "signal1Y", Y)
|
||||
end
|
||||
Metrostroi.ARMSync(self.Station, segmID, "signal1", colors)
|
||||
end
|
||||
if segm.signal2 then
|
||||
local signal = Metrostroi.ARMGet(segm.signal2.name, "signal")
|
||||
local colors = signal and signal.Colors
|
||||
if segm.signal2.type > 1 then Metrostroi.ARMSync(self.Station, segmID, "signal2I", signal and signal.InvationSignal) end
|
||||
if segm.signal2.type > 2 then
|
||||
local Y = #colors:gsub("[^yY]","") > 1
|
||||
if Y then colors = colors:SetChar(colors:find("[yY]"),"") end
|
||||
Metrostroi.ARMSync(self.Station, segmID, "signal2Y", Y)
|
||||
end
|
||||
Metrostroi.ARMSync(self.Station, segmID, "signal2", colors)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
self:NextThink(CurTime() + 0.5)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function ENT:OnRemove()
|
||||
end
|
||||
|
||||
function ENT:CursorMove(sys, dX, dY)
|
||||
self.CursorX = sys == "" and math.Clamp(self.CursorX + dX * 200, 0, 800) or dX
|
||||
self.CursorY = sys == "" and math.Clamp(self.CursorY + dY * 200, 0, 600) or dY
|
||||
self:SetNW2Int("CursorX", math.floor(self.CursorX))
|
||||
self:SetNW2Int("CursorY", math.floor(self.CursorY))
|
||||
end
|
||||
|
||||
function ENT:PanelTouch(state, x, y)
|
||||
for i, v in ipairs(Metrostroi.ARMConfig) do
|
||||
if math.InRangeXYR(self.CursorX, self.CursorY, 20 + (i - 1) * 30, 20, 30, 20) then
|
||||
self.Station = i
|
||||
self:SetNW2Int("ARM:Station", i)
|
||||
end
|
||||
end
|
||||
if not state then return end
|
||||
local RouteChoosing = self.RouteChoosing
|
||||
self.RouteChoosing = nil
|
||||
if RouteChoosing then
|
||||
print("DISABLE")
|
||||
for k,v in pairs(RouteChoosing.routes) do
|
||||
if v[1].button then
|
||||
v[1].button.selected = false
|
||||
elseif v[1].isbutton then
|
||||
v[1].selected = false
|
||||
end
|
||||
end
|
||||
end
|
||||
local confGenStation = Metrostroi.ARMConfigGenerated[self.Station]
|
||||
for k,button in pairs(confGenStation.buttons) do
|
||||
local sx,sy = 100+button.x*36,100+button.y*70
|
||||
if button.type == "r" then
|
||||
local sw,sh = 15,25
|
||||
local xa,ya = 3,12
|
||||
local x,y = sx+xa,sy+ya
|
||||
if RouteChoosing then
|
||||
if math.InRangeXYR(self.CursorX, self.CursorY, x,y,sw,sh) then
|
||||
for k,v in ipairs(RouteChoosing.routes) do
|
||||
if v[1].button and button == v[1].button or v[1].isbutton and button==v[1] then
|
||||
Metrostroi.CentralisationPrepareRoute(self.Station,v)
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif not self.RouteChoosing and button.pressable then
|
||||
if math.InRangeXYR(self.CursorX, self.CursorY, x,y,sw,sh) then
|
||||
self.RouteChoosing = button
|
||||
for k,v in ipairs(button.routes) do
|
||||
print(v[1],v[1].name,v[1].button)
|
||||
if v[1].button then
|
||||
v[1].button.selected = true
|
||||
elseif v[1].isbutton then
|
||||
v[1].selected = true
|
||||
print(2)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user