diff --git a/src/game/client/input.cpp b/src/game/client/input.cpp index 6a2f4ced..74255b2b 100644 --- a/src/game/client/input.cpp +++ b/src/game/client/input.cpp @@ -7,7 +7,7 @@ #include "common/global.h" #include "game/shared/weapon_types.h" -void CInput::SetCustomWeaponActivity(CInput* pInput, int weaponActivity) +void CInput::VSetCustomWeaponActivity(CInput* pInput, int weaponActivity) { // Server only allows other custom weapon activities if cheats are enabled, // don't bother simulating it on the client without the cheats cvar, as @@ -20,5 +20,5 @@ void CInput::SetCustomWeaponActivity(CInput* pInput, int weaponActivity) void VInput::Detour(const bool bAttach) const { - DetourSetup(&v_CInput__SetCustomWeaponActivity, CInput::SetCustomWeaponActivity, bAttach); + DetourSetup(&v_CInput__SetCustomWeaponActivity, CInput::VSetCustomWeaponActivity, bAttach); } diff --git a/src/game/client/input.h b/src/game/client/input.h index c3206bf8..f727d1dc 100644 --- a/src/game/client/input.h +++ b/src/game/client/input.h @@ -1,11 +1,48 @@ #ifndef CLIENT_INPUT_H #define CLIENT_INPUT_H +#include "game/shared/weapon_types.h" #include "game/client/iinput.h" class CInput : public IInput { public: - static void SetCustomWeaponActivity(CInput* pInput, int weaponActivity); + virtual void sub_140701C40() = 0; + virtual void sub_140701D60() = 0; + virtual void sub_140701D90() = 0; + + virtual int GetMaxAbilityBindingCount( void ) = 0; + virtual int GetMaxAbilityBindingLength( void ) = 0; + + virtual void sub_140701DC0() = 0; + + virtual void SetJoystickDebounce( int nSlot = -1 ) = 0; + virtual void ClearJoystickDebounce( int nSlot = -1 ) = 0; + + virtual float GetLastSwapSelectTime() = 0; + virtual void SetLastSwapSelectTime( float lastSelectTime ) = 0; + virtual float Unknown_GetFloat20() = 0; + virtual void Unknown_SetFloat20( float a2 ) = 0; + virtual float Unknown_GetFloat24() = 0; + virtual void Unknown_SetFloat24( float a2 ) = 0; + + virtual float GetLastButtonPressTime( void ) = 0; + virtual void SetLastButtonPressTime( float lastPressTime ) = 0; + virtual void LinkButtonPair( int button1, int button2, int output ) = 0; + + virtual void sub_140701720() = 0; + + virtual void SetCustomWeaponActivity( WeaponActivity_t weaponActivity ) = 0; + virtual void ActivateOffhandWeaponByIndex( char index /*TODO[ AMOS ]: needs enum, enumVal 6 = INVALID; see Script_ActivateOffhandWeaponByIndex*/ ) = 0; + + virtual void ChangeControllerMode( bool newMode ) = 0; + + virtual void SetZoomScale( float zoomScale ) = 0; // Used for SetBigMapZoomScale script func + virtual float GetZoomScale() = 0; // Used for GetBigMapZoomScale script func + virtual void SetZoomAnchor( Vector2D& inAnchor ) = 0; // Used for SetBigMapZoomAnchor script func + virtual void GetZoomAnchor( Vector2D& outAnchor ) = 0; // Used for SetBigMapZoomAnchor script func + +public: // Hook statics + static void VSetCustomWeaponActivity( CInput* pInput, int weaponActivity ); private: }; diff --git a/src/public/game/client/iinput.h b/src/public/game/client/iinput.h index f52055e7..2413f8b9 100644 --- a/src/public/game/client/iinput.h +++ b/src/public/game/client/iinput.h @@ -1,10 +1,110 @@ #ifndef IINPUT_H #define IINPUT_H +class bf_write; +class bf_read; +class CUserCmd; +struct kbutton_t; + +struct CameraThirdData_t +{ + float m_flPitch; + float m_flYaw; + float m_flDist; + float m_flLag; + Vector3D m_vecHullMin; + Vector3D m_vecHullMax; +}; + abstract_class IInput { public: virtual ~IInput() {}; + + // Initialization/shutdown of the subsystem + virtual void Init_All( void ) = 0; + virtual void Shutdown_All( void ) = 0; + // Latching button states + virtual int GetButtonBits( bool resetState ) = 0; + // Create movement command + virtual void CreateMove ( int sequenceNumber, float inputSampleFrametime, bool active ) = 0; + virtual void ExtraMouseSample( float frametime ) = 0; + virtual bool WriteUsercmdDeltaToBuffer( int slot, bf_write *buf, int from, int to ) = 0; + virtual void EncodeUserCmdToBuffer( int slot, bf_write& buf, int sequenceNumber ) = 0; + virtual void DecodeUserCmdFromBuffer( int slot, bf_read& buf, int sequenceNumber ) = 0; + + virtual CUserCmd *GetUserCmd( int slot, int sequenceNumber ) = 0; // TODO[ AMOS ]: CUserCmdExteded* + + virtual void MakeWeaponSelection( int secondary, int primary ) = 0; + + virtual void sub_140702970() = 0; + virtual void sub_140702980() = 0; + + virtual bool MouseInitialized() = 0; + + // Retrieve key state + virtual float KeyState( kbutton_t* key ) = 0; + + virtual void sub_140701EC0() = 0; + virtual void sub_140701F50() = 0; + virtual void sub_140702000() = 0; + + // Look for key + virtual kbutton_t* FindKey(const char* name) = 0; + + // Extra initialization for some joysticks + virtual bool ControllerModeActive() = 0; + virtual bool JoystickActive() = 0; + + virtual void Joystick_SetSampleTime( float frametime ) = 0; + virtual void IN_SetSampleTime( float frametime ) = 0; + + // Accumulate mouse delta + virtual void AccumulateMouse( int nSlot ) = 0; // Unimplemented in R5 + + // Activate/deactivate mouse + virtual void ActivateMouse( void ) = 0; + virtual void DeactivateMouse( void ) = 0; + + // Clear mouse state data + virtual void ClearStates( void ) = 0; + // Retrieve lookspring setting + virtual float GetLookSpring( void ) = 0; + + // Clear weapon activities and additional UserCmd related data + virtual void ClearSupplementalWeaponData( void ) = 0; + + // Retrieve mouse position + virtual void GetFullscreenMousePos( int *mx, int *my, int *unclampedx = 0, int *unclampedy = 0 ) = 0; + virtual void SetFullscreenMousePos( int mx, int my ) = 0; + virtual void ResetMouse() = 0; + virtual float GetLastForwardMove( void ) = 0; + + // Third Person camera + virtual void CAM_Think( void ) = 0; + virtual int CAM_IsThirdPerson( int nSlot = -1 ) = 0; + virtual void CAM_GetCameraOffset( Vector3D& ofs ) = 0; + virtual void CAM_SetCameraOffset( Vector3D& ofs ) = 0; + virtual void CAM_ToThirdPerson( void ) = 0; + virtual void CAM_ToFirstPerson( void ) = 0; + virtual void CAM_StartMouseMove( void ) = 0; + virtual void CAM_EndMouseMove( void ) = 0; + virtual void CAM_StartDistance( void ) = 0; + virtual void CAM_EndDistance( void ) = 0; + virtual int CAM_InterceptingMouse( void ) = 0; + virtual void CAM_Command( int command ) = 0; + + virtual void Unknown_SetFloatB0( float a2 ) = 0; + virtual float Unknown_GetFloatB0() = 0; + + virtual void nullsub_0() = 0; + virtual int sub_1407060E0() = 0; + + // Causes an input to have to be re-pressed to become active + virtual void ClearInputButton( int bits ) = 0; + + virtual void CAM_SetCameraThirdData( CameraThirdData_t *pCameraData, const QAngle &vecCameraOffset ) = 0; + virtual void CAM_CameraThirdThink( void ) = 0; }; #endif // IINPUT_H