Files
bladwin-RP/lua/bladw_hud/client/cl_hud.lua
T
2026-06-23 11:41:04 +02:00

150 lines
4.8 KiB
Lua

local function RX(x) return x * (ScrW() / 1920) end
local function RY(y) return y * (ScrH() / 1080) end
function DrawDisc(x, y, iRadius, iProgress, iOffset)
iX = iX or 0
iY = iY or 0
iOffset = iOffset or 0
iRadius = iRadius or 25
iProgress = iProgress or 360
local tDisc = {
{ x = x, y = y }
}
for i = 0, iProgress do
local iRad = math.rad(-i + iOffset)
table.insert(tDisc, { x = x + math.sin(iRad) * iRadius, y = y + math.cos(iRad) * iRadius })
end
table.insert(tDisc, { x = x, y = y })
draw.NoTexture()
surface.DrawPoly(tDisc)
end
local function DrawVerticalDisc(x, y, outerR, innerR, progress)
progress = math.Clamp(progress, 0, 100)
if progress <= 0 then return end
local segments = 128
local topY = y - outerR
local bottomY = y + outerR
local fillY = bottomY - (progress / 100) * (outerR * 2)
local points = {}
for i = 0, segments do
local iRad = math.rad((i / segments) * 360 - 90)
local px = x + math.cos(iRad) * outerR
local py = y + math.sin(iRad) * outerR
if py >= fillY then
points[#points + 1] = { x = px, y = py }
end
end
if #points < 3 then return end
local dy = math.Clamp(fillY - y, -outerR, outerR)
local dx = math.sqrt(outerR * outerR - dy * dy)
table.insert(points, 1, { x = x - dx, y = fillY })
table.insert(points, { x = x + dx, y = fillY })
draw.NoTexture()
surface.DrawPoly(points)
DrawDisc(x, y, innerR, 360, 0)
end
local materials = {
heart = Material("materials/xyoss/hud/heartIcon.png"),
hunger = Material("materials/xyoss/hud/hungerIcon.png"),
job = Material("materials/xyoss/hud/jobIcon.png"),
money = Material("materials/xyoss/hud/moneyIcon.png"),
name = Material("materials/xyoss/hud/nameIcon.png"),
shield = Material("materials/xyoss/hud/shieldIcon.png"),
}
local displayMoney = 0
hook.Add("DarkRPVarChanged", "bladw_HUD_money", function(ply, var, oldVal, newVal)
if ply == LocalPlayer() and var == "money" then
displayMoney = newVal
end
end)
hook.Add("HUDPaint", "bladw_HUD", function()
local ply = LocalPlayer()
local x, y = RX(100), RY(830)
local name = ply:Nick()
local job = ply:getDarkRPVar("job") or "Unknown"
local health = ply:Health()
local armor = ply:Armor()
local hunger = ply:getDarkRPVar("Energy") or 100
-- health
surface.SetDrawColor(255, 63, 63)
DrawVerticalDisc(x, y + RY(65), RX(40), RX(30), health)
surface.SetDrawColor(50, 50, 50, 250)
DrawDisc(x, y + RY(65), RX(35), 360)
-- armor
surface.SetDrawColor(81, 136, 255)
DrawVerticalDisc(x + RX(90), y + RY(65), RX(40), RX(30), hunger)
surface.SetDrawColor(50, 50, 50, 250)
DrawDisc(x + RX(90), y + RY(65), RX(35), 360)
-- hunger
surface.SetDrawColor(255, 166, 0)
DrawVerticalDisc(x + RX(180), y + RY(65), RX(40), RX(30), hunger)
surface.SetDrawColor(50, 50, 50, 250)
DrawDisc(x + RX(180), y + RY(65), RX(35), 360)
-- icônes
surface.SetDrawColor(255, 255, 255)
surface.SetMaterial(materials.heart)
surface.DrawTexturedRect(x - RX(12.5), y + RY(50), RX(25), RY(25))
surface.SetMaterial(materials.shield)
surface.DrawTexturedRect(x + RX(90) - RX(12.5), y + RY(50), RX(25), RY(27))
surface.SetMaterial(materials.hunger)
surface.DrawTexturedRect(x + RX(180) - RX(15), y + RY(50), RX(25), RY(30))
-- textes
surface.SetDrawColor(255, 255, 255)
surface.SetMaterial(materials.name)
surface.DrawTexturedRect(x - RX(50), y + RY(120), RX(22), RY(27))
draw.SimpleText(name, "bladw_text", x + RX(5), y + RY(135), Color(255, 255, 255), TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
surface.SetMaterial(materials.job)
surface.DrawTexturedRect(x - RX(60), y + RY(160), RX(40), RY(40))
draw.SimpleText(job, "bladw_text", x + RX(5), y + RY(180), Color(255, 255, 255), TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
surface.SetMaterial(materials.money)
surface.DrawTexturedRect(x - RX(50), y + RY(215), RX(20), RY(20))
draw.SimpleText(displayMoney .. "", "bladw_text", x + RX(5), y + RY(225), Color(85, 255, 116), TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
end)
local hideElement = {
["CHudHealth"] = true,
["CHudBattery"] = true,
["CHudAmmo"] = true,
["CHudSecondaryAmmo"] = true,
["CHudCrosshair"] = true,
["CHudWeaponSelection"] = true,
["DarkRP_HUD"] = true,
["DarkRP_EntityDisplay"] = true,
["DarkRP_LocalPlayerHUD"] = true,
["DarkRP_Hungermod"] = true,
["DarkRP_Agenda"] = true,
["DarkRP_LockdownHUD"] = true,
["DarkRP_ArrestedHUD"] = true,
["DarkRP_ChatReceivers"] = true,
}
hook.Add("HUDShouldDraw", "bladw_HUD_ShouldDraw", function(name)
if hideElement[name] then return false end
end)