150 lines
4.8 KiB
Lua
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)
|