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.
 
 
 
 
 
 

173 lines
4.4 KiB

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Normal HUD mode
//
// $Workfile: $
// $Date: $
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "hud_chat.h"
#include "clientmode_tfnormal.h"
#include "clientmode.h"
#include "hud.h"
#include "iinput.h"
#include "c_basetfplayer.h"
#include "hud_timer.h"
#include "usercmd.h"
#include "in_buttons.h"
#include "c_tf_playerclass.h"
#include "engine/IEngineSound.h"
#include <vgui/IInput.h>
#include <vgui/IPanel.h>
#include <vgui_controls/AnimationController.h>
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
//-----------------------------------------------------------------------------
// Purpose: Instance the singleton and expose the interface to it.
// Output : IClientMode
//-----------------------------------------------------------------------------
IClientMode *GetClientModeNormal( void )
{
static ClientModeTFNormal g_ClientModeNormal;
return &g_ClientModeNormal;
}
ClientModeTFNormal::ClientModeTFNormal()
{
m_pViewport = new Viewport();
m_pViewport->Start( gameuifuncs, gameeventmanager );
}
ClientModeTFNormal::Viewport::Viewport()
{
// use a custom scheme for the hud
m_bHumanScheme = true;
vgui::HScheme scheme = vgui::scheme()->LoadSchemeFromFileEx( enginevgui->GetPanel( PANEL_CLIENTDLL ), "resource/ClientSchemeHuman.res", "HudScheme");
SetScheme(scheme);
}
void ClientModeTFNormal::Viewport::OnThink()
{
BaseClass::OnThink();
// See if scheme should change
C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer();
if(!pPlayer)
return;
int team = pPlayer->GetTeamNumber();
if ( !team )
return;
bool human = ( team == TEAM_HUMANS ) ? true : false;
if ( human != m_bHumanScheme )
{
ReloadScheme();
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void ClientModeTFNormal::Viewport::ReloadScheme()
{
// See if scheme should change
C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer();
if(!pPlayer)
return;
const char *schemeFile = NULL;
int team = pPlayer->GetTeamNumber();
if ( team )
{
m_bHumanScheme = ( team == TEAM_HUMANS ) ? true : false;
if ( m_bHumanScheme )
{
schemeFile = "resource/ClientSchemeHuman.res";
}
else
{
schemeFile = "resource/ClientSchemeAlien.res";
}
}
// BaseClass::ReloadScheme( schemeFile );
}
//-----------------------------------------------------------------------------
// Purpose:
// Output : vgui::Panel
//-----------------------------------------------------------------------------
vgui::Panel *ClientModeTFNormal::GetMinimapParent( void )
{
return GetViewport();
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void ClientModeTFNormal::Update()
{
BaseClass::Update();
HudCommanderOverlayMgr()->Tick( );
}
//-----------------------------------------------------------------------------
// Purpose:
// Input : frametime -
// *cmd -
//-----------------------------------------------------------------------------
void ClientModeTFNormal::CreateMove( float flInputSampleTime, CUserCmd *cmd )
{
// Let the player override the view.
C_BaseTFPlayer *pPlayer = C_BaseTFPlayer::GetLocalPlayer();
if(!pPlayer)
return;
// Let the player at it
pPlayer->CreateMove( flInputSampleTime, cmd );
// Handle knockdowns
if ( pPlayer->CheckKnockdownAngleOverride() )
{
QAngle ang;
pPlayer->GetKnockdownAngles( ang );
cmd->viewangles = ang;
engine->SetViewAngles( ang );
cmd->forwardmove = cmd->sidemove = cmd->upmove = 0;
// Only keep score if it's down
cmd->buttons &= ( IN_SCORE );
}
if ( pPlayer->GetPlayerClass() )
{
C_PlayerClass *pPlayerClass = pPlayer->GetPlayerClass();
pPlayerClass->CreateMove( flInputSampleTime, cmd );
}
}
//-----------------------------------------------------------------------------
// Purpose:
// Output : Returns true on success, false on failure.
//-----------------------------------------------------------------------------
bool ClientModeTFNormal::ShouldDrawViewModel( void )
{
C_BaseTFPlayer *pPlayer = C_BaseTFPlayer::GetLocalPlayer();
if(!pPlayer)
return false;
return pPlayer->ShouldDrawViewModel();
}