Files
wnsrc/lua/arccw/client/cl_garbage.lua
lifestorm 9c918c46e5 Upload
2024-08-04 23:12:27 +03:00

100 lines
2.6 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/
--]]
ArcCW.CSModels = {} -- [entid] = { Weapon = NULL, WModels = {}, VModels = {} }
ArcCW.CSModelPile = {} -- { {Model = NULL, Weapon = NULL} }
ArcCW.FlashlightPile = {} -- { {Weapon = NULL, ProjectedTexture = NULL}}
ArcCW.ReferenceModel = NULL
local function ArcCW_CollectGarbage()
local removed, removedents = 0, {}
for i, k in pairs(ArcCW.CSModels) do
if !IsValid(k.Weapon) then
removed = removed + 1
table.insert(removedents, i)
if k.WModels then for _, m in pairs(k.WModels) do SafeRemoveEntity(m.Model) end end
if k.VModels then for _, m in pairs(k.VModels) do SafeRemoveEntity(m.Model) end end
end
end
for _, i in pairs(removedents) do ArcCW.CSModels[i] = nil end
local newpile = {}
for _, k in pairs(ArcCW.CSModelPile) do
if IsValid(k.Weapon) then
table.insert(newpile, k)
continue
end
SafeRemoveEntity(k.Model)
removed = removed + 1
end
ArcCW.CSModelPile = newpile
if GetConVar("developer"):GetBool() and removed > 0 then
print("Removed " .. tostring(removed) .. " CSModels")
end
end
hook.Add("PostCleanupMap", "ArcCW_CleanGarbage", function()
ArcCW_CollectGarbage()
end)
timer.Create("ArcCW CSModel Garbage Collector", 5, 0, ArcCW_CollectGarbage)
hook.Add("PostDrawEffects", "ArcCW_CleanFlashlights", function()
local newflashlightpile = {}
for _, k in pairs(ArcCW.FlashlightPile) do
if IsValid(k.Weapon) and k.Weapon == LocalPlayer():GetActiveWeapon() then
table.insert(newflashlightpile, k)
continue
end
if k.ProjectedTexture and k.ProjectedTexture:IsValid() then
k.ProjectedTexture:Remove()
end
end
ArcCW.FlashlightPile = newflashlightpile
local wpn = LocalPlayer():GetActiveWeapon()
if !wpn then return end
if !IsValid(wpn) then return end
if !wpn.ArcCW then return end
if GetViewEntity() == LocalPlayer() then return end
wpn:KillFlashlightsVM()
end)
concommand.Add("arccw_dev_loadallattmodels", function()
local e = ClientsideModel("models/weapons/v_pistol.mdl")
print("created subject", e)
for i, v in pairs(ArcCW.AttachmentTable) do
if v.Model then
print("\t- " .. v.Model)
e:SetModel(v.Model)
end
end
print("removed subject", e)
e:Remove()
end)