diff options
Diffstat (limited to 'game/client/input.h')
| -rw-r--r-- | game/client/input.h | 315 |
1 files changed, 315 insertions, 0 deletions
diff --git a/game/client/input.h b/game/client/input.h new file mode 100644 index 0000000..d425b96 --- /dev/null +++ b/game/client/input.h @@ -0,0 +1,315 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//===========================================================================// + +#if !defined( INPUT_H ) +#define INPUT_H +#ifdef _WIN32 +#pragma once +#endif + +#include "iinput.h" +#include "mathlib/vector.h" +#include "kbutton.h" +#include "ehandle.h" +#include "inputsystem/AnalogCode.h" +#include "steam/isteamcontroller.h" + +typedef unsigned int CRC32_t; + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +class CKeyboardKey +{ +public: + // Name for key + char name[ 32 ]; + // Pointer to the underlying structure + kbutton_t *pkey; + // Next key in key list. + CKeyboardKey *next; +}; + +class ConVar; + +class CInput : public IInput +{ +// Interface +public: + CInput( void ); + ~CInput( void ); + + virtual void Init_All( void ); + virtual void Shutdown_All( void ); + virtual int GetButtonBits( int ); + virtual void CreateMove ( int sequence_number, float input_sample_frametime, bool active ); + virtual void ExtraMouseSample( float frametime, bool active ); + virtual bool WriteUsercmdDeltaToBuffer( bf_write *buf, int from, int to, bool isnewcommand ); + virtual void EncodeUserCmdToBuffer( bf_write& buf, int slot ); + virtual void DecodeUserCmdFromBuffer( bf_read& buf, int slot ); + + virtual CUserCmd *GetUserCmd( int sequence_number ); + + virtual void MakeWeaponSelection( C_BaseCombatWeapon *weapon ); + + virtual float KeyState( kbutton_t *key ); + virtual int KeyEvent( int down, ButtonCode_t keynum, const char *pszCurrentBinding ); + virtual kbutton_t *FindKey( const char *name ); + + virtual void ControllerCommands( void ); + virtual void Joystick_Advanced( void ); + virtual void Joystick_SetSampleTime(float frametime); + virtual void IN_SetSampleTime( float frametime ); + + virtual void AccumulateMouse( void ); + virtual void ActivateMouse( void ); + virtual void DeactivateMouse( void ); + + virtual void ClearStates( void ); + virtual float GetLookSpring( void ); + + virtual void GetFullscreenMousePos( int *mx, int *my, int *unclampedx = NULL, int *unclampedy = NULL ); + virtual void SetFullscreenMousePos( int mx, int my ); + virtual void ResetMouse( void ); + +// virtual bool IsNoClipping( void ); + virtual float GetLastForwardMove( void ); + virtual float Joystick_GetForward( void ); + virtual float Joystick_GetSide( void ); + virtual float Joystick_GetPitch( void ); + virtual float Joystick_GetYaw( void ); + virtual void ClearInputButton( int bits ); + + virtual void CAM_Think( void ); + virtual int CAM_IsThirdPerson( void ); + virtual void CAM_ToThirdPerson(void); + virtual void CAM_ToFirstPerson(void); + virtual void CAM_StartMouseMove(void); + virtual void CAM_EndMouseMove(void); + virtual void CAM_StartDistance(void); + virtual void CAM_EndDistance(void); + virtual int CAM_InterceptingMouse( void ); + + // orthographic camera info + virtual void CAM_ToOrthographic(); + virtual bool CAM_IsOrthographic() const; + virtual void CAM_OrthographicSize( float& w, float& h ) const; + + virtual float CAM_CapYaw( float fVal ) const { return fVal; } + virtual float CAM_CapPitch( float fVal ) const { return fVal; } + +#if defined( HL2_CLIENT_DLL ) + // IK back channel info + virtual void AddIKGroundContactInfo( int entindex, float minheight, float maxheight ); +#endif + virtual void LevelInit( void ); + + virtual void CAM_SetCameraThirdData( CameraThirdData_t *pCameraData, const QAngle &vecCameraOffset ); + virtual void CAM_CameraThirdThink( void ); + + virtual bool EnableJoystickMode(); + + // SteamController + bool InitializeSteamControllerGameActionSets(); + Vector2D ScaleSteamControllerLook( Vector2D vecPosition ); + void PerformSteamControllerCameraHaptics( ESteamControllerPad ePad, float flDistance ); + void PerformSteamControllerStickHaptics( ESteamControllerPad ePad, bool bFingerDown ); + Vector2D PerformSteamControllerCameraMove( ESteamControllerPad ePad, Vector2D vecPadPosition, bool bFingerDown, float flFrametime ); + void ApplySteamControllerCameraMove( QAngle& viewangles, CUserCmd *cmd, Vector2D vecPosition ); + + virtual void SetPreferredGameActionSet( GameActionSet_t action_set ); + virtual GameActionSet_t GetPreferredGameActionSet(); + virtual void SetGameActionSetFlags( GameActionSetFlags_t action_set_flags ); + + virtual bool IsSteamControllerActive(); + +// Private Implementation +protected: + // Implementation specific initialization + void Init_Camera( void ); + void Init_Keyboard( void ); + void Init_Mouse( void ); + void Shutdown_Keyboard( void ); + // Add a named key to the list queryable by the engine + void AddKeyButton( const char *name, kbutton_t *pkb ); + // Mouse/keyboard movement input helpers + void ScaleMovements( CUserCmd *cmd ); + void ComputeForwardMove( CUserCmd *cmd ); + void ComputeUpwardMove( CUserCmd *cmd ); + void ComputeSideMove( CUserCmd *cmd ); + void AdjustAngles ( float frametime ); + void ClampAngles( QAngle& viewangles ); + void AdjustPitch( float speed, QAngle& viewangles ); + virtual void AdjustYaw( float speed, QAngle& viewangles ); + float DetermineKeySpeed( float frametime ); + void GetAccumulatedMouseDeltasAndResetAccumulators( float *mx, float *my ); + void GetMouseDelta( float inmousex, float inmousey, float *pOutMouseX, float *pOutMouseY ); + void ScaleMouse( float *x, float *y ); + virtual void ApplyMouse( QAngle& viewangles, CUserCmd *cmd, float mouse_x, float mouse_y ); + virtual void MouseMove ( CUserCmd *cmd ); + + // Joystick movement input helpers + void ControllerMove ( float frametime, CUserCmd *cmd ); + void JoyStickMove ( float frametime, CUserCmd *cmd ); + float ScaleAxisValue( const float axisValue, const float axisThreshold ); + virtual float JoyStickAdjustYaw( float flSpeed ) { return flSpeed; } + virtual void SteamControllerMove( float frametime, CUserCmd *cmd ); + + // Call this to get the cursor position. The call will be logged in the VCR file if there is one. + void GetMousePos(int &x, int &y); + void SetMousePos(int x, int y); + void GetWindowCenter( int&x, int& y ); + // Called once per frame to allow convar overrides to acceleration settings when mouse is active + void CheckMouseAcclerationVars(); + + void ValidateUserCmd( CUserCmd *usercmd, int sequence_number ); + +// Private Data +private: + typedef struct + { + unsigned int AxisFlags; + unsigned int AxisMap; + unsigned int ControlMap; + } joy_axis_t; + + void DescribeJoystickAxis( char const *axis, joy_axis_t *mapping ); + char const *DescribeAxis( int index ); + + enum + { + GAME_AXIS_NONE = 0, + GAME_AXIS_FORWARD, + GAME_AXIS_PITCH, + GAME_AXIS_SIDE, + GAME_AXIS_YAW, + MAX_GAME_AXES + }; + + enum + { + CAM_COMMAND_NONE = 0, + CAM_COMMAND_TOTHIRDPERSON = 1, + CAM_COMMAND_TOFIRSTPERSON = 2 + }; + + enum + { + MOUSE_ACCEL_THRESHHOLD1 = 0, // if mouse moves > this many mickey's double it + MOUSE_ACCEL_THRESHHOLD2, // if mouse moves > this many mickey's double it a second time + MOUSE_SPEED_FACTOR, // 0 = disabled, 1 = threshold 1 enabled, 2 = threshold 2 enabled + + NUM_MOUSE_PARAMS, + }; + + // Has the mouse been initialized? + bool m_fMouseInitialized; + // Is the mosue active? + bool m_fMouseActive; + // Has the joystick advanced initialization been run? + bool m_fJoystickAdvancedInit; + // Used to support hotplugging by reinitializing the advanced joystick system when we toggle between some/none joysticks. + bool m_fHadJoysticks; + + // Accumulated mouse deltas + float m_flAccumulatedMouseXMovement; + float m_flAccumulatedMouseYMovement; + float m_flPreviousMouseXPosition; + float m_flPreviousMouseYPosition; + float m_flRemainingJoystickSampleTime; + float m_flKeyboardSampleTime; + + // Flag to restore systemparameters when exiting + bool m_fRestoreSPI; + // Original mouse parameters + int m_rgOrigMouseParms[ NUM_MOUSE_PARAMS ]; + // Current mouse parameters. + int m_rgNewMouseParms[ NUM_MOUSE_PARAMS ]; + bool m_rgCheckMouseParam[ NUM_MOUSE_PARAMS ]; + // Are the parameters valid + bool m_fMouseParmsValid; + // Joystick Axis data + joy_axis_t m_rgAxes[ MAX_JOYSTICK_AXES ]; + // List of queryable keys + CKeyboardKey *m_pKeys; + + // Is the 3rd person camera using the mouse? + bool m_fCameraInterceptingMouse; + // Are we in 3rd person view? + bool m_fCameraInThirdPerson; + // Should we move view along with mouse? + bool m_fCameraMovingWithMouse; + + + // Is the camera in distance moving mode? + bool m_fCameraDistanceMove; + // Old and current mouse position readings. + int m_nCameraOldX; + int m_nCameraOldY; + int m_nCameraX; + int m_nCameraY; + + // orthographic camera settings + bool m_CameraIsOrthographic; + + QAngle m_angPreviousViewAngles; + + float m_flLastForwardMove; + + float m_flPreviousJoystickForward; + float m_flPreviousJoystickSide; + float m_flPreviousJoystickPitch; + float m_flPreviousJoystickYaw; + + // Steam controller stuff + int m_nControllerType[MAX_JOYSTICKS + MAX_STEAM_CONTROLLERS]; + + GameActionSet_t m_PreferredGameActionSet; + GameActionSetFlags_t m_GameActionSetFlags; + + bool m_bSteamControllerGameActionsInitialized; + + class CVerifiedUserCmd + { + public: + CUserCmd m_cmd; + CRC32_t m_crc; + }; + + CUserCmd *m_pCommands; + CVerifiedUserCmd *m_pVerifiedCommands; + + CameraThirdData_t *m_pCameraThirdData; + + // Set until polled by CreateMove and cleared + CHandle< C_BaseCombatWeapon > m_hSelectedWeapon; + +#if defined( HL2_CLIENT_DLL ) + CUtlVector< CEntityGroundContact > m_EntityGroundContact; +#endif +}; + +extern kbutton_t in_strafe; +extern kbutton_t in_speed; +extern kbutton_t in_jlook; +extern kbutton_t in_graph; +extern kbutton_t in_moveleft; +extern kbutton_t in_moveright; +extern kbutton_t in_forward; +extern kbutton_t in_back; +extern kbutton_t in_joyspeed; + +extern class ConVar in_joystick; +extern class ConVar joy_autosprint; + +extern void KeyDown( kbutton_t *b, const char *c ); +extern void KeyUp( kbutton_t *b, const char *c ); + + +#endif // INPUT_H +
\ No newline at end of file |