mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-29 17:43:01 +00:00
273 lines
6.6 KiB
C++
273 lines
6.6 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//=============================================================================//
|
|
|
|
#include "cbase.h"
|
|
#include "cstrikeclassmenu.h"
|
|
|
|
#include <KeyValues.h>
|
|
#include <filesystem.h>
|
|
#include <vgui_controls/Button.h>
|
|
#include <vgui/IVGui.h>
|
|
|
|
#include "hud.h" // for gEngfuncs
|
|
#include "cs_gamerules.h"
|
|
|
|
using namespace vgui;
|
|
|
|
|
|
// ----------------------------------------------------------------------------- //
|
|
// Class image panels. These maintain a list of the class image panels so
|
|
// it can render 3D images into them.
|
|
// ----------------------------------------------------------------------------- //
|
|
|
|
CUtlVector<CCSClassImagePanel*> g_ClassImagePanels;
|
|
|
|
|
|
CCSClassImagePanel::CCSClassImagePanel( vgui::Panel *pParent, const char *pName )
|
|
: vgui::ImagePanel( pParent, pName )
|
|
{
|
|
g_ClassImagePanels.AddToTail( this );
|
|
m_ModelName[0] = 0;
|
|
}
|
|
|
|
CCSClassImagePanel::~CCSClassImagePanel()
|
|
{
|
|
g_ClassImagePanels.FindAndRemove( this );
|
|
}
|
|
|
|
void CCSClassImagePanel::ApplySettings( KeyValues *inResourceData )
|
|
{
|
|
const char *pName = inResourceData->GetString( "3DModel" );
|
|
if ( pName )
|
|
{
|
|
Q_strncpy( m_ModelName, pName, sizeof( m_ModelName ) );
|
|
}
|
|
|
|
BaseClass::ApplySettings( inResourceData );
|
|
}
|
|
|
|
|
|
void CCSClassImagePanel::Paint()
|
|
{
|
|
BaseClass::Paint();
|
|
}
|
|
|
|
|
|
// ----------------------------------------------------------------------------- //
|
|
// CClassMenu_TER
|
|
// ----------------------------------------------------------------------------- //
|
|
|
|
CClassMenu_TER::CClassMenu_TER(IViewPort *pViewPort) : CClassMenu(pViewPort, PANEL_CLASS_TER)
|
|
{
|
|
LoadControlSettings( "Resource/UI/ClassMenu_TER.res" );
|
|
CreateBackground( this );
|
|
m_backgroundLayoutFinished = false;
|
|
}
|
|
|
|
const char *CClassMenu_TER::GetName( void )
|
|
{
|
|
return PANEL_CLASS_TER;
|
|
}
|
|
|
|
void CClassMenu_TER::ShowPanel(bool bShow)
|
|
{
|
|
if ( bShow)
|
|
{
|
|
engine->CheckPoint( "ClassMenu" );
|
|
}
|
|
|
|
BaseClass::ShowPanel( bShow );
|
|
|
|
}
|
|
|
|
void CClassMenu_TER::SetVisible(bool state)
|
|
{
|
|
BaseClass::SetVisible(state);
|
|
|
|
if ( state )
|
|
{
|
|
Panel *pAutoButton = FindChildByName( "autoselect_t" );
|
|
if ( pAutoButton )
|
|
{
|
|
pAutoButton->RequestFocus();
|
|
}
|
|
}
|
|
}
|
|
|
|
bool modelExists( const char *search, const CUtlVector< const char * > &names )
|
|
{
|
|
for ( int i=0; i<names.Count(); ++i )
|
|
{
|
|
if ( Q_stristr( names[i], search ) != NULL )
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void CClassMenu_TER::Update()
|
|
{
|
|
C_CSPlayer *pLocalPlayer = C_CSPlayer::GetLocalCSPlayer();
|
|
|
|
if ( pLocalPlayer && pLocalPlayer->PlayerClass() >= FIRST_T_CLASS && pLocalPlayer->PlayerClass() <= LAST_T_CLASS )
|
|
{
|
|
SetVisibleButton( "CancelButton", true );
|
|
}
|
|
else
|
|
{
|
|
SetVisibleButton( "CancelButton", false );
|
|
}
|
|
|
|
// if we don't have the new models installed,
|
|
// turn off the militia and spetsnaz buttons
|
|
SetVisibleButton( "militia", false );
|
|
}
|
|
|
|
|
|
Panel *CClassMenu_TER::CreateControlByName(const char *controlName)
|
|
{
|
|
if ( Q_stricmp( controlName, "CSClassImagePanel" ) == 0 )
|
|
{
|
|
return new CCSClassImagePanel( NULL, controlName );
|
|
}
|
|
|
|
return BaseClass::CreateControlByName( controlName );
|
|
}
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------- //
|
|
// CClassMenu_CT
|
|
// ----------------------------------------------------------------------------- //
|
|
|
|
CClassMenu_CT::CClassMenu_CT(IViewPort *pViewPort) : CClassMenu(pViewPort, PANEL_CLASS_CT)
|
|
{
|
|
LoadControlSettings( "Resource/UI/ClassMenu_CT.res" );
|
|
CreateBackground( this );
|
|
m_backgroundLayoutFinished = false;
|
|
}
|
|
|
|
Panel *CClassMenu_CT::CreateControlByName(const char *controlName)
|
|
{
|
|
if ( Q_stricmp( controlName, "CSClassImagePanel" ) == 0 )
|
|
{
|
|
return new CCSClassImagePanel( NULL, controlName );
|
|
}
|
|
|
|
return BaseClass::CreateControlByName( controlName );
|
|
}
|
|
|
|
const char *CClassMenu_CT::GetName( void )
|
|
{
|
|
return PANEL_CLASS_CT;
|
|
}
|
|
|
|
void CClassMenu_CT::ShowPanel(bool bShow)
|
|
{
|
|
if ( bShow)
|
|
{
|
|
engine->CheckPoint( "ClassMenu" );
|
|
}
|
|
|
|
BaseClass::ShowPanel( bShow );
|
|
|
|
}
|
|
|
|
void CClassMenu_CT::SetVisible(bool state)
|
|
{
|
|
BaseClass::SetVisible(state);
|
|
|
|
if ( state )
|
|
{
|
|
Panel *pAutoButton = FindChildByName( "autoselect_ct" );
|
|
if ( pAutoButton )
|
|
{
|
|
pAutoButton->RequestFocus();
|
|
}
|
|
}
|
|
}
|
|
|
|
void CClassMenu_CT::Update()
|
|
{
|
|
C_CSPlayer *pPlayer = C_CSPlayer::GetLocalCSPlayer();
|
|
|
|
if ( pPlayer && pPlayer->PlayerClass() >= FIRST_CT_CLASS && pPlayer->PlayerClass() <= LAST_CT_CLASS )
|
|
{
|
|
SetVisibleButton( "CancelButton", true );
|
|
}
|
|
else
|
|
{
|
|
SetVisibleButton( "CancelButton", false );
|
|
}
|
|
|
|
// if we don't have the new models installed,
|
|
// turn off the militia and spetsnaz buttons
|
|
SetVisibleButton( "spetsnaz", false );
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: The CS background is painted by image panels, so we should do nothing
|
|
//-----------------------------------------------------------------------------
|
|
void CClassMenu_TER::PaintBackground()
|
|
{
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Scale / center the window
|
|
//-----------------------------------------------------------------------------
|
|
void CClassMenu_TER::PerformLayout()
|
|
{
|
|
BaseClass::PerformLayout();
|
|
|
|
// stretch the window to fullscreen
|
|
if ( !m_backgroundLayoutFinished )
|
|
LayoutBackgroundPanel( this );
|
|
m_backgroundLayoutFinished = true;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CClassMenu_TER::ApplySchemeSettings( vgui::IScheme *pScheme )
|
|
{
|
|
BaseClass::ApplySchemeSettings( pScheme );
|
|
ApplyBackgroundSchemeSettings( this, pScheme );
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: The CS background is painted by image panels, so we should do nothing
|
|
//-----------------------------------------------------------------------------
|
|
void CClassMenu_CT::PaintBackground()
|
|
{
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Scale / center the window
|
|
//-----------------------------------------------------------------------------
|
|
void CClassMenu_CT::PerformLayout()
|
|
{
|
|
BaseClass::PerformLayout();
|
|
|
|
// stretch the window to fullscreen
|
|
if ( !m_backgroundLayoutFinished )
|
|
LayoutBackgroundPanel( this );
|
|
m_backgroundLayoutFinished = true;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CClassMenu_CT::ApplySchemeSettings( vgui::IScheme *pScheme )
|
|
{
|
|
BaseClass::ApplySchemeSettings( pScheme );
|
|
ApplyBackgroundSchemeSettings( this, pScheme );
|
|
}
|
|
|