Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= 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 ); } }
|