diff --git a/lua/entities/gmod_subway_81-722/cl_init.lua b/lua/entities/gmod_subway_81-722/cl_init.lua index fa54317..6098b89 100644 --- a/lua/entities/gmod_subway_81-722/cl_init.lua +++ b/lua/entities/gmod_subway_81-722/cl_init.lua @@ -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) diff --git a/lua/entities/gmod_subway_81-722/init.lua b/lua/entities/gmod_subway_81-722/init.lua index 10c7790..62e5b24 100644 --- a/lua/entities/gmod_subway_81-722/init.lua +++ b/lua/entities/gmod_subway_81-722/init.lua @@ -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 diff --git a/lua/entities/gmod_subway_81-722/shared.lua b/lua/entities/gmod_subway_81-722/shared.lua index 1d6f153..4f23225 100644 --- a/lua/entities/gmod_subway_81-722/shared.lua +++ b/lua/entities/gmod_subway_81-722/shared.lua @@ -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") diff --git a/lua/metrostroi/systems/sys_81_722_routenumber.lua b/lua/metrostroi/systems/sys_81_722_routenumber.lua index 63ab6d0..1abfdf2 100644 --- a/lua/metrostroi/systems/sys_81_722_routenumber.lua +++ b/lua/metrostroi/systems/sys_81_722_routenumber.lua @@ -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