diff options
Diffstat (limited to 'game/client/tf2/c_tf_class_commando.cpp')
| -rw-r--r-- | game/client/tf2/c_tf_class_commando.cpp | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/game/client/tf2/c_tf_class_commando.cpp b/game/client/tf2/c_tf_class_commando.cpp new file mode 100644 index 0000000..4d5e78c --- /dev/null +++ b/game/client/tf2/c_tf_class_commando.cpp @@ -0,0 +1,136 @@ +//========= 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; +} |