zombiesurvival-evolved/gamemodes/zombiesurvival/gamemode/vgui/dpingmeter.lua
2014-10-01 20:49:54 -04:00

81 lines
1.6 KiB
Lua

local PANEL = {}
PANEL.IdealPing = 50
PANEL.MaxPing = 400
PANEL.RefreshTime = 1
PANEL.PingBars = 4
PANEL.m_Player = NULL
PANEL.m_Ping = 0
PANEL.NextRefresh = 0
function PANEL:Init()
end
local colPing = Color(255, 255, 60, 255)
function PANEL:Paint()
local ping = self:GetPing()
local pingmul = 1 - math.Clamp((ping - self.IdealPing) / self.MaxPing, 0, 1)
local wid, hei = self:GetWide(), self:GetTall()
local pingbars = math.max(1, self.PingBars)
local barwidth = wid / pingbars
local baseheight = hei / pingbars
colPing.r = (1 - pingmul) * 255
colPing.g = pingmul * 255
for i=1, pingbars do
local barheight = baseheight * i
local x, y = (i - 1) * barwidth, hei - barheight
surface.SetDrawColor(20, 20, 20, 255)
surface.DrawRect(x, y, barwidth, barheight)
if i == 1 or pingmul >= i / pingbars then
surface.SetDrawColor(colPing)
surface.DrawRect(x, y, barwidth, barheight)
end
surface.SetDrawColor(80, 80, 80, 255)
surface.DrawOutlinedRect(x, y, barwidth, barheight)
end
draw.SimpleText(ping, "DefaultFontSmall", 0, 0, colPing)
return true
end
function PANEL:Refresh()
local pl = self:GetPlayer()
if pl:IsValid() then
self:SetPing(pl:Ping())
else
self:SetPing(0)
end
end
function PANEL:Think()
if RealTime() >= self.NextRefresh then
self.NextRefresh = RealTime() + self.RefreshTime
self:Refresh()
end
end
function PANEL:SetPlayer(pl)
self.m_Player = pl or NULL
self:Refresh()
end
function PANEL:GetPlayer()
return self.m_Player
end
function PANEL:SetPing(ping)
self.m_Ping = ping
end
function PANEL:GetPing()
return self.m_Ping
end
vgui.Register("DPingMeter", PANEL, "Panel")