summaryrefslogtreecommitdiff
path: root/game/client/input.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/input.h')
-rw-r--r--game/client/input.h315
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