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.
137 lines
4.5 KiB
137 lines
4.5 KiB
5 years ago
|
//========= 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;
|
||
|
}
|