@ -20,38 +20,82 @@ local radius = 1.05 * scale
local padding = 5 * scale
local sw , sh = ScrW ( ) , ScrH ( )
local client = LocalPlayer ( )
local function SetAlpha ( color , alpha )
return Color ( color.r , color.g , color.b , alpha )
end
local function renderStatHUD ( )
local hp = client : Health ( )
local lasthp = hp
local maxhp = client : GetMaxHealth ( )
-- Health border
surface.SetDrawColor ( 0 , 0 , 0 , 200 )
surface.DrawRect ( sw / 2 - barW / 2 , sh * 0.9 , barW , barH )
-- Health bar
surface.SetDrawColor ( 168 , 62 , 50 , 255 )
surface.DrawRect ( ( sw / 2 - barW / 2 ) + padding / 2 , ( sh * 0.9 ) + padding / 2 , math.Clamp ( ( barW - padding ) * hp / maxhp , 0 , barW - padding ) , barH - padding )
-- Health Text
surface.SetFont ( " q_HUD " )
surface.SetTextColor ( 255 , 255 , 255 , 255 )
local hptxt = tostring ( 100 * ( hp / maxhp ) .. " % " )
local txtW , txtH = surface.GetTextSize ( hptxt )
surface.SetTextPos ( ( ( sw / 2 - txtW / 2 ) + padding / 2 ) , ( ( sh * 0.9 - txtH / 3 ) ) )
surface.DrawText ( hptxt )
-- Crosshair
if ( Quantum.Client . ShowCrosshair ) then
surface.SetDrawColor ( 255 , 255 , 255 , 200 )
surface.DrawRect ( sw / 2 - radius , sh / 2 - radius , radius * 2 , radius * 2 )
end
end
local function renderItemInfoHUD ( )
local trace = client : GetEyeTraceNoCursor ( )
if ( trace.Entity : GetClass ( ) == " q_item " ) then
local distance = client : GetPos ( ) : Distance ( trace.Entity : GetPos ( ) )
local distFrac = Lerp ( distance / Quantum.ItemInfoDisplayMaxDistance , 1 , 0 )
if ( distance <= Quantum.ItemInfoDisplayMaxDistance ) then
local item = Quantum.Item . Get ( trace.Entity : GetNWString ( " q_item_id " ) ) || { name = " ERROR " }
local amount = trace.Entity : GetNWInt ( " q_item_amount " ) || 1
local pos = trace.Entity : GetPos ( )
pos.z = pos.z + 20
local screenPos = pos : ToScreen ( )
local txtPadding = 20 * scale
local itemAmountTxt = " "
if ( amount > 1 ) then itemAmountTxt = amount .. " x " end
local alphaFrac = distFrac
draw.SimpleText ( itemAmountTxt .. item.name , " q_item_hud_title " , screenPos.x , screenPos.y , SetAlpha ( item.rarity . color , 255 * alphaFrac ) , TEXT_ALIGN_CENTER , TEXT_ALIGN_CENTER )
draw.SimpleText ( " Rarity: " .. item.rarity . txt , " q_item_hud_rarity " , screenPos.x , screenPos.y + txtPadding , SetAlpha ( item.rarity . color , 255 * alphaFrac ) , TEXT_ALIGN_CENTER , TEXT_ALIGN_CENTER )
if ( item.soulbound ) then
draw.SimpleText ( " Soulbound " , " q_item_hud_soulbound " , screenPos.x , screenPos.y + txtPadding * 2 , Color ( 235 , 64 , 52 , 255 * alphaFrac ) , TEXT_ALIGN_CENTER , TEXT_ALIGN_CENTER )
end
end
end
end
function GM : HUDPaint ( )
if ( ! Quantum.Client . IsInMenu ) then
local hp = LocalPlayer ( ) : Health ( )
local lasthp = hp
local maxhp = LocalPlayer ( ) : GetMaxHealth ( )
if ( ! client : Alive ( ) ) then
surface.SetDrawColor ( 0 , 0 , 0 , 255 )
surface.DrawRect ( 0 , 0 , sw , sh )
end
if ( Quantum.Client . Config.EnableHUD ) then
if ( ! LocalPlayer ( ) : Alive ( ) ) then
surface.SetDrawColor ( 0 , 0 , 0 , 255 )
surface.DrawRect ( 0 , 0 , sw , sh )
else
-- Health border
surface.SetDrawColor ( 0 , 0 , 0 , 200 )
surface.DrawRect ( sw / 2 - barW / 2 , sh * 0.9 , barW , barH )
-- Health bar
surface.SetDrawColor ( 168 , 62 , 50 , 255 )
surface.DrawRect ( ( sw / 2 - barW / 2 ) + padding / 2 , ( sh * 0.9 ) + padding / 2 , math.Clamp ( ( barW - padding ) * hp / maxhp , 0 , barW - padding ) , barH - padding )
-- Health Text
surface.SetFont ( " q_HUD " )
surface.SetTextColor ( 255 , 255 , 255 , 255 )
local hptxt = tostring ( 100 * ( hp / maxhp ) .. " % " )
local txtW , txtH = surface.GetTextSize ( hptxt )
surface.SetTextPos ( ( ( sw / 2 - txtW / 2 ) + padding / 2 ) , ( ( sh * 0.9 - txtH / 3 ) ) )
surface.DrawText ( hptxt )
-- Crosshair
if ( Quantum.Client . ShowCrosshair ) then
surface.SetDrawColor ( 255 , 255 , 255 , 200 )
surface.DrawRect ( sw / 2 - radius , sh / 2 - radius , radius * 2 , radius * 2 )
end
if ( client : Alive ( ) ) then
renderStatHUD ( )
renderItemInfoHUD ( )
end
end
end