1
This commit is contained in:
170
game/client/tf/tf_input_main.cpp
Normal file
170
game/client/tf/tf_input_main.cpp
Normal file
@ -0,0 +1,170 @@
|
||||
//========= 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 );
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user