104 lines
3.3 KiB
Lua
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)
|