init commit

This commit is contained in:
2025-05-31 10:13:27 +02:00
parent 3da26f025c
commit ada9afc48d
30 changed files with 3955 additions and 16 deletions

View 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" )