mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
81-722.
Переписана система номера маршрута. (ТНМ-01)
This commit is contained in:
@@ -1180,20 +1180,21 @@ ENT.ButtonMap["RouteNumberSet"] = {
|
||||
pos = Vector(477,42.6,-2.75),
|
||||
ang = Angle(0,-90,0),
|
||||
width = 30,
|
||||
height = 10,
|
||||
height = 20,
|
||||
scale = 0.085,
|
||||
buttons = {
|
||||
{ID = "RouteNumber1Set",x=0,y=0,w=10,h=10, tooltip="Первая цифра"},
|
||||
{ID = "RouteNumber2Set",x=10,y=0,w=10,h=10, tooltip="Вторая цифра"},
|
||||
{ID = "RouteNumber3Set",x=20,y=0,w=10,h=10, tooltip="Третья цифра"},
|
||||
{ID = "RouteNumber13",x=5,y=10,w=20,h=10, tooltip="Правая и левая кнопки\n(удерживать для настройки яркости)"},
|
||||
}
|
||||
}
|
||||
ENT.ButtonMap["RouteNumber"] = {
|
||||
pos = Vector(485.4,32.6,-4.55),
|
||||
ang = Angle(0,90+5,88),
|
||||
width = (7*8)*3+1*8*2,
|
||||
height = 14*8,
|
||||
scale = 0.23/4/(14/16),
|
||||
ENT.ButtonMap["TNM"] = {
|
||||
pos = Vector(485.4,32.62,-4.9),
|
||||
ang = Angle(0,95,88),
|
||||
width = 203,
|
||||
height = 115,
|
||||
scale = 0.06,
|
||||
|
||||
hide=2,
|
||||
}
|
||||
@@ -1284,7 +1285,7 @@ function ENT:Initialize()
|
||||
self.PAM = self:CreateRT("717PAM",1024,512)
|
||||
self.Tickers = self:CreateRT("721Tickers",1024,128)
|
||||
self.Sarmat = self:CreateRT("721Sarmat",1024,1024)
|
||||
self.RouteNumber = self:CreateRT("721RouteNumber",256,128)
|
||||
self.TNMScr = self:CreateRT("722TNM",256,128)
|
||||
self.LastStation = self:CreateRT("721LastStation",512,64)
|
||||
self.ReleasedPdT = 0
|
||||
self.CraneRamp = 0
|
||||
@@ -1469,16 +1470,20 @@ function ENT:Think()
|
||||
end
|
||||
end
|
||||
|
||||
local rnwork = self:GetNW2Bool("RouteNumberWork")
|
||||
local rn = self:GetNW2Int("RouteNumberSet")
|
||||
for i=1,3 do
|
||||
self:ShowHide("route_number"..i,rnwork)
|
||||
if rnwork and IsValid(self.ClientEnts["route_number"..i]) then
|
||||
local number = math.floor(rn/10^(3-i)) % 10
|
||||
--local d1 = math.floor(num) % 10
|
||||
--local d2 = math.floor(num / 10) % 10
|
||||
--local d3 = math.floor(num / 100) % 10
|
||||
self.ClientEnts["route_number"..i]:SetSkin(number)
|
||||
local tnmState = self:GetNW2Int("TNM:State",0)
|
||||
if tnmState > 0 then
|
||||
local rn = self:GetNW2Int("TNM:Number",0)
|
||||
local hide = tnmState==2 and CurTime()%1.2>0.3 or tnmState==1
|
||||
for i=1,3 do
|
||||
self:ShowHide("route_number"..i,hide)
|
||||
if IsValid(self.ClientEnts["route_number"..i]) then
|
||||
local number = math.floor(rn/10^(3-i)) % 10
|
||||
self.ClientEnts["route_number"..i]:SetSkin(number)
|
||||
end
|
||||
end
|
||||
else
|
||||
for i=1,3 do
|
||||
self:ShowHide("route_number"..i,false)
|
||||
end
|
||||
end
|
||||
--self:Animate("brake_cylinder", 0/6, 0.016, 0.78, 2,false)
|
||||
@@ -1738,8 +1743,8 @@ function ENT:DrawPost()
|
||||
surface.SetDrawColor(255,255,255)
|
||||
surface.DrawTexturedRectRotated(256,32,512,64,0)
|
||||
end)
|
||||
self.RTMaterial:SetTexture("$basetexture", self.RouteNumber)
|
||||
self:DrawOnPanel("RouteNumber",function(...)
|
||||
self.RTMaterial:SetTexture("$basetexture", self.TNMScr)
|
||||
self:DrawOnPanel("TNM",function(...)
|
||||
surface.SetMaterial(self.RTMaterial)
|
||||
surface.SetDrawColor(255,255,255)
|
||||
surface.DrawTexturedRectRotated(128,64,256,128,0)
|
||||
|
||||
@@ -436,6 +436,10 @@ function ENT:OnButtonPress(button,ply)
|
||||
self.DoorClose:TriggerInput("Set",1)
|
||||
end
|
||||
end
|
||||
if button == "RouteNumber13" then
|
||||
self.RouteNumber1:TriggerInput("Set",1)
|
||||
self.RouteNumber3:TriggerInput("Set",1)
|
||||
end
|
||||
end
|
||||
function ENT:OnButtonRelease(button,ply)
|
||||
if string.find(button,"PneumaticBrakeSet") then
|
||||
@@ -450,4 +454,8 @@ function ENT:OnButtonRelease(button,ply)
|
||||
if button == "DoorRight" then
|
||||
self.DoorRight:TriggerInput("Set",0)
|
||||
end
|
||||
if button == "RouteNumber13" then
|
||||
self.RouteNumber1:TriggerInput("Set",0)
|
||||
self.RouteNumber3:TriggerInput("Set",0)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -267,7 +267,7 @@ function ENT:InitializeSystems()
|
||||
self:LoadSystem("BUKP","81_722_BUKP")
|
||||
self:LoadSystem("MFDU","81_722_MFDU")
|
||||
self:LoadSystem("BUKV","81_722_BUKV")
|
||||
self:LoadSystem("RouteNumberSys","81_722_RouteNumber")
|
||||
self:LoadSystem("TNM","81_722_TNM")
|
||||
|
||||
self:LoadSystem("BARS","81_722_BARS")
|
||||
self:LoadSystem("ALSCoil")
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o.
|
||||
-- Contains proprietary code. See license.txt for additional information.
|
||||
--------------------------------------------------------------------------------
|
||||
Metrostroi.DefineSystem("81_722_RouteNumber")
|
||||
Metrostroi.DefineSystem("81_722_TNM")
|
||||
TRAIN_SYSTEM.DontAccelerateSimulation = true
|
||||
|
||||
function TRAIN_SYSTEM:Initialize()
|
||||
@@ -21,211 +21,248 @@ function TRAIN_SYSTEM:Initialize()
|
||||
if self.Train[v] then self.Triggers[v] = self.Train[v].Value > 0.5 end
|
||||
end
|
||||
|
||||
self.State = 0
|
||||
self.Brightness = 100
|
||||
self.BrightKeys = 0
|
||||
self.NumberState = 42
|
||||
if not TURBOSTROI then
|
||||
self.RouteNumber = IsValid(self.Train.Owner) and Format("%03d",tonumber(self.Train.Owner:GetInfo("metrostroi_route_number","61")) or 0) or "000"
|
||||
self.CurrentRouteNumber = self.RouteNumber
|
||||
self.RouteNumberState = 42
|
||||
self.Number = IsValid(self.Train.Owner) and tonumber(self.Train.Owner:GetInfo("metrostroi_route_number","61")) or 777
|
||||
end
|
||||
end
|
||||
|
||||
function TRAIN_SYSTEM:Outputs()
|
||||
return {}
|
||||
end
|
||||
|
||||
function TRAIN_SYSTEM:Inputs()
|
||||
return {}
|
||||
end
|
||||
if TURBOSTROI then return end
|
||||
|
||||
function TRAIN_SYSTEM:TriggerInput(name,value)
|
||||
function TRAIN_SYSTEM:Trigger(name,value)
|
||||
if value then
|
||||
if self.State == 1 then
|
||||
if name == "RouteNumber1" then self.BrightKeys = self.BrightKeys + 1 end
|
||||
if name == "RouteNumber3" then self.BrightKeys = self.BrightKeys + 1 end
|
||||
elseif self.State == 2 then
|
||||
if name == "RouteNumber1" then
|
||||
self.BrightKeys = self.BrightKeys + 1
|
||||
elseif name == "RouteNumber3" then
|
||||
self.BrightKeys = self.BrightKeys + 1
|
||||
end
|
||||
end
|
||||
else
|
||||
if self.State == 1 then
|
||||
if not self.NewNumber then self.NewNumber = self.Number end
|
||||
local rNum = self.NewNumber
|
||||
local rNum1,rNum2,rNum3 = math.floor(rNum/100)%10,math.floor(rNum/10)%10,math.floor(rNum)%10
|
||||
if name == "RouteNumber1" then
|
||||
self.BrightKeys = math.max(0,self.BrightKeys-1)
|
||||
if self.BrightKeys < 1 and not self.KeysLock then
|
||||
rNum1 = rNum1 + 1
|
||||
if rNum1 > 9 then rNum1 = 0 end
|
||||
end
|
||||
elseif name == "RouteNumber2" then
|
||||
if self.BrightKeys < 1 and not self.KeysLock then
|
||||
rNum2 = rNum2 + 1
|
||||
if rNum2 > 9 then rNum2 = 0 end
|
||||
end
|
||||
elseif name == "RouteNumber3" then
|
||||
self.BrightKeys = math.max(0,self.BrightKeys-1)
|
||||
if self.BrightKeys < 1 and not self.KeysLock then
|
||||
rNum3 = rNum3 + 1
|
||||
if rNum3 > 9 then rNum3 = 0 end
|
||||
end
|
||||
end
|
||||
self.NewNumber = rNum1*100+rNum2*10+rNum3
|
||||
if self.NewNumber ~= self.Number then self.NewNumberTimer = CurTime()+5 end
|
||||
elseif self.State == 2 then
|
||||
local bright = self.Brightness
|
||||
local bright1,bright2,bright3 = math.floor(bright/100)%10,math.floor(bright/10)%10,math.floor(bright)%10
|
||||
if name == "RouteNumber1" then
|
||||
self.BrightKeys = math.max(0,self.BrightKeys-1)
|
||||
if self.BrightKeys < 1 and not self.KeysLock then
|
||||
bright1 = bright1 + 1
|
||||
if bright1 > 1 then bright1 = 0 end
|
||||
end
|
||||
elseif name == "RouteNumber2" then
|
||||
if self.BrightKeys < 1 and not self.KeysLock then
|
||||
bright2 = bright2 + 1
|
||||
if bright2 > 9 then bright2 = 0 end
|
||||
end
|
||||
elseif name == "RouteNumber3" then
|
||||
self.BrightKeys = math.max(0,self.BrightKeys-1)
|
||||
if self.BrightKeys < 1 and not self.KeysLock then
|
||||
bright3 = bright3 + 1
|
||||
if bright3 > 9 then bright3 = 0 end
|
||||
end
|
||||
end
|
||||
self.Brightness = math.min(100,bright1*100+bright2*10+bright3)
|
||||
end
|
||||
if self.KeysLock and self.BrightKeys == 0 then self.KeysLock = false end
|
||||
end
|
||||
end
|
||||
if SERVER then
|
||||
function TRAIN_SYSTEM:Trigger(name,value)
|
||||
local Train = self.Train
|
||||
if value then
|
||||
if not self.NextRouteNumberTimer then
|
||||
self.NextRouteNumber = Format("%03d",self.CurrentRouteNumber)
|
||||
end
|
||||
self.NextRouteNumberTimer = CurTime()
|
||||
end
|
||||
if name == "RouteNumber1" and value then
|
||||
local num = tonumber(self.NextRouteNumber[1]+1)
|
||||
if num > 9 then num = 0 end
|
||||
self.NextRouteNumber = self.NextRouteNumber:SetChar(1,num)
|
||||
end
|
||||
if name == "RouteNumber2" and value then
|
||||
local num = tonumber(self.NextRouteNumber[2]+1)
|
||||
if num > 9 then num = 0 end
|
||||
self.NextRouteNumber = self.NextRouteNumber:SetChar(2,num)
|
||||
end
|
||||
if name == "RouteNumber3" and value then
|
||||
local num = tonumber(self.NextRouteNumber[3]+1)
|
||||
if num > 9 then num = 0 end
|
||||
self.NextRouteNumber = self.NextRouteNumber:SetChar(3,num)
|
||||
end
|
||||
end
|
||||
function TRAIN_SYSTEM:Think(dT)
|
||||
local Train = self.Train
|
||||
local Panel = Train.Panel
|
||||
local Work = Train.Electric.Power --and Train.SF19.Value > 0
|
||||
if Work then
|
||||
local Power = Train.Electric.Power > 0
|
||||
if Power then
|
||||
for k,v in pairs(self.TriggerNames) do
|
||||
if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then
|
||||
self:Trigger(v,Train[v].Value > 0.5)
|
||||
self.Triggers[v] = Train[v].Value > 0.5
|
||||
end
|
||||
end
|
||||
if self.NextRouteNumberTimer and CurTime()-self.NextRouteNumberTimer > 5 and self.RouteNumberState == 42 then
|
||||
self.NextRouteNumberTimer = nil
|
||||
self.CurrentRouteNumber = tonumber(self.NextRouteNumber)
|
||||
if self.State == 1 then
|
||||
if self.BrightKeys > 1 then
|
||||
if not self.BrightTimer then self.BrightTimer = CurTime()+1 end
|
||||
if CurTime() > self.BrightTimer then self.State=2 self.BrightTimer=nil self.KeysLock = true end
|
||||
else
|
||||
if self.BrightTimer then self.BrightTimer = nil end
|
||||
end
|
||||
Train:SetNW2Int("TNM:Number",self.NewNumber or self.Number)
|
||||
elseif self.State == 0 then
|
||||
self.State = 1
|
||||
elseif self.State == 2 then
|
||||
if self.BrightKeys > 1 and not self.KeysLock then
|
||||
self.State = 1
|
||||
self.KeysLock = true
|
||||
end
|
||||
Train:SetNW2Int("TNM:Number",self.Brightness)
|
||||
end
|
||||
if not self.RouteNumberUpdateDelay or self.RouteNumberUpdateDelay and CurTime()-self.RouteNumberUpdateDelay > 0.1 then
|
||||
if self.RouteNumberState >= 0 and self.RouteNumber ~= self.CurrentRouteNumber then
|
||||
self.RouteNumberState = self.RouteNumberState-1
|
||||
Train:PlayOnce("blinker_off"..(self.RouteNumberState%2+1),"bass",0.6+math.random()*0.3,1)
|
||||
|
||||
if self.State > 0 then
|
||||
if self.NewNumberTimer and CurTime()>self.NewNumberTimer then
|
||||
if not self.NumberUpdate then self.NumberUpdate = CurTime()+0.1 end
|
||||
self.NewNumberTimer = nil
|
||||
end
|
||||
if self.RouteNumberState < 42 and self.RouteNumber == self.CurrentRouteNumber then
|
||||
self.RouteNumberState = self.RouteNumberState+1
|
||||
Train:PlayOnce("blinker_on"..(self.RouteNumberState%2+1),"bass",0.6+math.random()*0.3,1)
|
||||
if self.NumberUpdate and CurTime() > self.NumberUpdate then
|
||||
self.NumberUpdate = CurTime()+0.1
|
||||
if self.Number ~= self.NewNumber then
|
||||
self.NumberState = math.max(0,self.NumberState - 1)
|
||||
Train:PlayOnce("blinker_off"..(self.NumberState%2+1),"bass",0.6+math.random()*0.3,1)
|
||||
if self.NumberState == 0 then self.Number = self.NewNumber end
|
||||
elseif self.Number == self.NewNumber then
|
||||
self.NumberState = math.min(42,self.NumberState + 1)
|
||||
Train:PlayOnce("blinker_on"..(self.NumberState%2+1),"bass",0.6+math.random()*0.3,1)
|
||||
if self.NumberState == 42 then self.NewNumber = nil self.NumberUpdate = nil end
|
||||
end
|
||||
end
|
||||
if self.RouteNumberState < 0 and self.RouteNumber ~= self.CurrentRouteNumber then
|
||||
self.RouteNumber = self.CurrentRouteNumber
|
||||
self.RouteNumberState = self.RouteNumberState+1
|
||||
Train:PlayOnce("blinker_on"..(self.RouteNumberState%2+1),"bass",0.6+math.random()*0.3,1)
|
||||
end
|
||||
self.RouteNumberUpdateDelay = CurTime()
|
||||
Train:SetNW2Int("TNM:Number2",self.Number)
|
||||
end
|
||||
Train:SetNW2Int("TNM:NumberState",self.NumberState)
|
||||
Train:SetNW2Int("TNM:Bright",self.NumberUpdate and 0 or self.Brightness)
|
||||
else
|
||||
if self.State ~= 0 then
|
||||
self.BrightTimer = nil
|
||||
self.NewNumber = nil
|
||||
self.NewNumberTimer = nil
|
||||
self.NumberUpdate = nil
|
||||
self.State = 0
|
||||
end
|
||||
end
|
||||
|
||||
Train:SetNW2Bool("RouteNumberWork",Work)
|
||||
Train:SetNW2Int("RouteNumberBright",10)
|
||||
Train:SetNW2Int("RouteNumberState",self.RouteNumberState)
|
||||
Train:SetNW2String("RouteNumberLastStation",Train.SarmatUPO.LastStationName)
|
||||
Train:SetNW2Bool("RouteNumberLastStationWork",Work and Train.SF18.Value > 0 and Train.SarmatUPO.SarmatState > 0)
|
||||
Train:SetNW2Int("RouteNumber",self.RouteNumber)
|
||||
Train:SetNW2Int("RouteNumberSet",self.NextRouteNumber or self.RouteNumber)
|
||||
|
||||
Train:SetNW2Int("TNM:State",self.State)
|
||||
end
|
||||
else
|
||||
function TRAIN_SYSTEM:ClientInitialize()
|
||||
self.CurrentRouteNumber = 0
|
||||
self.RouteNumberState = 42
|
||||
self.RouteNumberNeedUpdate = true
|
||||
self.Work = false
|
||||
self.RouteNumberBright = 0
|
||||
local function createFont(name,font,size)
|
||||
surface.CreateFont("Metrostroi_"..name, {
|
||||
font = font,
|
||||
size = size,
|
||||
weight = 800,
|
||||
blursize = 0,
|
||||
antialias = false,
|
||||
underline = false,
|
||||
italic = false,
|
||||
strikeout = false,
|
||||
symbol = false,
|
||||
rotary = false,
|
||||
shadow = false,
|
||||
additive = false,
|
||||
outline = false,
|
||||
extended = true,
|
||||
})
|
||||
end
|
||||
function TRAIN_SYSTEM:ClientThink()
|
||||
if self.Train:ShouldDrawPanel("RouteNumber") and self.RouteNumberNeedUpdate then
|
||||
render.PushRenderTarget(self.Train.RouteNumber,0,0,256, 128)
|
||||
|
||||
local TNMPixels = surface.GetTextureID("models/metrostroi_train/81-722/screens/sarmat_upo/tnm")
|
||||
|
||||
function TRAIN_SYSTEM:ClientInitialize()
|
||||
self.Brightness = 100
|
||||
self.NumberState = 42
|
||||
self.Number = 61
|
||||
self.NeedUpdate = true
|
||||
end
|
||||
|
||||
function TRAIN_SYSTEM:ClientThink(dT)
|
||||
-- ТНМ-1.02 АВДБ.687240.049-10
|
||||
local Train = self.Train
|
||||
local bright = (4.5-(Train:GetNW2Int("TNM:Bright",1)/100)*math.min(1,Train:GetNW2Int("TNM:State",0))*3.5)
|
||||
local number = Train:GetNW2Int("TNM:Number2",777)
|
||||
local rnState = Train:GetNW2Int("TNM:NumberState",42)
|
||||
if self.Brightness ~= bright then
|
||||
self.Brightness = bright
|
||||
self.NeedUpdate = true
|
||||
end
|
||||
if self.NumberState ~= rnState then
|
||||
self.NumberState = rnState
|
||||
self.NeedUpdate = true
|
||||
end
|
||||
if self.Number ~= number then
|
||||
self.Number = number
|
||||
self.NeedUpdate = true
|
||||
end
|
||||
-- self.NeedUpdate = true
|
||||
if self.NeedUpdate then
|
||||
render.PushRenderTarget(Train.TNMScr,0,0,256,128)
|
||||
render.Clear(0, 0, 0, 0)
|
||||
cam.Start2D()
|
||||
surface.SetDrawColor(0,0,0)
|
||||
--surface.DrawRect(0,0,54,32)
|
||||
self:RouteNumber(self.Train)
|
||||
self:TNM(Train)
|
||||
cam.End2D()
|
||||
render.PopRenderTarget()
|
||||
self.RouteNumberNeedUpdate = false
|
||||
end
|
||||
if self.LastStationNeedUpdate then
|
||||
render.PushRenderTarget(self.Train.LastStation,0,0,512, 64)
|
||||
render.Clear(0, 0, 0, 0)
|
||||
cam.Start2D()
|
||||
surface.SetDrawColor(0,0,0)
|
||||
--surface.DrawRect(0,0,54,32)
|
||||
self:LastStation(self.Train)
|
||||
cam.End2D()
|
||||
render.PopRenderTarget()
|
||||
self.LastStationNeedUpdate = false
|
||||
end
|
||||
local number = self.Train:GetNW2Int("RouteNumber",0)
|
||||
local work = self.Train:GetNW2Bool("RouteNumberWork",false)
|
||||
if not work and self.CurrentRouteNumber == number then
|
||||
if work ~= self.Work then
|
||||
self.RouteNumberBright = 0
|
||||
self.Work = false
|
||||
self.RouteNumberNeedUpdate = true
|
||||
end
|
||||
else
|
||||
local state = self.Train:GetNW2Int("RouteNumberState",0)
|
||||
local bright = self.Train:GetNW2Int("RouteNumberBright",0)
|
||||
if self.RouteNumberState ~= state or self.CurrentRouteNumber ~= number or work ~= self.Work or bright ~= self.RouteNumberBright then
|
||||
self.RouteNumberNeedUpdate = true
|
||||
self.Work = work
|
||||
self.RouteNumberBright = bright
|
||||
self.RouteNumberState = state
|
||||
self.CurrentRouteNumber = number
|
||||
end
|
||||
end
|
||||
local lswork = self.Train:GetNW2Bool("RouteNumberLastStationWork")
|
||||
if not lswork then
|
||||
if lswork ~= self.LastStationWork then
|
||||
self.LastStationWork = false
|
||||
self.LastStationNeedUpdate = true
|
||||
end
|
||||
else
|
||||
local laststation = self.Train:GetNW2String("RouteNumberLastStation","")
|
||||
if self.LastStationName ~= laststation or self.LastStationWork ~= lswork then
|
||||
self.LastStationWork = lswork
|
||||
self.LastStationName = laststation
|
||||
self.LastStationNeedUpdate = true
|
||||
end
|
||||
self.NeedUpdate = false
|
||||
end
|
||||
end
|
||||
|
||||
local numbers = {
|
||||
["0"] = {"0111110","1111111","1100011","1100011","1100011","1100011","1100011","1100011","1100011","1100011","1100011","1100011","1111111","0111110",},
|
||||
["1"] = {"0001100","0011100","0111100","0001100","0001100","0001100","0001100","0001100","0001100","0001100","0001100","0001100","0111111","0111111",},
|
||||
["2"] = {"0222220","2222222","2200022","0000022","0000022","0000022","0000220","0002200","0022000","0220000","2200000","2200000","2222222","2222222",},
|
||||
["3"] = {"0333330","3333333","3300033","0000033","0000033","0000033","0033330","0033330","0000033","0000033","0000033","3300033","3333333","0333330",},
|
||||
["4"] = {"4400044","4400044","4400044","4400044","4400044","4400044","4400044","4444444","4444444","0000044","0000044","0000044","0000044","0000044",},
|
||||
["5"] = {"5555555","5555555","5500000","5500000","5500000","5500000","5555550","5555555","0000055","0000055","0000055","5500055","5555555","0555550",},
|
||||
["6"] = {"0666660","6666666","6600066","6600000","6600000","6600000","6666660","6666666","6600066","6600066","6600066","6600066","6666666","0666660",},
|
||||
["7"] = {"7777777","7777777","7700077","0000077","0000770","0007700","0077000","0770000","7700000","7700000","7700000","7700000","7700000","7700000",},
|
||||
["8"] = {"0888880","8888888","8800088","8800088","8800088","8800088","0888880","0888888","8800088","8800088","8800088","8800088","8888888","0888880",},
|
||||
["9"] = {"0999990","9999999","9900099","9900099","9900099","9900099","9999999","0999999","0000099","0000099","0000099","9900099","9999999","0999990",},
|
||||
[0] = {0x3E,0x7F,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x7F,0x3E},
|
||||
[1] = {0x0C,0x1C,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3F,0x3F},
|
||||
[2] = {0x3E,0x7F,0x63,0x03,0x03,0x03,0x06,0x0C,0x18,0x30,0x60,0x60,0x7F,0x7F},
|
||||
[3] = {0x3E,0x7F,0x63,0x03,0x03,0x03,0x1E,0x1E,0x03,0x03,0x03,0x63,0x7F,0x3E},
|
||||
[4] = {0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x7F,0x7F,0x03,0x03,0x03,0x03,0x03},
|
||||
[5] = {0x7F,0x7F,0x60,0x60,0x60,0x60,0x7E,0x7F,0x03,0x03,0x03,0x63,0x7F,0x3E},
|
||||
[6] = {0x3E,0x7F,0x63,0x60,0x60,0x60,0x7E,0x7F,0x63,0x63,0x63,0x63,0x7F,0x3E},
|
||||
[7] = {0x7F,0x7F,0x63,0x03,0x03,0x06,0x0C,0x18,0x30,0x60,0x60,0x60,0x60,0x60},
|
||||
[8] = {0x3E,0x7F,0x63,0x63,0x63,0x63,0x3E,0x3E,0x63,0x63,0x63,0x63,0x7F,0x3E},
|
||||
[9] = {0x3E,0x7F,0x63,0x63,0x63,0x63,0x7F,0x3F,0x03,0x03,0x03,0x63,0x7F,0x3E},
|
||||
}
|
||||
TRAIN_SYSTEM.RouteNumberFont = {}
|
||||
for i,num in pairs(numbers) do
|
||||
if not TRAIN_SYSTEM.RouteNumberFont[i] then TRAIN_SYSTEM.RouteNumberFont[i] = {} end
|
||||
local numtbl = TRAIN_SYSTEM.RouteNumberFont[i]
|
||||
for ir,row in pairs(num) do
|
||||
if not numtbl[ir] then numtbl[ir] = {} end
|
||||
local rowtbl = numtbl[ir]
|
||||
for ic=1,#row do
|
||||
rowtbl[ic] = (row[ic] ~= "0")
|
||||
TRAIN_SYSTEM.TNMFont = {}
|
||||
for i=0,9 do
|
||||
TRAIN_SYSTEM.TNMFont[i] = {}
|
||||
for iy=0,13 do
|
||||
TRAIN_SYSTEM.TNMFont[i][iy] = {}
|
||||
for ix=0,6 do
|
||||
TRAIN_SYSTEM.TNMFont[i][iy][ix] = bit.band(bit.rshift(numbers[i][iy+1],6-ix),1) > 0
|
||||
end
|
||||
end
|
||||
end
|
||||
function TRAIN_SYSTEM:LastStation(Train)
|
||||
if self.LastStationWork then
|
||||
draw.SimpleText(self.LastStationName,"Metrostroi_722LastStation",256, 24,Color(255,100,60),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||||
end
|
||||
end
|
||||
function TRAIN_SYSTEM:RouteNumber(Train)
|
||||
local bright = (5-self.RouteNumberBright*0.4)
|
||||
if self.RouteNumberState < 42 or not self.Work then bright = 5 end
|
||||
surface.SetDrawColor(150,255,50,255)
|
||||
surface.SetDrawColor(150/bright,255/bright,50/bright,255)
|
||||
--surface.SetDrawColor(150,220,50,255)
|
||||
local num = Format("%03d",self.CurrentRouteNumber)
|
||||
--print(self.RouteNumberState,math.ceil(self.RouteNumberState/2),self.CurrentRouteNumber,num,type(num),bright)
|
||||
local rnstate = math.ceil(self.RouteNumberState/2)*2
|
||||
local rnstate2 = math.floor(self.RouteNumberState/2)*2
|
||||
local half = self.RouteNumberState ~= rnstate
|
||||
for i=1,3 do
|
||||
local rnstate = math.ceil((self.RouteNumberState-(i-1)*14)/2)*2
|
||||
local rnstate2 = math.floor((self.RouteNumberState-(i-1)*14)/2)*2
|
||||
local number = self.RouteNumberFont[num[i]]
|
||||
if number then
|
||||
--print(number)
|
||||
for x=0,6 do
|
||||
for y=0,13 do
|
||||
if number[y+1][x+1] and ((14-rnstate2) <= y or ((14-rnstate) <= y and (x%2 > 0 and y%2 == 0 or x%2 == 0 and y%2 > 0))) then
|
||||
surface.DrawRect((i-1)*64+x*8,1+y*8,7,7)
|
||||
end
|
||||
function TRAIN_SYSTEM:TNM(Train)
|
||||
local rNum = self.Number
|
||||
local bright = self.Brightness
|
||||
local tnmState = self.NumberState
|
||||
|
||||
for i=0,2 do
|
||||
local rnstate = math.ceil((tnmState-i*14)/2)*2
|
||||
local rnstate2 = math.floor((tnmState-i*14)/2)*2
|
||||
local rNum = math.floor(rNum/10^(2-i))%10
|
||||
for ix=0,6 do
|
||||
for iy=0,13 do
|
||||
if self.TNMFont[rNum][iy][ix] and ((14-rnstate2) <= iy or ((14-rnstate) <= iy and (ix%2 > 0 and iy%2 == 0 or ix%2 == 0 and iy%2 > 0))) then
|
||||
surface.SetDrawColor(150/bright,255/bright,50/bright)
|
||||
else
|
||||
surface.SetDrawColor(0,0,0,120)
|
||||
end
|
||||
surface.DrawRect(2+ix*8+i*72,2+iy*8,7,7)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Pixels mask
|
||||
render.OverrideBlend(true,BLEND_ZERO,BLEND_ONE,BLENDFUNC_MIN)
|
||||
surface.SetDrawColor(255,255,255)
|
||||
surface.SetTexture(TNMPixels)
|
||||
surface.DrawTexturedRectRotated(130,66,256,128,0)
|
||||
render.OverrideBlend(false)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user