Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

322 lines
8.0 KiB

//========= 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>
// cstrike specific dialogs
#include "cstriketextwindow.h"
#include "cstriketeammenu.h"
#include "cstrikeclassmenu.h"
#include "cstrikebuymenu.h"
#include "cstrikebuyequipmenu.h"
#include "cstrikespectatorgui.h"
#include "cstrikeclientscoreboard.h"
#include "clientmode_csnormal.h"
#include "IGameUIFuncs.h"
// viewport definitions
#include <baseviewport.h>
#include "counterstrikeviewport.h"
#include "cs_gamerules.h"
// #include "c_user_message_register.h"
#include "vguicenterprint.h"
#include "text_message.h"
static void OpenPanelWithCheck( const char *panelToOpen, const char *panelToCheck )
{
IViewPortPanel *checkPanel = gViewPortInterface->FindPanelByName( panelToCheck );
if ( !checkPanel || !checkPanel->IsVisible() )
{
gViewPortInterface->ShowPanel( panelToOpen, true );
}
}
CON_COMMAND( buyequip, "Show equipment buy menu" )
{
C_CSPlayer *pPlayer = C_CSPlayer::GetLocalCSPlayer();
if( pPlayer && pPlayer->m_lifeState == LIFE_ALIVE && pPlayer->State_Get() == STATE_ACTIVE )
{
if( !pPlayer->IsInBuyZone() )
{
internalCenterPrint->Print( "#Cstrike_NotInBuyZone" );
}
else if( CSGameRules()->IsBuyTimeElapsed() )
{
char strBuyTime[16];
Q_snprintf( strBuyTime, sizeof( strBuyTime ), "%d", (int)CSGameRules()->GetBuyTimeLength() );
wchar_t buffer[128];
wchar_t buytime[16];
g_pVGuiLocalize->ConvertANSIToUnicode( strBuyTime, buytime, sizeof(buytime) );
g_pVGuiLocalize->ConstructString( buffer, sizeof(buffer), g_pVGuiLocalize->Find("#Cstrike_TitlesTXT_Cant_buy"), 1, buytime );
internalCenterPrint->Print( buffer );
}
else
{
if( pPlayer->GetTeamNumber() == TEAM_CT )
{
OpenPanelWithCheck( PANEL_BUY_EQUIP_CT, PANEL_BUY_CT );
}
else if( pPlayer->GetTeamNumber() == TEAM_TERRORIST )
{
OpenPanelWithCheck( PANEL_BUY_EQUIP_TER, PANEL_BUY_TER );
}
}
}
}
CON_COMMAND( buymenu, "Show main buy menu" )
{
C_CSPlayer *pPlayer = C_CSPlayer::GetLocalCSPlayer();
if( pPlayer )
{
if ( pPlayer->m_lifeState != LIFE_ALIVE && pPlayer->State_Get() != STATE_ACTIVE )
return;
if( !pPlayer->IsInBuyZone() )
{
internalCenterPrint->Print( "#Cstrike_NotInBuyZone" );
}
else if( CSGameRules()->IsBuyTimeElapsed() )
{
char strBuyTime[16];
Q_snprintf( strBuyTime, sizeof( strBuyTime ), "%d", (int)CSGameRules()->GetBuyTimeLength() );
wchar_t buffer[128];
wchar_t buytime[16];
g_pVGuiLocalize->ConvertANSIToUnicode( strBuyTime, buytime, sizeof(buytime) );
g_pVGuiLocalize->ConstructString( buffer, sizeof(buffer), g_pVGuiLocalize->Find("#Cstrike_TitlesTXT_Cant_buy"), 1, buytime );
internalCenterPrint->Print( buffer );
}
else
{
if( pPlayer->GetTeamNumber() == TEAM_CT )
{
OpenPanelWithCheck( PANEL_BUY_CT, PANEL_BUY_EQUIP_CT );
}
else if( pPlayer->GetTeamNumber() == TEAM_TERRORIST )
{
OpenPanelWithCheck( PANEL_BUY_TER, PANEL_BUY_EQUIP_TER );
}
}
}
}
CON_COMMAND( chooseteam, "Choose a new team" )
{
C_CSPlayer *pPlayer = C_CSPlayer::GetLocalCSPlayer();
if ( pPlayer && pPlayer->CanShowTeamMenu() )
{
gViewPortInterface->ShowPanel( PANEL_TEAM, true );
}
}
CON_COMMAND_F( spec_help, "Show spectator help screen", FCVAR_CLIENTCMD_CAN_EXECUTE)
{
if ( gViewPortInterface )
gViewPortInterface->ShowPanel( PANEL_INFO, true );
}
CON_COMMAND_F( spec_menu, "Activates spectator menu", FCVAR_CLIENTCMD_CAN_EXECUTE)
{
bool bShowIt = true;
C_CSPlayer *pPlayer = C_CSPlayer::GetLocalCSPlayer();
if ( pPlayer && !pPlayer->IsObserver() )
return;
if ( args.ArgC() == 2 )
{
bShowIt = atoi( args[ 1 ] ) == 1;
}
if ( gViewPortInterface )
gViewPortInterface->ShowPanel( PANEL_SPECMENU, bShowIt );
}
CON_COMMAND_F( togglescores, "Toggles score panel", FCVAR_CLIENTCMD_CAN_EXECUTE)
{
if ( !gViewPortInterface )
return;
IViewPortPanel *scoreboard = gViewPortInterface->FindPanelByName( PANEL_SCOREBOARD );
if ( !scoreboard )
return;
if ( scoreboard->IsVisible() )
{
gViewPortInterface->ShowPanel( scoreboard, false );
GetClientVoiceMgr()->StopSquelchMode();
}
else
{
gViewPortInterface->ShowPanel( scoreboard, true );
}
}
//-----------------------------------------------------------------------------
// Purpose: called when the VGUI subsystem starts up
// Creates the sub panels and initialises them
//-----------------------------------------------------------------------------
void CounterStrikeViewport::Start( IGameUIFuncs *pGameUIFuncs, IGameEventManager2 * pGameEventManager )
{
BaseClass::Start( pGameUIFuncs, pGameEventManager );
}
void CounterStrikeViewport::ApplySchemeSettings( vgui::IScheme *pScheme )
{
BaseClass::ApplySchemeSettings( pScheme );
gHUD.InitColors( pScheme );
SetPaintBackgroundEnabled( false );
}
IViewPortPanel* CounterStrikeViewport::CreatePanelByName(const char *szPanelName)
{
IViewPortPanel* newpanel = NULL;
// overwrite MOD specific panel creation
if ( Q_strcmp(PANEL_SCOREBOARD, szPanelName) == 0)
{
newpanel = new CCSClientScoreBoardDialog( this );
}
else if ( Q_strcmp(PANEL_SPECGUI, szPanelName) == 0 )
{
newpanel = new CCSSpectatorGUI( this );
}
else if ( Q_strcmp(PANEL_CLASS_CT, szPanelName) == 0 )
{
newpanel = new CClassMenu_CT( this );
}
else if ( Q_strcmp(PANEL_CLASS_TER, szPanelName) == 0 )
{
newpanel = new CClassMenu_TER( this );
}
else if ( Q_strcmp(PANEL_BUY_CT, szPanelName) == 0 )
{
newpanel = new CCSBuyMenu_CT( this );
}
else if ( Q_strcmp(PANEL_BUY_TER, szPanelName) == 0 )
{
newpanel = new CCSBuyMenu_TER( this );
}
else if ( Q_strcmp(PANEL_BUY_EQUIP_CT, szPanelName) == 0 )
{
newpanel = new CCSBuyEquipMenu_CT( this );
}
else if ( Q_strcmp(PANEL_BUY_EQUIP_TER, szPanelName) == 0 )
{
newpanel = new CCSBuyEquipMenu_TER( this );
}
else if ( Q_strcmp(PANEL_TEAM, szPanelName) == 0 )
{
newpanel = new CCSTeamMenu( this );
}
else if ( Q_strcmp(PANEL_INFO, szPanelName) == 0 )
{
newpanel = new CCSTextWindow( this );
}
else
{
// create a generic base panel, don't add twice
newpanel = BaseClass::CreatePanelByName( szPanelName );
}
return newpanel;
}
void CounterStrikeViewport::CreateDefaultPanels( void )
{
AddNewPanel( CreatePanelByName( PANEL_TEAM ), "PANEL_TEAM" );
AddNewPanel( CreatePanelByName( PANEL_CLASS_CT ), "PANEL_CLASS_CT" );
AddNewPanel( CreatePanelByName( PANEL_CLASS_TER ), "PANEL_CLASS_TER" );
AddNewPanel( CreatePanelByName( PANEL_BUY_CT ), "PANEL_BUY_CT" );
AddNewPanel( CreatePanelByName( PANEL_BUY_TER ), "PANEL_BUY_TER" );
AddNewPanel( CreatePanelByName( PANEL_BUY_EQUIP_CT ), "PANEL_BUY_EQUIP_CT" );
AddNewPanel( CreatePanelByName( PANEL_BUY_EQUIP_TER ), "PANEL_BUY_EQUIP_TER" );
BaseClass::CreateDefaultPanels();
}
int CounterStrikeViewport::GetDeathMessageStartHeight( void )
{
int x = YRES(2);
if ( g_pSpectatorGUI && g_pSpectatorGUI->IsVisible() )
{
x += g_pSpectatorGUI->GetTopBarHeight();
}
return x;
}
/*
==========================
HUD_ChatInputPosition
Sets the location of the input for chat text
==========================
*/
//MIKETODO: positioning of chat text (and other engine output)
/*
#include "Exports.h"
void CL_DLLEXPORT HUD_ChatInputPosition( int *x, int *y )
{
RecClChatInputPosition( x, y );
if ( gViewPortInterface )
{
gViewPortInterface->ChatInputPosition( x, y );
}
}
EXPOSE_SINGLE_INTERFACE(CounterStrikeViewport, IClientVGUI, CLIENTVGUI_INTERFACE_VERSION);
*/