2021-01-02 01:49:45 -05:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
namespace Components
|
|
|
|
{
|
|
|
|
class XInput : public Component
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
XInput();
|
|
|
|
|
2021-05-02 07:13:13 -04:00
|
|
|
struct ActionMapping {
|
|
|
|
int input;
|
|
|
|
std::string action;
|
|
|
|
bool isReversible;
|
|
|
|
bool wasPressed = false;
|
|
|
|
bool spamWhenHeld = false;
|
|
|
|
|
|
|
|
ActionMapping(int input, std::string action, bool isReversible = true, bool spamWhenHeld = false)
|
|
|
|
{
|
|
|
|
this->action = action;
|
|
|
|
this->isReversible = isReversible;
|
|
|
|
this->input = input;
|
|
|
|
this->spamWhenHeld = spamWhenHeld;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2021-01-02 01:49:45 -05:00
|
|
|
private:
|
2021-01-02 02:17:37 -05:00
|
|
|
static XINPUT_STATE xiStates[XUSER_MAX_COUNT];
|
2021-01-02 14:42:52 -05:00
|
|
|
static int xiPlayerNum;
|
2021-05-02 07:13:13 -04:00
|
|
|
static XINPUT_STATE lastXiState;
|
|
|
|
|
|
|
|
static bool isHoldingMaxLookX;
|
|
|
|
static std::chrono::milliseconds timeAtFirstHeldMaxLookX;
|
|
|
|
static std::chrono::milliseconds msBeforeUnlockingSensitivity;
|
|
|
|
static float lockedSensitivityMultiplier;
|
|
|
|
static float unlockedSensitivityMultiplier;
|
|
|
|
static float generalSensitivityMultiplier;
|
|
|
|
|
|
|
|
static void Vibrate(int leftVal = 0, int rightVal = 0);
|
2021-01-02 02:17:37 -05:00
|
|
|
|
|
|
|
static void CL_FrameStub();
|
|
|
|
static void PollXInputDevices();
|
|
|
|
|
|
|
|
static void CL_CreateCmdStub();
|
|
|
|
static void CL_GamepadMove(int, Game::usercmd_s*);
|
2021-01-02 17:48:48 -05:00
|
|
|
|
|
|
|
static void MSG_WriteDeltaUsercmdKeyStub();
|
|
|
|
|
2021-01-02 20:06:40 -05:00
|
|
|
static void ApplyMovement(Game::msg_t* msg, int key, Game::usercmd_s* from, Game::usercmd_s* to);
|
|
|
|
|
2021-01-02 17:48:48 -05:00
|
|
|
static void MSG_ReadDeltaUsercmdKeyStub();
|
2021-01-02 18:37:46 -05:00
|
|
|
static void MSG_ReadDeltaUsercmdKeyStub2();
|
|
|
|
};
|
2021-01-02 01:49:45 -05:00
|
|
|
}
|