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.
170 lines
5.2 KiB
170 lines
5.2 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose: TF2 specific input handling
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================
|
||
|
#include "cbase.h"
|
||
|
#include "kbutton.h"
|
||
|
#include "input.h"
|
||
|
|
||
|
#include "c_tf_player.h"
|
||
|
#include "cam_thirdperson.h"
|
||
|
|
||
|
extern ConVar thirdperson_platformer;
|
||
|
extern ConVar cam_idealyaw;
|
||
|
extern ConVar cl_yawspeed;
|
||
|
extern kbutton_t in_left;
|
||
|
extern kbutton_t in_right;
|
||
|
extern CThirdPersonManager g_ThirdPersonManager;
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: TF Input interface
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CTFInput : public CInput
|
||
|
{
|
||
|
public:
|
||
|
CTFInput()
|
||
|
: m_angThirdPersonOffset( 0.f, 0.f, 0.f )
|
||
|
{}
|
||
|
virtual float CAM_CapYaw( float fVal ) const OVERRIDE;
|
||
|
virtual float CAM_CapPitch( float fVal ) const OVERRIDE;
|
||
|
virtual void AdjustYaw( float speed, QAngle& viewangles );
|
||
|
virtual float JoyStickAdjustYaw( float flSpeed ) OVERRIDE;
|
||
|
virtual void ApplyMouse( QAngle& viewangles, CUserCmd *cmd, float mouse_x, float mouse_y ) OVERRIDE;
|
||
|
private:
|
||
|
|
||
|
QAngle m_angThirdPersonOffset;
|
||
|
};
|
||
|
|
||
|
static CTFInput g_Input;
|
||
|
|
||
|
// Expose this interface
|
||
|
IInput *input = ( IInput * )&g_Input;
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
float CTFInput::CAM_CapYaw( float fVal ) const
|
||
|
{
|
||
|
CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
|
||
|
if ( !pPlayer )
|
||
|
return fVal;
|
||
|
|
||
|
if ( pPlayer->m_Shared.InCond( TF_COND_SHIELD_CHARGE ) )
|
||
|
{
|
||
|
float flChargeYawCap = pPlayer->m_Shared.CalculateChargeCap();
|
||
|
|
||
|
if ( fVal > flChargeYawCap )
|
||
|
return flChargeYawCap;
|
||
|
else if ( fVal < -flChargeYawCap )
|
||
|
return -flChargeYawCap;
|
||
|
}
|
||
|
|
||
|
return fVal;
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
float CTFInput::CAM_CapPitch( float fVal ) const
|
||
|
{
|
||
|
CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
|
||
|
if ( !pPlayer )
|
||
|
return fVal;
|
||
|
|
||
|
return fVal;
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTFInput::AdjustYaw( float speed, QAngle& viewangles )
|
||
|
{
|
||
|
if ( !(in_strafe.state & 1) )
|
||
|
{
|
||
|
float yaw_right = speed*cl_yawspeed.GetFloat() * KeyState (&in_right);
|
||
|
float yaw_left = speed*cl_yawspeed.GetFloat() * KeyState (&in_left);
|
||
|
|
||
|
CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
|
||
|
if ( pPlayer && pPlayer->m_Shared.InCond( TF_COND_SHIELD_CHARGE ) )
|
||
|
{
|
||
|
float flChargeYawCap = pPlayer->m_Shared.CalculateChargeCap();
|
||
|
|
||
|
if ( yaw_right > flChargeYawCap )
|
||
|
yaw_right = flChargeYawCap;
|
||
|
else if ( yaw_right < -flChargeYawCap )
|
||
|
yaw_right = -flChargeYawCap;
|
||
|
if ( yaw_left > flChargeYawCap )
|
||
|
yaw_left = flChargeYawCap;
|
||
|
else if ( yaw_left < -flChargeYawCap )
|
||
|
yaw_left = -flChargeYawCap;
|
||
|
}
|
||
|
|
||
|
viewangles[YAW] -= yaw_right;
|
||
|
viewangles[YAW] += yaw_left;
|
||
|
}
|
||
|
|
||
|
if ( CAM_IsThirdPerson() )
|
||
|
{
|
||
|
if ( thirdperson_platformer.GetInt() )
|
||
|
{
|
||
|
float side = KeyState(&in_moveleft) - KeyState(&in_moveright);
|
||
|
float forward = KeyState(&in_forward) - KeyState(&in_back);
|
||
|
|
||
|
if ( side || forward )
|
||
|
{
|
||
|
viewangles[YAW] = RAD2DEG(atan2(side, forward)) + g_ThirdPersonManager.GetCameraOffsetAngles()[ YAW ];
|
||
|
}
|
||
|
if ( side || forward || KeyState (&in_right) || KeyState (&in_left) )
|
||
|
{
|
||
|
cam_idealyaw.SetValue( g_ThirdPersonManager.GetCameraOffsetAngles()[ YAW ] - viewangles[ YAW ] );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
float CTFInput::JoyStickAdjustYaw( float flSpeed )
|
||
|
{
|
||
|
// Make sure we're not strafing
|
||
|
if ( flSpeed && !(in_strafe.state & 1) )
|
||
|
{
|
||
|
CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
|
||
|
if ( pPlayer && pPlayer->m_Shared.InCond( TF_COND_SHIELD_CHARGE ) )
|
||
|
{
|
||
|
float flChargeYawCap = pPlayer->m_Shared.CalculateChargeCap();
|
||
|
|
||
|
if ( flSpeed > 0.f && flSpeed > flChargeYawCap )
|
||
|
flSpeed = flChargeYawCap;
|
||
|
else if ( flSpeed < 0.f && flSpeed < -flChargeYawCap )
|
||
|
flSpeed = -flChargeYawCap;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return flSpeed;
|
||
|
}
|
||
|
|
||
|
ConVar tf_halloween_kart_cam_follow( "tf_halloween_kart_cam_follow", "0.3f", FCVAR_CHEAT );
|
||
|
void CTFInput::ApplyMouse( QAngle& viewangles, CUserCmd *cmd, float mouse_x, float mouse_y )
|
||
|
{
|
||
|
CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
|
||
|
if ( pPlayer && pPlayer->m_Shared.InCond( TF_COND_HALLOWEEN_KART ) )
|
||
|
{
|
||
|
// Make the camera drift a little behind the car
|
||
|
float flDelta = pPlayer->GetTauntYaw() - m_angThirdPersonOffset[YAW];
|
||
|
float flSign = Sign( flDelta );
|
||
|
flDelta = Max( 2.f , (float)fabs(flDelta) ) * flSign;
|
||
|
float flSpeed = gpGlobals->frametime * flDelta * flDelta * tf_halloween_kart_cam_follow.GetFloat();
|
||
|
m_angThirdPersonOffset[YAW] = Approach( pPlayer->GetTauntYaw(), m_angThirdPersonOffset[YAW], flSpeed );
|
||
|
viewangles[YAW] = m_angThirdPersonOffset[YAW];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
CInput::ApplyMouse( viewangles, cmd, mouse_x, mouse_y );
|
||
|
}
|
||
|
}
|