1
0
mirror of https://github.com/metrostroi-repo/MetrostroiAddon.git synced 2026-05-02 00:42:29 +00:00
Files
MetrostroiAddon/lua/metrostroi/systems/sys_81_722_tickers.lua
kosmik641 9248e1f56b 81-722.
Переименование систем ЦИКа на реальные
2025-05-30 12:57:25 +03:00

177 lines
7.8 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
--------------------------------------------------------------------------------
-- 81-722 BIT-20 system
--------------------------------------------------------------------------------
-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o.
-- Contains proprietary code. See license.txt for additional information.
--------------------------------------------------------------------------------
Metrostroi.DefineSystem("81_722_BIT")
TRAIN_SYSTEM.DontAccelerateSimulation = true
function TRAIN_SYSTEM:Initialize()
end
function TRAIN_SYSTEM:Outputs()
return {}
end
function TRAIN_SYSTEM:Inputs()
return {}
end
if TURBOSTROI then return end
function TRAIN_SYSTEM:TriggerInput(name,value)
end
if SERVER then
function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata)
if textdata=="Arrived" then
if self.Arrived ~= numdata then
self.TimerRand = math.Rand(-10,10)
self.Arrived = numdata
end
else
self[textdata]=numdata
end
end
function TRAIN_SYSTEM:Think(dT)
local Train = self.Train
local Power = Train.Panel.PassSchemePowerL>0 and Train.Panel.PassSchemePowerR>0
if Power then
if not self.TimerRand then self.TimerRand = math.Rand(-10,10) end
Train:SetNW2Int("TickersRandom",self.TimerRand*10)
Train:SetNW2String("TickersPrev",self.Prev or "")
Train:SetNW2String("TickersPrevEn",self.PrevEn or "")
Train:SetNW2String("TickersNext",self.Next or "")
Train:SetNW2Bool("TickersNextRight",self.NextRight)
Train:SetNW2String("TickersNextEn",self.NextEn or "")
Train:SetNW2String("TickersCurr",self.Curr or "")
Train:SetNW2String("TickersCurrEn",self.CurrEn or "")
Train:SetNW2Bool("TickersCurrRight",self.CurrRight)
Train:SetNW2Bool("TickersArrived",self.Arrived or "")
Train:SetNW2Bool("TickersLast",self.Last)
Train:SetNW2Bool("TickersClosing",self.Closing)
Train:SetNW2String("TickersSpecial",self.Special or "")
elseif self.TimerRand then
self.TimerRand = nil
end
Train:SetNW2Bool("TickersPower",Power)
end
else
local function createFont(name,font,size,weight)
surface.CreateFont("Metrostroi_"..name, {
font = font,
size = size,
weight = weight or 400,
blursize = 0,
antialias = true,
underline = false,
italic = false,
strikeout = false,
symbol = false,
rotary = false,
shadow = false,
additive = false,
outline = false,
extended = true,
})
end
--createFont("BUKPSpeed","Eurostar Metrostroi",80)
--createFont("Arial15","Arial",15,800)
--createFont("Arial20","Arial",20,800)
--createFont("Arial22","Arial",22,400)
--createFont("Arial40","Arial",30,400)
createFont("TNR30","Times new roman",30,400)
createFont("TNR60","Times new roman",60,400)
function TRAIN_SYSTEM:ClientInitialize()
self.TimerCorrection = 0
end
function TRAIN_SYSTEM:ClientThink()
if not self.Train:ShouldDrawPanel("Tickers") then return end
local train = self.Train
render.PushRenderTarget(self.Train.Tickers,0,0,1024, 128)
render.Clear(0, 0, 0, 0)
cam.Start2D()
surface.SetDrawColor(0,0,0)
surface.DrawRect(0,0,600,128)
self:Tickers(self.Train)
cam.End2D()
render.PopRenderTarget()
end
--SarmatCam2T
function TRAIN_SYSTEM:Tickers(Train)
surface.SetDrawColor(0,0,0,80)
surface.DrawRect(0,0,600,128)
local state = Train:GetNW2Bool("TickersPower",false)
if state then
local arr = Train:GetNW2Bool("TickersArrived")
local last = Train:GetNW2Bool("TickersLast")
local closing = Train:GetNW2Bool("TickersClosing")
local nxt,nxtEn,nxtR = Train:GetNW2String("TickersNext",""),Train:GetNW2String("TickersNextEn",""),Train:GetNW2Bool("TickersNextRight")
local prev = Train:GetNW2String("TickersPrev",""),Train:GetNW2String("TickersPrevEn","")
local curr,currEn,currR = Train:GetNW2String("TickersCurr",""),Train:GetNW2String("TickersCurrEn",""),Train:GetNW2Bool("TickersCurrRight")
local special = Train:GetNW2String("TickersSpecial","")
local str = ""
if (arr or closing) and last then
str = Format("Поезд прибыл\nна конечную станцию\n%s",curr or "...")
if currR then str = str..",\nвыход на правую сторону" end
if currEn~="" then
str=str..Format("\nTrain arrived\nto last station\n%s",currEn)
if currR then str = str..",\nexit to the right side" end
end
elseif arr then
str = curr or "..."
if currR then str = str..",\nвыход на правую сторону" end
if currEn~="" then
str = str.."\n%y"..currEn.." station"
if currR then str = str..",\nexit to the right side" end
end
str = str..Format("\nСледующая станция\n%s",nxt)
if nxtR then str = str..",\nвыход на правую сторону" end
if special~="" then
if special:sub(1,2) == "%c" then str = str.."," end
str = str.."\n"..special
end
if nxtEn~="" then
str = str..Format("\n%%yNext station is\n%s",nxtEn)
if nxtR then str = str..",\nexit to the right side" end
end
elseif not arr and (self.Closing or closing) then
str = Format("%%rДвери закрываются\n%%yСледующая станция\n%s",nxt)
if nxtR then str = str..",\nвыход на правую сторону" end
if nxtEn~="" then
str = str..Format("\nNext station is\n%s",nxtEn)
if nxtR then str = str..",\nexit to the right side" end
end
if special~="" then
str = str.."\n"..special
end
else
str = "."
end
local tbl = string.Explode("\n",str)
local otime = CurTime()+Train:GetNW2Int("TickersRandom",0)/10
if self.OldArr ~= arr then
self.OldArr = arr
self.TimerCorrection = -otime
end
local ctime = otime+self.TimerCorrection
local time = math.floor(ctime%(#tbl*3)/3)+1
if not self.Closing and closing and time>1 then self.Closing = true end
if time==1 and not closing and self.Closing then
self.Closing = false
end
local message = tbl[time]
if message:find("%%y") or time==1 then self.Color = nil end
if message:find("%%r") then self.Color = Color(220,65,85) end
if message:find("%%g") then self.Color = Color(50,120,80) end
draw.SimpleText(message:gsub("%%[rgyc]",""),"Metrostroi_TNR60",300,64, self.Color or Color(245,235,170),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
--local prevStation = stbl[line][path and st+1 or st-1]
if arr and prev~="" then draw.SimpleText("< "..prev,"Metrostroi_TNR30",10,16, Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
--local nextStation = stbl[line][path and st-1 or st+1]
if nxt~="" then draw.SimpleText(nxt.." >","Metrostroi_TNR30",586,16, Color(200,200,200),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) end
end
end
end