hl2_src-leak-2017/src/game/client/tf2/c_tf_class_commando.cpp

137 lines
4.5 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "c_tf_class_commando.h"
#include "usercmd.h"
//=============================================================================
//
// Commando Data Table
//
BEGIN_RECV_TABLE_NOBASE( C_PlayerClassCommando, DT_PlayerClassCommandoData )
RecvPropInt ( RECVINFO( m_ClassData.m_bCanBullRush ) ),
RecvPropInt ( RECVINFO( m_ClassData.m_bBullRush ) ),
RecvPropVector ( RECVINFO( m_ClassData.m_vecBullRushDir ) ),
RecvPropVector ( RECVINFO( m_ClassData.m_vecBullRushViewDir ) ),
RecvPropVector ( RECVINFO( m_ClassData.m_vecBullRushViewGoalDir ) ),
RecvPropFloat ( RECVINFO( m_ClassData.m_flBullRushTime ) ),
RecvPropFloat ( RECVINFO( m_ClassData.m_flDoubleTapForwardTime ) ),
END_RECV_TABLE()
BEGIN_PREDICTION_DATA_NO_BASE( C_PlayerClassCommando )
DEFINE_PRED_TYPEDESCRIPTION( m_ClassData, PlayerClassCommandoData_t ),
END_PREDICTION_DATA()
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
C_PlayerClassCommando::C_PlayerClassCommando( C_BaseTFPlayer *pPlayer ) :
C_PlayerClass( pPlayer )
{
m_ClassData.m_bCanBullRush = false;
m_ClassData.m_bBullRush = false;
m_ClassData.m_vecBullRushDir.Init();
m_ClassData.m_vecBullRushViewDir.Init();
m_ClassData.m_vecBullRushViewGoalDir.Init();
m_ClassData.m_flBullRushTime = COMMANDO_TIME_INVALID;
m_ClassData.m_flDoubleTapForwardTime = COMMANDO_TIME_INVALID;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
C_PlayerClassCommando::~C_PlayerClassCommando()
{
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_PlayerClassCommando::ClassThink( void )
{
CheckBullRushState();
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_PlayerClassCommando::PostClassThink( void )
{
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_PlayerClassCommando::ClassPreDataUpdate( void )
{
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_PlayerClassCommando::ClassOnDataChanged( void )
{
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_PlayerClassCommando::CreateMove( float flInputSampleTime, CUserCmd *pCmd )
{
if ( m_ClassData.m_bBullRush )
{
pCmd->viewangles = m_ClassData.m_vecBullRushViewDir;
QAngle angles = m_ClassData.m_vecBullRushViewDir;
engine->SetViewAngles( angles );
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool C_PlayerClassCommando::CanGetInVehicle( void )
{
if ( m_ClassData.m_bBullRush )
return false;
return true;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_PlayerClassCommando::CheckBullRushState( void )
{
if ( m_ClassData.m_bBullRush )
{
InterpolateBullRushViewAngles();
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_PlayerClassCommando::InterpolateBullRushViewAngles( void )
{
// Determine the fraction.
if ( m_ClassData.m_flBullRushTime < COMMANDO_BULLRUSH_VIEWDELTA_TEST )
{
m_ClassData.m_vecBullRushViewDir = m_ClassData.m_vecBullRushViewGoalDir;
return;
}
float flFraction = 1.0f - ( ( m_ClassData.m_flBullRushTime - COMMANDO_BULLRUSH_VIEWDELTA_TEST ) / COMMANDO_BULLRUSH_VIEWDELTA_TIME );
QAngle angCurrent;
InterpolateAngles( m_ClassData.m_vecBullRushViewDir, m_ClassData.m_vecBullRushViewGoalDir, angCurrent, flFraction );
NormalizeAngles( angCurrent );
m_ClassData.m_vecBullRushViewDir = angCurrent;
}