From b5ee0af2c4cccdd58684e198312b261df53c9f96 Mon Sep 17 00:00:00 2001 From: edshot99 Date: Fri, 12 Jul 2024 23:38:01 -0500 Subject: [PATCH] disable dynamic kill icons for all players for now reason: too much screen flickering caused by generating icons on-the-fly even with all weapon and attachment models cached it still happens --- .../lua/arc9/client/cl_killicons.lua | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 arc9_no_dynamic_killicons/lua/arc9/client/cl_killicons.lua diff --git a/arc9_no_dynamic_killicons/lua/arc9/client/cl_killicons.lua b/arc9_no_dynamic_killicons/lua/arc9/client/cl_killicons.lua new file mode 100644 index 0000000..cff641a --- /dev/null +++ b/arc9_no_dynamic_killicons/lua/arc9/client/cl_killicons.lua @@ -0,0 +1,85 @@ +--[[ +ARC9OLDKilliconDraw = ARC9OLDKilliconDraw or killicon.Render or killicon.Draw +local killicons_cachednames = {} +local killicons_cachedicons = {} +local killicons_cachedtimes = {} +local killiconmat = Material("arc9/arc9_logo.png", "mips smooth") + +local arc9_killfeed_enable = GetConVar("arc9_killfeed_enable") +local arc9_killfeed_dynamic = GetConVar("arc9_killfeed_dynamic") +ARC9NEWKillicondraw = function(x, y, name, alpha) + if !arc9_killfeed_enable:GetBool() then + return ARC9OLDKilliconDraw(x, y, name, alpha) + end + + local wpn = weapons.Get(name) + + if wpn and wpn.ARC9 and wpn.NoDynamicKillIcon then + return ARC9OLDKilliconDraw(x, y, name, alpha) + end + + if killicons_cachednames[name] == true then + local w, h = 96, 96 + x = x - (killicon.Render and 25 or 48) -- killiocn render is only on x64 and they changed offsets or something + y = y - (killicon.Render and 25 or 34) + + cam.Start2D() + + local selecticon = killicons_cachedicons[name] + + if arc9_killfeed_dynamic:GetBool() and (!killicons_cachedtimes[name] or (killicons_cachedtimes[name] and killicons_cachedtimes[name] < CurTime())) then -- dynamic + killicons_cachedtimes[name] = CurTime() + 5 + killicons_cachedicons[name] = nil + -- print("RESET") + end + + if !selecticon then -- not cached + local filename = ARC9.PresetPath .. name .. "_icon." .. ARC9.PresetIconFormat + -- local loadedmat = Material("data/" .. filename, "smooth") + local loadedmat + + -- if !loadedmat or loadedmat:IsError() then -- there is no fucking icon in data folder!!!! + local found + + if game.SinglePlayer() then -- trying find in your hands + local probablythegun = LocalPlayer():GetActiveWeapon() + + if IsValid(probablythegun) and probablythegun:GetClass() == name then + loadedmat = probablythegun:DoIconCapture() + found = true + end + end + + if !found then -- nah, bruteforcing all ents until we find gun with same classname + for _, v in ipairs(ents.GetAll()) do + if v:GetClass() == name then + loadedmat = v:DoIconCapture() + end + end + end + -- end + + loadedmat = Material("data/" .. filename, "smooth") + + killicons_cachedicons[name] = loadedmat + selecticon = loadedmat + end + + surface.SetDrawColor(255, 255, 255, alpha) + surface.SetMaterial(selecticon or killiconmat) + surface.DrawTexturedRectUV( x, y, w, h, 1, 0, 0, 1 ) -- fliping + cam.End2D() + else + if killicons_cachednames[name] == nil then -- not cached yet, checking for arc9 + killicons_cachednames[name] = (weapons.Get(name) and weapons.Get(name).ARC9) or false -- weapons.get() will return nil for any hl2 base gun + else -- we know it is totally not arc9 gun + return ARC9OLDKilliconDraw(x, y, name, alpha) + end + end +end + +timer.Simple(5, function() -- to make Autoicons addon not override our stuff + killicon.Render = ARC9NEWKillicondraw + killicon.Draw = ARC9NEWKillicondraw +end) +]]--