--[[ | 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