diff options
Diffstat (limited to 'game/client/tf/tf_input_main.cpp')
| -rw-r--r-- | game/client/tf/tf_input_main.cpp | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/game/client/tf/tf_input_main.cpp b/game/client/tf/tf_input_main.cpp new file mode 100644 index 0000000..1c2fe3f --- /dev/null +++ b/game/client/tf/tf_input_main.cpp @@ -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 ); + } +}
\ No newline at end of file |