//========= 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; }