summaryrefslogtreecommitdiff
path: root/game/client/tfc/vgui
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tfc/vgui')
-rw-r--r--game/client/tfc/vgui/tfcclassmenu.cpp61
-rw-r--r--game/client/tfc/vgui/tfcclassmenu.h42
-rw-r--r--game/client/tfc/vgui/tfcteammenu.cpp118
-rw-r--r--game/client/tfc/vgui/tfcteammenu.h42
-rw-r--r--game/client/tfc/vgui/tfcviewport.cpp96
-rw-r--r--game/client/tfc/vgui/tfcviewport.h40
-rw-r--r--game/client/tfc/vgui/vgui_rootpanel_tfc.cpp106
-rw-r--r--game/client/tfc/vgui/vgui_rootpanel_tfc.h56
8 files changed, 561 insertions, 0 deletions
diff --git a/game/client/tfc/vgui/tfcclassmenu.cpp b/game/client/tfc/vgui/tfcclassmenu.cpp
new file mode 100644
index 0000000..5fb66c0
--- /dev/null
+++ b/game/client/tfc/vgui/tfcclassmenu.cpp
@@ -0,0 +1,61 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+#include "tfcclassmenu.h"
+
+#include <KeyValues.h>
+#include <filesystem.h>
+#include <vgui_controls/Button.h>
+#include <vgui/IVGui.h>
+
+#include "hud.h" // for gEngfuncs
+#include "tfc_gamerules.h"
+#include "viewport_panel_names.h"
+#include "c_tfc_player.h"
+
+
+using namespace vgui;
+
+
+// ----------------------------------------------------------------------------- //
+// CTFCClassMenu
+// ----------------------------------------------------------------------------- //
+
+CTFCClassMenu::CTFCClassMenu(IViewPort *pViewPort) : CClassMenu(pViewPort)
+{
+}
+
+const char *CTFCClassMenu::GetName( void )
+{
+ return PANEL_CLASS;
+}
+
+void CTFCClassMenu::ShowPanel(bool bShow)
+{
+ if ( bShow)
+ {
+ engine->CheckPoint( "ClassMenu" );
+ }
+
+ BaseClass::ShowPanel( bShow );
+
+}
+
+void CTFCClassMenu::Update()
+{
+ // Force them to pick a class if they haven't picked one yet.
+ if ( C_TFCPlayer::GetLocalTFCPlayer()->m_Shared.GetPlayerClass() == PC_UNDEFINED )
+ {
+ SetVisibleButton( "CancelButton", false );
+ }
+ else
+ {
+ SetVisibleButton( "CancelButton", true );
+ }
+}
+
diff --git a/game/client/tfc/vgui/tfcclassmenu.h b/game/client/tfc/vgui/tfcclassmenu.h
new file mode 100644
index 0000000..4d369c3
--- /dev/null
+++ b/game/client/tfc/vgui/tfcclassmenu.h
@@ -0,0 +1,42 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef TFCCLASSMENU_H
+#define TFCCLASSMENU_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <classmenu.h>
+#include <commandpanel.h>
+#include <vgui_controls/EditablePanel.h>
+#include <filesystem.h>
+#include "tfc_shareddefs.h"
+#include "cbase.h"
+#include "tfc_gamerules.h"
+#include "vgui_controls/ImagePanel.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Draws the Terrorist class menu
+//-----------------------------------------------------------------------------
+
+class CTFCClassMenu : public CClassMenu
+{
+private:
+ DECLARE_CLASS_SIMPLE( CTFCClassMenu, CClassMenu );
+
+public:
+ CTFCClassMenu::CTFCClassMenu(IViewPort *pViewPort);
+
+ const char *GetName( void );
+ void ShowPanel(bool bShow);
+ void Update();
+};
+
+
+#endif // TFCCLASSMENU_H
diff --git a/game/client/tfc/vgui/tfcteammenu.cpp b/game/client/tfc/vgui/tfcteammenu.cpp
new file mode 100644
index 0000000..15847ee
--- /dev/null
+++ b/game/client/tfc/vgui/tfcteammenu.cpp
@@ -0,0 +1,118 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+#include "tfcteammenu.h"
+#include <convar.h>
+#include "hud.h" // for gEngfuncs
+#include "c_tfc_player.h"
+#include "tfc_gamerules.h"
+
+using namespace vgui;
+
+//-----------------------------------------------------------------------------
+// Purpose: Constructor
+//-----------------------------------------------------------------------------
+CTFCTeamMenu::CTFCTeamMenu(IViewPort *pViewPort) : CTeamMenu(pViewPort)
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Destructor
+//-----------------------------------------------------------------------------
+CTFCTeamMenu::~CTFCTeamMenu()
+{
+}
+
+void CTFCTeamMenu::ApplySettings(KeyValues *inResourceData)
+{
+ BaseClass::ApplySettings( inResourceData );
+}
+
+void CTFCTeamMenu::ShowPanel(bool bShow)
+{
+ if ( bShow )
+ {
+ engine->CheckPoint( "TeamMenu" );
+ }
+
+ BaseClass::ShowPanel( bShow );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: called to update the menu with new information
+//-----------------------------------------------------------------------------
+void CTFCTeamMenu::Update( void )
+{
+ BaseClass::Update();
+
+ const ConVar *allowspecs = cvar->FindVar( "mp_allowspectators" );
+
+ if ( allowspecs && allowspecs->GetBool() )
+ {
+ C_TFCPlayer *pPlayer = C_TFCPlayer::GetLocalTFCPlayer();
+ if ( !pPlayer || !TFCGameRules() )
+ return;
+
+ // if we're not already a CT or T...or the freeze time isn't over yet...or we're dead
+ if ( pPlayer->GetTeamNumber() == TEAM_UNASSIGNED ||
+ ( pPlayer && pPlayer->IsPlayerDead() ) )
+ {
+ SetVisibleButton("specbutton", true);
+ }
+ else
+ {
+ SetVisibleButton("specbutton", false);
+ }
+ }
+ else
+ {
+ SetVisibleButton("specbutton", false );
+ }
+
+ char mapName[MAX_MAP_NAME];
+
+ Q_FileBase( engine->GetLevelName(), mapName, sizeof(mapName) );
+ if( C_TFCPlayer::GetLocalTFCPlayer()->GetTeamNumber() == TEAM_UNASSIGNED ) // we aren't on a team yet
+ {
+ SetVisibleButton("CancelButton", false);
+ }
+ else
+ {
+ SetVisibleButton("CancelButton", true);
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: When a team button is pressed it triggers this function to
+// cause the player to join a team
+//-----------------------------------------------------------------------------
+void CTFCTeamMenu::OnCommand( const char *command )
+{
+ if ( Q_stricmp( command, "vguicancel" ) )
+ {
+ engine->ClientCmd( command );
+ }
+
+
+ BaseClass::OnCommand(command);
+
+ gViewPortInterface->ShowBackGround( false );
+ OnClose();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Sets the visibility of a button by name
+//-----------------------------------------------------------------------------
+void CTFCTeamMenu::SetVisibleButton(const char *textEntryName, bool state)
+{
+ Button *entry = dynamic_cast<Button *>(FindChildByName(textEntryName));
+ if (entry)
+ {
+ entry->SetVisible(state);
+ }
+}
diff --git a/game/client/tfc/vgui/tfcteammenu.h b/game/client/tfc/vgui/tfcteammenu.h
new file mode 100644
index 0000000..3d31372
--- /dev/null
+++ b/game/client/tfc/vgui/tfcteammenu.h
@@ -0,0 +1,42 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef TFCTEAMMENU_H
+#define TFCTEAMMENU_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <teammenu.h>
+
+//-----------------------------------------------------------------------------
+// Purpose: Displays the team menu
+//-----------------------------------------------------------------------------
+class CTFCTeamMenu : public CTeamMenu
+{
+private:
+ DECLARE_CLASS_SIMPLE( CTFCTeamMenu, CTeamMenu );
+
+public:
+ CTFCTeamMenu(IViewPort *pViewPort);
+ ~CTFCTeamMenu();
+
+ virtual void ApplySettings( KeyValues *inResourceData );
+
+ void Update();
+ void ShowPanel( bool bShow );
+
+private:
+ enum { NUM_TEAMS = 3 };
+
+ // VGUI2 override
+ void OnCommand( const char *command);
+ // helper functions
+ void SetVisibleButton(const char *textEntryName, bool state);
+};
+
+#endif // TFCTEAMMENU_H
diff --git a/game/client/tfc/vgui/tfcviewport.cpp b/game/client/tfc/vgui/tfcviewport.cpp
new file mode 100644
index 0000000..92eaeb2
--- /dev/null
+++ b/game/client/tfc/vgui/tfcviewport.cpp
@@ -0,0 +1,96 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Client DLL VGUI2 Viewport
+//
+// $Workfile: $
+// $Date: $
+//
+//-----------------------------------------------------------------------------
+// $Log: $
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+
+#pragma warning( disable : 4800 ) // disable forcing int to bool performance warning
+
+// VGUI panel includes
+#include <vgui_controls/Panel.h>
+#include <vgui/ISurface.h>
+#include <KeyValues.h>
+#include <vgui/Cursor.h>
+#include <vgui/IScheme.h>
+#include <vgui/IVGui.h>
+#include <vgui/ILocalize.h>
+#include <vgui/VGUI.h>
+
+// client dll/engine defines
+#include "hud.h"
+#include <voice_status.h>
+
+// viewport definitions
+#include <baseviewport.h>
+#include "TFCViewport.h"
+#include "tfcteammenu.h"
+
+#include "vguicenterprint.h"
+#include "text_message.h"
+#include "tfcclassmenu.h"
+
+
+
+//
+// This is the main function of the viewport. Right here is where we create our class menu,
+// team menu, and anything else that we want to turn on and off in the UI.
+//
+void TFCViewport::CreateDefaultPanels( void )
+{
+ AddNewPanel( new CTFCTeamMenu( this ), "CTFCTeamMenu" );
+ AddNewPanel( new CTFCClassMenu( this ), "CTFCClassMenu" );
+
+ BaseClass::CreateDefaultPanels();
+}
+
+
+void TFCViewport::ApplySchemeSettings( vgui::IScheme *pScheme )
+{
+ BaseClass::ApplySchemeSettings( pScheme );
+
+ gHUD.InitColors( pScheme );
+
+ SetPaintBackgroundEnabled( false );
+}
+
+
+IViewPortPanel* TFCViewport::CreatePanelByName(const char *szPanelName)
+{
+ IViewPortPanel* newpanel = NULL;
+
+// Up here, strcmp against each type of panel we know how to create.
+// else if ( Q_strcmp(PANEL_OVERVIEW, szPanelName) == 0 )
+// {
+// newpanel = new CCSMapOverview( this );
+// }
+
+ // create a generic base panel, don't add twice
+ newpanel = BaseClass::CreatePanelByName( szPanelName );
+
+ return newpanel;
+}
+
+int TFCViewport::GetDeathMessageStartHeight( void )
+{
+ int x = YRES(2);
+
+ IViewPortPanel *spectator = gViewPortInterface->FindPanelByName( PANEL_SPECGUI );
+
+ //TODO: Link to actual height of spectator bar
+ if ( spectator && spectator->IsVisible() )
+ {
+ x += YRES(52);
+ }
+
+ return x;
+}
+
diff --git a/game/client/tfc/vgui/tfcviewport.h b/game/client/tfc/vgui/tfcviewport.h
new file mode 100644
index 0000000..625d452
--- /dev/null
+++ b/game/client/tfc/vgui/tfcviewport.h
@@ -0,0 +1,40 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef TFCVIEWPORT_H
+#define TFCVIEWPORT_H
+
+
+#include "tfc_shareddefs.h"
+#include "baseviewport.h"
+
+
+using namespace vgui;
+
+namespace vgui
+{
+ class Panel;
+}
+
+class TFCViewport : public CBaseViewport
+{
+
+private:
+ DECLARE_CLASS_SIMPLE( TFCViewport, CBaseViewport );
+
+public:
+
+ IViewPortPanel* CreatePanelByName(const char *szPanelName);
+ void CreateDefaultPanels( void );
+
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
+
+ int GetDeathMessageStartHeight( void );
+};
+
+
+#endif // TFCViewport_H
diff --git a/game/client/tfc/vgui/vgui_rootpanel_tfc.cpp b/game/client/tfc/vgui/vgui_rootpanel_tfc.cpp
new file mode 100644
index 0000000..699a997
--- /dev/null
+++ b/game/client/tfc/vgui/vgui_rootpanel_tfc.cpp
@@ -0,0 +1,106 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+#include "cbase.h"
+#include "vgui_int.h"
+#include "ienginevgui.h"
+#include "vgui_rootpanel_tfc.h"
+#include "vgui/IVGui.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+C_TFCRootPanel *g_pRootPanel = NULL;
+
+
+//-----------------------------------------------------------------------------
+// Global functions.
+//-----------------------------------------------------------------------------
+void VGUI_CreateClientDLLRootPanel( void )
+{
+ g_pRootPanel = new C_TFCRootPanel( enginevgui->GetPanel( PANEL_CLIENTDLL ) );
+}
+
+void VGUI_DestroyClientDLLRootPanel( void )
+{
+ delete g_pRootPanel;
+ g_pRootPanel = NULL;
+}
+
+vgui::VPANEL VGui_GetClientDLLRootPanel( void )
+{
+ return g_pRootPanel->GetVPanel();
+}
+
+
+//-----------------------------------------------------------------------------
+// C_TFCRootPanel implementation.
+//-----------------------------------------------------------------------------
+C_TFCRootPanel::C_TFCRootPanel( vgui::VPANEL parent )
+ : BaseClass( NULL, "TFC Root Panel" )
+{
+ SetParent( parent );
+ SetPaintEnabled( false );
+ SetPaintBorderEnabled( false );
+ SetPaintBackgroundEnabled( false );
+
+ // This panel does post child painting
+ SetPostChildPaintEnabled( true );
+
+ // Make it screen sized
+ SetBounds( 0, 0, ScreenWidth(), ScreenHeight() );
+
+ // Ask for OnTick messages
+ vgui::ivgui()->AddTickSignal( GetVPanel() );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+C_TFCRootPanel::~C_TFCRootPanel( void )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void C_TFCRootPanel::PostChildPaint()
+{
+ BaseClass::PostChildPaint();
+
+ // Draw all panel effects
+ RenderPanelEffects();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: For each panel effect, check if it wants to draw and draw it on
+// this panel/surface if so
+//-----------------------------------------------------------------------------
+void C_TFCRootPanel::RenderPanelEffects( void )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void C_TFCRootPanel::OnTick( void )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Reset effects on level load/shutdown
+//-----------------------------------------------------------------------------
+void C_TFCRootPanel::LevelInit( void )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void C_TFCRootPanel::LevelShutdown( void )
+{
+}
+
diff --git a/game/client/tfc/vgui/vgui_rootpanel_tfc.h b/game/client/tfc/vgui/vgui_rootpanel_tfc.h
new file mode 100644
index 0000000..7ed80e3
--- /dev/null
+++ b/game/client/tfc/vgui/vgui_rootpanel_tfc.h
@@ -0,0 +1,56 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef VGUI_ROOTPANEL_TFC_H
+#define VGUI_ROOTPANEL_TFC_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include <vgui_controls/Panel.h>
+#include <vgui_controls/EditablePanel.h>
+#include "utlvector.h"
+
+
+class CPanelEffect;
+
+
+// Serial under of effect, for safe lookup
+typedef unsigned int EFFECT_HANDLE;
+
+//-----------------------------------------------------------------------------
+// Purpose: Sits between engine and client .dll panels
+// Responsible for drawing screen overlays
+//-----------------------------------------------------------------------------
+class C_TFCRootPanel : public vgui::Panel
+{
+ typedef vgui::Panel BaseClass;
+public:
+ C_TFCRootPanel( vgui::VPANEL parent );
+ virtual ~C_TFCRootPanel( void );
+
+ // Draw Panel effects here
+ virtual void PostChildPaint();
+
+ // Clear list of Panel Effects
+ virtual void LevelInit( void );
+ virtual void LevelShutdown( void );
+
+ // Run effects and let them decide whether to remove themselves
+ void OnTick( void );
+
+private:
+
+ // Render all panel effects
+ void RenderPanelEffects( void );
+
+ // List of current panel effects
+ CUtlVector< CPanelEffect *> m_Effects;
+};
+
+
+#endif // VGUI_ROOTPANEL_TFC_H