init commit
This commit is contained in:
100
lua/squad_menu/client/vgui/member_status.lua
Normal file
100
lua/squad_menu/client/vgui/member_status.lua
Normal file
@@ -0,0 +1,100 @@
|
||||
local IsValid = IsValid
|
||||
local Clamp = math.Clamp
|
||||
local RealTime = RealTime
|
||||
local FrameTime = FrameTime
|
||||
local Approach = math.Approach
|
||||
|
||||
local SetColor = surface.SetDrawColor
|
||||
local SetMaterial = surface.SetMaterial
|
||||
local DrawOutlinedText = draw.SimpleTextOutlined
|
||||
local DrawTexturedRect = surface.DrawTexturedRect
|
||||
local DrawRect = surface.DrawRect
|
||||
|
||||
local DrawHealthBar = SquadMenu.DrawHealthBar
|
||||
local matGradient = Material( "vgui/gradient-r" )
|
||||
|
||||
local COLORS = {
|
||||
WHITE = Color( 255, 255, 255, 255 ),
|
||||
LOW_HEALTH = Color( 250, 20, 20, 255 ),
|
||||
OUTLINE = Color( 0, 0, 0, 255 )
|
||||
}
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
self.avatar = vgui.Create( "AvatarImage", self )
|
||||
self:InvalidateLayout()
|
||||
self:SetPlayer()
|
||||
end
|
||||
|
||||
function PANEL:SetPlayer( id, name, squad )
|
||||
self.squad = squad
|
||||
self.playerId = id
|
||||
self.validateTimer = 0
|
||||
|
||||
self.name = SquadMenu.ValidateString( name, "", 20 )
|
||||
self.health = 1
|
||||
self.armor = 0
|
||||
self.alive = true
|
||||
|
||||
self.healthAnim = 0
|
||||
self.armorAnim = 0
|
||||
end
|
||||
|
||||
function PANEL:Think()
|
||||
if IsValid( self.ply ) then
|
||||
self.health = Clamp( self.ply:Health() / 100, 0, 1 )
|
||||
self.armor = Clamp( self.ply:Armor() / 100, 0, 1 )
|
||||
self.alive = self.ply:Alive()
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- Keep trying to get the player entity periodically
|
||||
if RealTime() < self.validateTimer then return end
|
||||
|
||||
self.validateTimer = RealTime() + 1
|
||||
|
||||
local ply = SquadMenu.FindPlayerById( self.playerId )
|
||||
|
||||
if ply then
|
||||
self.ply = ply
|
||||
self.name = SquadMenu.ValidateString( ply:Nick(), "", 20 )
|
||||
self.avatar:SetPlayer( ply, 64 )
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:Paint( w, h )
|
||||
local split = h
|
||||
|
||||
if self.squad then
|
||||
SetColor( self.squad.color:Unpack() )
|
||||
DrawRect( w - split, 0, split, h )
|
||||
end
|
||||
|
||||
SetColor( 0, 0, 0, 240 )
|
||||
SetMaterial( matGradient )
|
||||
DrawTexturedRect( 0, 0, w - split, h )
|
||||
|
||||
local dt = FrameTime()
|
||||
|
||||
self.healthAnim = Approach( self.healthAnim, self.health, dt * 2 )
|
||||
self.armorAnim = Approach( self.armorAnim, self.armor, dt )
|
||||
|
||||
if self.alive then
|
||||
local barH = h * 0.2
|
||||
DrawHealthBar( 2, h - barH - 5, w - split - 6, barH, self.healthAnim, self.armorAnim )
|
||||
end
|
||||
|
||||
DrawOutlinedText( self.name, "SquadMenuInfo", 2, 2 + h * 0.5,
|
||||
self.alive and COLORS.WHITE or COLORS.LOW_HEALTH, 0, self.alive and 4 or 1, 1, COLORS.OUTLINE )
|
||||
end
|
||||
|
||||
function PANEL:PerformLayout( w, h )
|
||||
local size = h - 4
|
||||
|
||||
self.avatar:SetSize( size, size )
|
||||
self.avatar:SetPos( w - size - 2, 2 )
|
||||
end
|
||||
|
||||
vgui.Register( "Squad_MemberInfo", PANEL, "DPanel" )
|
||||
Reference in New Issue
Block a user