diff --git a/lua/entities/gmod_track_signal/cl_init.lua b/lua/entities/gmod_track_signal/cl_init.lua index 5054e23..fc0d168 100644 --- a/lua/entities/gmod_track_signal/cl_init.lua +++ b/lua/entities/gmod_track_signal/cl_init.lua @@ -198,14 +198,30 @@ net.Receive("metrostroi-signal", function() if ent.RemoveModels then ent:RemoveModels() end end) +local C_RenderDistance = GetConVar("metrostroi_signal_distance") + +local timer = CurTime() +hook.Add("Think","MetrostroiRenderSignals", function() + if CurTime() - timer < 1.5 or not IsValid(LocalPlayer()) then return end + timer = CurTime() + local plyPos = LocalPlayer():GetPos() + local dist = C_RenderDistance:GetInt() + for _,sig in pairs(ents.FindByClass("gmod_track_signal")) do + if not IsValid(sig) then continue end + local sigPos = sig:GetPos() + sig.RenderDisable = sigPos:Distance(plyPos) > dist or math.abs(plyPos.z - sigPos.z) > 1500 + end +end) + + function ENT:Think() local CurTime = CurTime() self:SetNextClientThink(CurTime + 0.0333) self.PrevTime = self.PrevTime or RealTime() self.DeltaTime = (RealTime() - self.PrevTime) self.PrevTime = RealTime() - if self:IsDormant() or Metrostroi and Metrostroi.ReloadClientside then - if not self.ReloadModels and self.ModelsCreated then + if (self:IsDormant() or Metrostroi and Metrostroi.ReloadClientside or self.RenderDisable) and not self.ReloadModels then + if self.ModelsCreated then self:RemoveModels() end return true diff --git a/lua/metrostroi/cl_cpanel.lua b/lua/metrostroi/cl_cpanel.lua index 0a4e346..9c53615 100644 --- a/lua/metrostroi/cl_cpanel.lua +++ b/lua/metrostroi/cl_cpanel.lua @@ -42,6 +42,7 @@ local function ClientPanel(panel) panel:NumSlider(Metrostroi.GetPhrase("Panel.FOV"),"metrostroi_cabfov",65,100) panel:NumSlider(Metrostroi.GetPhrase("Panel.Z"),"metrostroi_cabz",-10,10) panel:NumSlider(Metrostroi.GetPhrase("Panel.RenderDistance"),"metrostroi_renderdistance",960,3072) + panel:NumSlider(Metrostroi.GetPhrase("Panel.RenderSignals"),"metrostroi_signal_distance",6144,16384) panel:Button(Metrostroi.GetPhrase("Panel.ReloadClient"),"metrostroi_reload_client",true) function DRouteNumber:OnChange() diff --git a/lua/metrostroi/convars.lua b/lua/metrostroi/convars.lua index 55dd6ea..3cc2750 100644 --- a/lua/metrostroi/convars.lua +++ b/lua/metrostroi/convars.lua @@ -101,6 +101,7 @@ CreateClientConVar("metrostroi_debugger_data_timeout",2,true,false) CreateClientConVar("metrostroi_disablehud",0,true) CreateClientConVar("metrostroi_renderdistance",1024,true) +CreateClientConVar("metrostroi_signal_distance",8192,true) CreateClientConVar("metrostroi_screenshotmode",0,true) CreateClientConVar("metrostroi_disableseatshadows",0,true) CreateClientConVar("metrostroi_softdrawmultipier",100,true) diff --git a/lua/metrostroi_data/languages/cz_base.lua b/lua/metrostroi_data/languages/cz_base.lua index 3dc9b0d..4536e64 100644 --- a/lua/metrostroi_data/languages/cz_base.lua +++ b/lua/metrostroi_data/languages/cz_base.lua @@ -43,6 +43,7 @@ Panel.RouteNumber = Route number #NEW Panel.FOV = FOV Panel.Z = Výška kamery Panel.RenderDistance = Vykreslovací\nvzdálenost +Panel.RenderSignals = Traced signals #NEW #FIXME Panel.ReloadClient = Znovu načíst klienta Panel.ClientAdvanced = Klient (pokročilý) diff --git a/lua/metrostroi_data/languages/de_base.lua b/lua/metrostroi_data/languages/de_base.lua index f68c9f5..e99eb7d 100644 --- a/lua/metrostroi_data/languages/de_base.lua +++ b/lua/metrostroi_data/languages/de_base.lua @@ -43,6 +43,7 @@ Panel.RouteNumber = Route number #NEW Panel.FOV = Sichtfeld Panel.Z = Camera height #NEW Panel.RenderDistance = Render distanz +Panel.RenderSignals = Traced signals #NEW #FIXME Panel.ReloadClient = Clientseitig neuladen Panel.ClientAdvanced = Client (Fortgeschritten) diff --git a/lua/metrostroi_data/languages/en_base.lua b/lua/metrostroi_data/languages/en_base.lua index 3209919..9e7d144 100644 --- a/lua/metrostroi_data/languages/en_base.lua +++ b/lua/metrostroi_data/languages/en_base.lua @@ -52,6 +52,7 @@ Panel.RouteNumber = Route number #NEW Panel.FOV = FOV Panel.Z = Camera height #NEW Panel.RenderDistance = Render distance +Panel.RenderSignals = Traced signals #NEW #FIXME Panel.ReloadClient = Reload client side Panel.ClientAdvanced = Client (advanced) diff --git a/lua/metrostroi_data/languages/fr_base.lua b/lua/metrostroi_data/languages/fr_base.lua index 5e807b5..ee32dce 100644 --- a/lua/metrostroi_data/languages/fr_base.lua +++ b/lua/metrostroi_data/languages/fr_base.lua @@ -43,6 +43,7 @@ Panel.RouteNumber = Route number #NEW Panel.FOV = Champ de vision (FOV) Panel.Z = Hauteur de caméra Panel.RenderDistance = Rendu à distance +Panel.RenderSignals = Traced signals #NEW #FIXME Panel.ReloadClient = Redémarrer le client Panel.ClientAdvanced = Client (avancé) diff --git a/lua/metrostroi_data/languages/hu_base.lua b/lua/metrostroi_data/languages/hu_base.lua index 57483e2..fe4fa74 100644 --- a/lua/metrostroi_data/languages/hu_base.lua +++ b/lua/metrostroi_data/languages/hu_base.lua @@ -41,6 +41,7 @@ Panel.MinimizedShow = Ne töltse be az elemeket, \nha a program tálcán van Panel.FOV = FOV Panel.Z = Kamera magassága Panel.RenderDistance = Renderelési távolság +Panel.RenderSignals = Traced signals #NEW #FIXME Panel.ReloadClient = Kliens oldal újraindítása Panel.ClientAdvanced = Kliens (haladó) diff --git a/lua/metrostroi_data/languages/it_base.lua b/lua/metrostroi_data/languages/it_base.lua index 649addd..690f6c0 100644 --- a/lua/metrostroi_data/languages/it_base.lua +++ b/lua/metrostroi_data/languages/it_base.lua @@ -40,6 +40,7 @@ Panel.MinimizedShow = Non scaricare nessun elemento\nwhen minimizzato Panel.FOV = FOV Panel.Z = Altezza della videocamera Panel.RenderDistance = Distanza di rendering +Panel.RenderSignals = Traced signals #NEW #FIXME Panel.ReloadClient = Ricarica lato utente Panel.ClientAdvanced = Utente (Avanzato) diff --git a/lua/metrostroi_data/languages/kr_base.lua b/lua/metrostroi_data/languages/kr_base.lua index b4ef9f0..4d32964 100644 --- a/lua/metrostroi_data/languages/kr_base.lua +++ b/lua/metrostroi_data/languages/kr_base.lua @@ -41,6 +41,7 @@ Panel.MinimizedShow = 창 최소화시 구성요소 언로드 하지 않기 Panel.FOV = 시야각(FOV) Panel.Z = 시점 높이 Panel.RenderDistance = 렌더링 거리 +Panel.RenderSignals = Traced signals #NEW #FIXME Panel.ReloadClient = 사용자 시스템 다시 불러오기 Panel.ClientAdvanced = 사용자 (고급설정) diff --git a/lua/metrostroi_data/languages/pl_base.lua b/lua/metrostroi_data/languages/pl_base.lua index 5a05e53..4b7d0ff 100644 --- a/lua/metrostroi_data/languages/pl_base.lua +++ b/lua/metrostroi_data/languages/pl_base.lua @@ -43,6 +43,7 @@ Panel.RouteNumber = Route number #NEW Panel.FOV = FOV (pole widzenia) Panel.Z = Camera height #NEW Panel.RenderDistance = Odległość rysowania +Panel.RenderSignals = Traced signals #NEW #FIXME Panel.ReloadClient = Przeładuj zasoby (klient) Panel.ClientAdvanced = Klient (zaawansowane) diff --git a/lua/metrostroi_data/languages/ru_base.lua b/lua/metrostroi_data/languages/ru_base.lua index 814b63f..05d0c07 100644 --- a/lua/metrostroi_data/languages/ru_base.lua +++ b/lua/metrostroi_data/languages/ru_base.lua @@ -52,6 +52,7 @@ Panel.RouteNumber = Номер маршрута Panel.FOV = Поле зрения Panel.Z = Высота камеры Panel.RenderDistance = Дальность прорисовки +Panel.RenderSignals = Прорисовка светофоров Panel.ReloadClient = Перезагрузить клиентскую часть Panel.ClientAdvanced = Клиент (дополнительно)