318 lines
8.9 KiB
Lua
318 lines
8.9 KiB
Lua
|
|
local CENTER_HEIGHT = 250
|
|
local PANEL = {}
|
|
|
|
/*---------------------------------------------------------
|
|
Init
|
|
---------------------------------------------------------*/
|
|
function PANEL:Init()
|
|
|
|
self:SetText( "" )
|
|
self.Buttons = {}
|
|
self.BottomButtons = {}
|
|
self:SetSkin( GAMEMODE.HudSkin )
|
|
|
|
self.pnlButtons = vgui.Create( "DPanelList", self )
|
|
self.pnlButtons:SetPadding( 10 )
|
|
self.pnlButtons:SetSpacing( 10 )
|
|
self.pnlButtons:SetDrawBackground( false )
|
|
self.pnlButtons:EnableVerticalScrollbar()
|
|
|
|
self.lblMain = vgui.Create( "DLabel", self )
|
|
self.lblMain:SetText( GAMEMODE.Name )
|
|
self.lblMain:SetFont( "FRETTA_HUGE" )
|
|
self.lblMain:SetColor( color_white )
|
|
|
|
self.pnlMain = vgui.Create( "DPanelList", self )
|
|
self.pnlMain:SetNoSizing( true )
|
|
self.pnlMain:SetDrawBackground( false )
|
|
self.pnlMain:EnableVerticalScrollbar()
|
|
|
|
self.btnCancel = vgui.Create( "DButton", self )
|
|
self.btnCancel:SetText( "#Close" )
|
|
self.btnCancel:SetSize( 100, 30 )
|
|
self.btnCancel:SetFGColor( Color( 0, 0, 0, 200 ) )
|
|
self.btnCancel:SetFont( "FRETTA_SMALL" )
|
|
self.btnCancel.DoClick = function() self:Remove() end
|
|
self.btnCancel:SetVisible( false )
|
|
|
|
Derma_Hook( self.btnCancel, "Paint", "Paint", "CancelButton" )
|
|
Derma_Hook( self.btnCancel, "PaintOver", "PaintOver", "CancelButton" )
|
|
Derma_Hook( self.btnCancel, "ApplySchemeSettings", "Scheme", "CancelButton" )
|
|
Derma_Hook( self.btnCancel, "PerformLayout", "Layout", "CancelButton" )
|
|
|
|
self.lblHoverText = vgui.Create( "DLabel", self )
|
|
self.lblHoverText:SetText( "" )
|
|
self.lblHoverText:SetFont( "FRETTA_MEDIUM" )
|
|
self.lblHoverText:SetColor( color_white )
|
|
self.lblHoverText:SetContentAlignment( 8 )
|
|
self.lblHoverText:SetWrap( true )
|
|
|
|
self.lblFooterText = vgui.Create( "DLabel", self )
|
|
self.lblFooterText:SetText( "" )
|
|
self.lblFooterText:SetFont( "FRETTA_MEDIUM" )
|
|
self.lblFooterText:SetColor( color_white )
|
|
self.lblFooterText:SetContentAlignment( 8 )
|
|
self.lblFooterText:SetWrap( false )
|
|
|
|
self.pnlMain:AddItem( self.lblHoverText )
|
|
|
|
self:PerformLayout()
|
|
|
|
self.OpenTime = SysTime()
|
|
|
|
end
|
|
|
|
function PANEL:NoFadeIn()
|
|
self.OpenTime = 0
|
|
end
|
|
|
|
/*---------------------------------------------------------
|
|
AddPanelButton
|
|
---------------------------------------------------------*/
|
|
function PANEL:AddPanelButton( icon, title, pnlfnc )
|
|
|
|
local btn = vgui.Create( "DImageButton", self )
|
|
btn:SetImage( icon )
|
|
btn:SetTooltip( title )
|
|
btn:SetSize( 30, 30 )
|
|
btn:SetVisible( true )
|
|
btn.pPanelFnc = pnlfnc
|
|
btn.pPanel = nil
|
|
btn:SetStretchToFit( false )
|
|
|
|
Derma_Hook( btn, "Paint", "Paint", "PanelButton" )
|
|
Derma_Hook( btn, "PaintOver", "PaintOver", "PanelButton" )
|
|
//Derma_Hook( btn, "ApplySchemeSettings", "Scheme", "PanelButton" )
|
|
//Derma_Hook( btn, "PerformLayout", "Layout", "PanelButton" )
|
|
|
|
local fnClick = function()
|
|
|
|
if ( !btn.pPanel ) then
|
|
btn.pPanel = btn.pPanelFnc()
|
|
btn.pPanel:SetParent( self.pnlMain )
|
|
btn.pPanel:SetVisible( false )
|
|
btn.pPanelFnc = nil
|
|
end
|
|
|
|
// Toggle off
|
|
if ( btn.m_bSelected ) then self:ClearSelectedPanel() return end
|
|
|
|
self:ClearSelectedPanel()
|
|
|
|
btn.m_bSelected = true
|
|
|
|
self.pnlMain:Clear()
|
|
btn.pPanel:SetVisible( true )
|
|
self.pnlMain:AddItem( btn.pPanel )
|
|
|
|
end
|
|
btn.DoClick = fnClick
|
|
|
|
table.insert( self.BottomButtons, btn )
|
|
|
|
return btn
|
|
|
|
end
|
|
|
|
function PANEL:ClearSelectedPanel()
|
|
|
|
self.pnlMain:Clear()
|
|
self.pnlMain:AddItem( self.lblHoverText )
|
|
|
|
for k, btn in pairs( self.BottomButtons ) do
|
|
|
|
btn.m_bSelected = false
|
|
if ( IsValid( btn.pPanel ) ) then
|
|
btn.pPanel:SetVisible( false )
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
/*---------------------------------------------------------
|
|
SetHeaderText
|
|
---------------------------------------------------------*/
|
|
function PANEL:SetHeaderText( strName )
|
|
|
|
self.lblMain:SetText( strName )
|
|
|
|
end
|
|
|
|
/*---------------------------------------------------------
|
|
SetHeaderText
|
|
---------------------------------------------------------*/
|
|
function PANEL:SetHoverText( strName )
|
|
|
|
self.lblHoverText:SetText( strName or "" )
|
|
|
|
end
|
|
|
|
/*---------------------------------------------------------
|
|
SetHeaderText
|
|
---------------------------------------------------------*/
|
|
function PANEL:GetHoverText( strName )
|
|
|
|
return self.lblHoverText:GetValue()
|
|
|
|
end
|
|
|
|
/*---------------------------------------------------------
|
|
AddSelectButton
|
|
---------------------------------------------------------*/
|
|
function PANEL:AddSelectButton( strName, fnFunction, txt )
|
|
|
|
local btn = vgui.Create( "DButton", self.pnlButtons )
|
|
btn:SetText( strName )
|
|
btn:SetSize( 200, 30 )
|
|
btn.DoClick = function() fnFunction() surface.PlaySound( Sound("buttons/lightswitch2.wav") ) self:Remove() end
|
|
|
|
Derma_Hook( btn, "Paint", "Paint", "SelectButton" )
|
|
Derma_Hook( btn, "PaintOver", "PaintOver", "SelectButton" )
|
|
Derma_Hook( btn, "ApplySchemeSettings", "Scheme", "SelectButton" )
|
|
Derma_Hook( btn, "PerformLayout", "Layout", "SelectButton" )
|
|
|
|
if ( txt ) then
|
|
btn.OnCursorEntered = function() self.OldHoverText = self:GetHoverText() self:SetHoverText( txt ) end
|
|
btn.OnCursorExited = function() self:SetHoverText( self.OldHoverText ) self.OldHoverText = nil end
|
|
end
|
|
|
|
self.pnlButtons:AddItem( btn )
|
|
|
|
table.insert( self.Buttons, btn )
|
|
return btn
|
|
|
|
end
|
|
|
|
/*---------------------------------------------------------
|
|
SetHeaderText
|
|
---------------------------------------------------------*/
|
|
function PANEL:AddSpacer( h )
|
|
|
|
local btn = vgui.Create( "Panel", self )
|
|
btn:SetSize( 200, h )
|
|
table.insert( self.Buttons, btn )
|
|
return btn
|
|
|
|
end
|
|
|
|
/*---------------------------------------------------------
|
|
SetHeaderText
|
|
---------------------------------------------------------*/
|
|
function PANEL:AddCancelButton()
|
|
|
|
self.btnCancel:SetVisible( true )
|
|
|
|
end
|
|
|
|
/*---------------------------------------------------------
|
|
PerformLayout
|
|
---------------------------------------------------------*/
|
|
function PANEL:PerformLayout()
|
|
|
|
self:SetSize( ScrW(), ScrH() )
|
|
|
|
local CenterY = ScrH() / 2.0
|
|
local CenterX = ScrW() / 2.0
|
|
local InnerWidth = 640
|
|
|
|
self.lblMain:SizeToContents()
|
|
self.lblMain:SetPos( ScrW() * 0.5 - self.lblMain:GetWide() * 0.5, CenterY - CENTER_HEIGHT - self.lblMain:GetTall() * 1.2 )
|
|
|
|
self.pnlButtons:SetPos( ScrW() * 0.5 - InnerWidth * 0.5, (CenterY - CENTER_HEIGHT) + 20 )
|
|
self.pnlButtons:SetSize( 210, (CENTER_HEIGHT * 2) - self.btnCancel:GetTall() - 20 - 20 - 20 )
|
|
|
|
self.btnCancel:SetPos( ScrW() * 0.5 + InnerWidth * 0.5 - self.btnCancel:GetWide(), CenterY + CENTER_HEIGHT - self.btnCancel:GetTall() - 20 )
|
|
|
|
self.lblHoverText:SetPos( ScrW() * 0.5 - InnerWidth * 0.5 + 50, (CenterY - 150) )
|
|
self.lblHoverText:SetSize( 300, 300 )
|
|
|
|
self.pnlMain:SetPos( self.pnlButtons.x + self.pnlButtons:GetWide() + 10, self.pnlButtons.y )
|
|
self.pnlMain:SetSize( InnerWidth - self.pnlButtons:GetWide() - 10, 400 )
|
|
|
|
self.lblFooterText:SetSize( ScrW(), 30 )
|
|
self.lblFooterText:SetPos( 0, CenterY + CENTER_HEIGHT + 10 )
|
|
|
|
local x = self.pnlButtons.x
|
|
for k, btn in pairs( self.BottomButtons ) do
|
|
|
|
btn:SetPos( x, CenterY + CENTER_HEIGHT - btn:GetTall() - 20 )
|
|
x = x + btn:GetWide() + 8
|
|
|
|
end
|
|
|
|
end
|
|
|
|
/*---------------------------------------------------------
|
|
Paint
|
|
---------------------------------------------------------*/
|
|
function PANEL:Paint()
|
|
|
|
Derma_DrawBackgroundBlur( self, self.OpenTime )
|
|
|
|
local CenterY = ScrH() / 2.0
|
|
local CenterX = ScrW() / 2.0
|
|
|
|
surface.SetDrawColor( 0, 0, 0, 200 );
|
|
surface.DrawRect( 0, CenterY - CENTER_HEIGHT, ScrW(), CENTER_HEIGHT * 2 );
|
|
surface.DrawRect( 0, CenterY - CENTER_HEIGHT - 4, ScrW(), 2 );
|
|
surface.DrawRect( 0, CenterY + CENTER_HEIGHT + 2, ScrW(), 2 );
|
|
|
|
GAMEMODE:PaintSplashScreen( self:GetWide(), self:GetTall() )
|
|
|
|
end
|
|
|
|
vgui_Splash = vgui.RegisterTable( PANEL, "DPanel" )
|
|
local TeamPanel = nil
|
|
|
|
function GM:ShowTeam()
|
|
|
|
if ( !IsValid( TeamPanel ) ) then
|
|
|
|
TeamPanel = vgui.CreateFromTable( vgui_Splash )
|
|
TeamPanel:SetHeaderText( "Choose Team" )
|
|
|
|
local AllTeams = team.GetAllTeams()
|
|
for ID, TeamInfo in SortedPairs ( AllTeams ) do
|
|
|
|
if ( ID != TEAM_CONNECTING && ID != TEAM_UNASSIGNED && ( ID != TEAM_SPECTATOR || GAMEMODE.AllowSpectating ) && team.Joinable(ID) ) then
|
|
|
|
if ( ID == TEAM_SPECTATOR ) then
|
|
TeamPanel:AddSpacer( 10 )
|
|
end
|
|
|
|
local strName = TeamInfo.Name
|
|
local func = function() RunConsoleCommand( "changeteam", ID ) end
|
|
|
|
local btn = TeamPanel:AddSelectButton( strName, func )
|
|
btn.m_colBackground = TeamInfo.Color
|
|
btn.Think = function( self )
|
|
self:SetText( Format( "%s (%i)", strName, team.NumPlayers( ID ) ))
|
|
self:SetDisabled( GAMEMODE:TeamHasEnoughPlayers( ID ) )
|
|
end
|
|
|
|
if ( IsValid( LocalPlayer() ) && LocalPlayer():Team() == ID ) then
|
|
btn:SetDisabled( true )
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if ( IsValid( LocalPlayer() ) &&
|
|
|
|
( LocalPlayer():Team() == TEAM_UNASSIGNED or
|
|
LocalPlayer():Team() == TEAM_SPECTATOR or
|
|
LocalPlayer():Team() == TEAM_HUNTERS or
|
|
LocalPlayer():Team() == TEAM_PROPS ) ) then
|
|
|
|
TeamPanel:AddCancelButton()
|
|
end
|
|
|
|
end
|
|
|
|
TeamPanel:MakePopup()
|
|
|
|
end
|