137 lines
4.5 KiB
C++
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;
|
|
}
|