Files
wnsrc/lua/includes/modules/controlpanel.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

58 lines
1.3 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 ControlPanels = {}
module( "controlpanel", package.seeall )
-- A hack for a very annoying race condition where spawnmenu_reload deletes the controlpanels on the next frame
-- But some panels are updated "this" frame after spawnmenu reloaded
local function ShouldReCreate( pnl )
if ( !IsValid( pnl ) || pnl:IsMarkedForDeletion() ) then return true end
local p = pnl
-- Can't use IsValid because it's false for marked for deletion panels
while ( IsValid( p ) && p:GetParent() != nil ) do
if ( p:GetParent():IsMarkedForDeletion() ) then return true end
p = p:GetParent()
end
return false
end
function Get( name )
if ( ShouldReCreate( ControlPanels[ name ] ) ) then
local cp = vgui.Create( "ControlPanel" )
if ( !cp ) then
debug.Trace()
Error( "controlpanel.Get() - Error creating a ControlPanel!\nYou're calling this function too early! Call it in a hook!\n" )
return nil
end
cp:SetVisible( false )
cp.Name = name
ControlPanels[ name ] = cp
end
return ControlPanels[ name ]
end
function Clear()
ControlPanels = {}
end