Files
wnsrc/lua/arccw/client/cl_hud.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

290 lines
7.5 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local hide = {
["CHudHealth"] = true,
["CHudBattery"] = true,
["CHudAmmo"] = true,
["CHudSecondaryAmmo"] = true,
}
CreateClientConVar("arccw_hud_togglestats", "0")
ArcCW.HUDElementConVars = {
["CHudHealth"] = CreateClientConVar("arccw_hud_showhealth", "1"),
["CHudBattery"] = ArcCW.ConVars["hud_showhealth"],
["CHudAmmo"] = CreateClientConVar("arccw_hud_showammo", "1"),
["CHudSecondaryAmmo"] = ArcCW.ConVars["hud_showammo"],
}
local grad = Material("arccw/hud/grad.png", "mips smooth")
hook.Add("PreDrawViewModels", "ArcCW_PreDrawViewmodels_Grad", function()
if ArcCW.InvHUD and !grad:IsError() then
render.SetViewPort( 0, 0, ScrW(), ScrH() )
cam.Start2D()
surface.SetDrawColor(Color(255, 255, 255, Lerp(ArcCW.Inv_Fade-0.01, 0, 255)))
surface.SetMaterial(grad)
surface.DrawTexturedRect(0, 0, ScrW(), ScrH())
cam.End2D()
end
end)
hook.Add("HUDShouldDraw", "ArcCW_HideHUD", function(name)
if !hide[name] then return end
if !LocalPlayer():IsValid() then return end
if !LocalPlayer():GetActiveWeapon().ArcCW then return end
if ArcCW.ConVars["override_hud_off"]:GetBool() then return end
if ArcCW.PollingDefaultHUDElements then return end
if ArcCW.HUDElementConVars[name] and ArcCW.HUDElementConVars[name]:GetBool() == false then return end
if engine.ActiveGamemode() == "terrortown" then return end
return false
end)
hook.Add("RenderScreenspaceEffects", "ArcCW_ToyTown", function()
if !LocalPlayer():IsValid() then return end
local wpn = LocalPlayer():GetActiveWeapon()
if !IsValid(wpn) then return end
if !wpn.ArcCW then return end
local delta = wpn:GetSightDelta()
if delta < 1 then
wpn:DoToyTown()
end
end)
ArcCW.PollingDefaultHUDElements = false
function ArcCW:ShouldDrawHUDElement(ele)
if !GetConVar("cl_drawhud"):GetBool() then return false end
if ArcCW.ConVars["override_hud_off"]:GetBool() then return false end
if engine.ActiveGamemode() == "terrortown" and (ele != "CHudAmmo") then return false end
if ArcCW.HUDElementConVars[ele] and !ArcCW.HUDElementConVars[ele]:GetBool() then
return false
end
ArcCW.PollingDefaultHUDElements = true
if !ArcCW.ConVars["hud_forceshow"]:GetBool() and hook.Call("HUDShouldDraw", nil, ele) == false then
ArcCW.PollingDefaultHUDElements = false
return false
end
ArcCW.PollingDefaultHUDElements = false
return true
end
local function GetFont()
local font = "Bahnschrift"
if ArcCW.GetTranslation("default_font") then
font = ArcCW.GetTranslation("default_font")
end
if ArcCW.ConVars["font"]:GetString() != "" then
font = ArcCW.ConVars["font"]:GetString()
end
return font
end
-- Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes.
-- What is the size of your ass. What is it. Tell me.
local ScreenScale_CacheC2 = {}
ArcCW.AugmentedScreenScale = function(size)
if ScreenScale_CacheC2[size] then return ScreenScale_CacheC2[size] end
local scrw, scrh = ScrW(), ScrH()
if vrmod and vrmod.IsPlayerInVR(LocalPlayer()) then
-- Other resolutions seem to cause stretching issues
scrw = 1366
scrh = 768
end
local scrwmult = ArcCW.ConVars["hud_deadzone_x"]:GetFloat() * scrw
local scrhmult = ArcCW.ConVars["hud_deadzone_y"]:GetFloat() * scrh
scrw, scrh = scrw - scrwmult, scrh - scrhmult
local r = size
r = r * (math.max(scrw, scrh) / 800)
r = r * ArcCW.ConVars["hud_size"]:GetFloat()
ScreenScale_CacheC2[size] = r
return r
end
local sizes_to_make = {
6,
8,
10,
12,
14,
16,
20,
24,
26,
32
}
local sizes_to_make_cust2 = {
8,
10,
12,
14,
16,
24,
32
}
local unscaled_sizes_to_make = {
32,
24
}
local function generatefonts()
for _, i in pairs(sizes_to_make) do
surface.CreateFont( "ArcCW_" .. tostring(i), {
font = GetFont(),
size = ScreenScale(i) * ArcCW.ConVars["hud_size"]:GetFloat(),
weight = 0,
antialias = true,
extended = true, -- Required for non-latin fonts
} )
surface.CreateFont( "ArcCW_" .. tostring(i) .. "_Glow", {
font = GetFont(),
size = ScreenScale(i) * ArcCW.ConVars["hud_size"]:GetFloat(),
weight = 0,
antialias = true,
blursize = 6,
extended = true,
} )
end
for _, i in pairs(sizes_to_make_cust2) do
surface.CreateFont( "ArcCWC2_" .. tostring(i), {
font = GetFont(),
size = ArcCW.AugmentedScreenScale(i) * ArcCW.ConVars["hud_size"]:GetFloat(),
weight = 0,
antialias = true,
extended = true, -- Required for non-latin fonts
} )
surface.CreateFont( "ArcCWC2_" .. tostring(i) .. "_Glow", {
font = GetFont(),
size = ArcCW.AugmentedScreenScale(i) * ArcCW.ConVars["hud_size"]:GetFloat(),
weight = 0,
antialias = true,
blursize = 6,
extended = true,
} )
end
for _, i in pairs(unscaled_sizes_to_make) do
surface.CreateFont( "ArcCW_" .. tostring(i) .. "_Unscaled", {
font = GetFont(),
size = i,
weight = 0,
antialias = true,
extended = true,
} )
end
end
local og_ScreenScale = ScreenScale
local ScreenScale_Cache = {}
function ScreenScale(a)
if ScreenScale_Cache[a] then return ScreenScale_Cache[a] end
ScreenScale_Cache[a] = og_ScreenScale(a)
return ScreenScale_Cache[a]
end
language.Add("SniperPenetratedRound_ammo", "Sniper Ammo")
generatefonts()
function ArcCW_Regen(full)
if full then
generatefonts()
ScreenScale_Cache = {}
ScreenScale_CacheC2 = {}
end
if IsValid(ArcCW.InvHUD) then
ArcCW.InvHUD:Clear()
ArcCW.InvHUD:Remove()
end
end
--cvars.AddChangeCallback("arccw_dev_cust2beta", function() ArcCW_Regen(true) end)
cvars.AddChangeCallback("arccw_hud_deadzone_x", function() ArcCW_Regen(true) end)
cvars.AddChangeCallback("arccw_hud_deadzone_y", function() ArcCW_Regen(true) end)
cvars.AddChangeCallback("arccw_hud_size", function() ArcCW_Regen(true) end)
cvars.AddChangeCallback("arccw_font", function() ArcCW_Regen(true) end)
hook.Add( "OnScreenSizeChanged", "ArcCW_Regen", function() ArcCW_Regen(true) end)
-- surface.CreateFont( "ArcCW_12", {
-- font = font,
-- size = ScreenScale(12),
-- weight = 0,
-- antialias = true,
-- } )
-- surface.CreateFont( "ArcCW_12_Glow", {
-- font = font,
-- size = ScreenScale(12),
-- weight = 0,
-- antialias = true,
-- blursize = 8,
-- } )
-- surface.CreateFont( "ArcCW_16", {
-- font = font,
-- size = ScreenScale(16),
-- weight = 0,
-- antialias = true,
-- } )
-- surface.CreateFont( "ArcCW_16_Glow", {
-- font = font,
-- size = ScreenScale(16),
-- weight = 0,
-- antialias = true,
-- blursize = 8,
-- } )
-- surface.CreateFont( "ArcCW_26", {
-- font = font,
-- size = ScreenScale(26),
-- weight = 0,
-- antialias = true,
-- } )
-- surface.CreateFont( "ArcCW_26_Glow", {
-- font = font,
-- size = ScreenScale(26),
-- weight = 0,
-- antialias = true,
-- blursize = 8,
-- } )