Files
2026-03-15 14:54:49 +03:00

104 lines
3.3 KiB
Lua

local cvars = cvars
local draw = draw
local hook = hook
local math = math
local table = table
local timer = timer
local Color = Color
local ColorAlpha = ColorAlpha
local CreateClientConVar = CreateClientConVar
local GetConVar = GetConVar
local ipairs = ipairs
local pairs = pairs
local unpack = unpack
local ConVars = {
HungerBackground = {0, 0, 0, 255},
HungerForeground = {30, 30, 120, 255},
HungerPercentageText = {255, 255, 255, 255},
StarvingText = {200, 0, 0, 255},
FoodEatenBackground = {0, 0, 0}, -- No alpha
FoodEatenForeground = {20, 100, 20} -- No alpha
}
local HUDWidth = 0
local FoodAteAlpha = -1
local FoodAteY = 0
surface.CreateFont("HungerPlus", {
size = 70,
weight = 500,
antialias = true,
shadow = false,
font = "ChatFont",
extended = true,
})
local function ReloadConVars()
for name, Colour in pairs(ConVars) do
ConVars[name] = {}
for num, rgb in ipairs(Colour) do
local ConVarName = name .. num
local CVar = GetConVar(ConVarName) or CreateClientConVar(ConVarName, rgb, true, false)
table.insert(ConVars[name], CVar:GetInt())
if not cvars.GetConVarCallbacks(ConVarName, false) then
cvars.AddChangeCallback(ConVarName, function() timer.Simple(0, ReloadConVars) end)
end
end
ConVars[name] = Color(unpack(ConVars[name]))
end
if HUDWidth == 0 then
HUDWidth = 240
cvars.AddChangeCallback("HudW", function() timer.Simple(0, ReloadConVars) end)
end
HUDWidth = GetConVar("HudW") and GetConVar("HudW"):GetInt() or 240
end
timer.Simple(0, ReloadConVars)
local function HMHUD()
local shouldDraw = hook.Call("HUDShouldDraw", GAMEMODE, "DarkRP_Hungermod")
if shouldDraw == false then return end
local energy = math.ceil(LocalPlayer():getDarkRPVar("Energy") or 0)
local x = 5
local y = ScrH() - 9
local cornerRadius = 4
if energy > 0 then
cornerRadius = math.Min(4, (HUDWidth - 9) * (energy / 100) / 3 * 2 - (HUDWidth - 9) * (energy / 100) / 3 * 2 % 2)
end
draw.RoundedBox(cornerRadius, x - 1, y - 1, HUDWidth - 8, 9, ConVars.HungerBackground)
if energy > 0 then
draw.RoundedBox(cornerRadius, x, y, (HUDWidth - 9) * (energy / 100), 7, ConVars.HungerForeground)
draw.DrawNonParsedSimpleText(energy .. "%", "DefaultSmall", HUDWidth / 2, y - 3, ConVars.HungerPercentageText, 1)
else
draw.DrawNonParsedSimpleText(DarkRP.getPhrase("starving"), "ChatFont", HUDWidth / 2, y - 5, ConVars.StarvingText, 1)
end
if FoodAteAlpha > -1 then
local mul = 1
if FoodAteY <= ScrH() - 100 then
mul = -.5
end
draw.DrawNonParsedSimpleText("++", "HungerPlus", 208, FoodAteY + 1, ColorAlpha(ConVars.FoodEatenBackground, FoodAteAlpha), 0)
draw.DrawNonParsedSimpleText("++", "HungerPlus", 207, FoodAteY, ColorAlpha(ConVars.FoodEatenForeground, FoodAteAlpha), 0)
FoodAteAlpha = math.Clamp(FoodAteAlpha + 4 * FrameTime() * mul, -1, 1) --ColorAlpha works with 0-1 alpha
FoodAteY = FoodAteY - 150 * FrameTime()
end
end
hook.Add("HUDDrawTargetID", "HMHUD", HMHUD) --HUDDrawTargetID is called after DarkRP HUD is drawn in HUDPaint
local function AteFoodIcon(msg)
FoodAteAlpha = 1
FoodAteY = ScrH() - 8
end
usermessage.Hook("AteFoodIcon", AteFoodIcon)