kexVec3 kexAngle::ToRightAxis(void) { kexVec3 vec; ToAxis(NULL, NULL, &vec); return vec; }
kexVec3 kexAngle::ToForwardAxis(void) { kexVec3 vec; ToAxis(&vec, NULL, NULL); return vec; }
kexVec3 kexAngle::ToUpAxis(void) { kexVec3 vec; ToAxis(NULL, &vec, NULL); return vec; }
void CBTConnection::XInputMapState(DWORD Pad, UCHAR* Report, UCHAR Model) { m_padState[Pad].Gamepad.wButtons = 0; if (Model == 1) // DS3 { DWORD Buttons = Report[2] << 0 | Report[3] << 8 | Report[4] << 16 | Report[5] << 24; if (Buttons & (0x1 << 0)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_BACK; if (Buttons & (0x1 << 1)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_LEFT_THUMB; if (Buttons & (0x1 << 2)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_RIGHT_THUMB; if (Buttons & (0x1 << 3)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_START; if (Buttons & (0x1 << 4)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_DPAD_UP; if (Buttons & (0x1 << 5)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_DPAD_RIGHT; if (Buttons & (0x1 << 6)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_DPAD_DOWN; if (Buttons & (0x1 << 7)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_DPAD_LEFT; if (Buttons & (0x1 << 10)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_LEFT_SHOULDER; if (Buttons & (0x1 << 11)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_RIGHT_SHOULDER; if (Buttons & (0x1 << 12)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_Y; if (Buttons & (0x1 << 13)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_B; if (Buttons & (0x1 << 14)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_A; if (Buttons & (0x1 << 15)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_X; if (Buttons & (0x1 << 16)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_GUIDE; m_padState[Pad].Gamepad.sThumbRY = -Scale((SHORT) Report[9]); m_padState[Pad].Gamepad.sThumbRX = Scale((SHORT) Report[8]); m_padState[Pad].Gamepad.sThumbLY = -Scale((SHORT) Report[7]); m_padState[Pad].Gamepad.sThumbLX = Scale((SHORT) Report[6]); // Remap for Triggers - Not Unpacked as Axis by UnpackReport m_padState[Pad].Gamepad.bLeftTrigger = Report[18]; m_padState[Pad].Gamepad.bRightTrigger = Report[19]; // Convert for Extension m_Extended[Pad].SCP_UP = ToPressure(Report[14]); m_Extended[Pad].SCP_RIGHT = ToPressure(Report[15]); m_Extended[Pad].SCP_DOWN = ToPressure(Report[16]); m_Extended[Pad].SCP_LEFT = ToPressure(Report[17]); m_Extended[Pad].SCP_LX = ToAxis(m_padState[Pad].Gamepad.sThumbLX); m_Extended[Pad].SCP_LY = ToAxis(m_padState[Pad].Gamepad.sThumbLY); m_Extended[Pad].SCP_L1 = ToPressure(Report[20]); m_Extended[Pad].SCP_L2 = ToPressure(Report[18]); m_Extended[Pad].SCP_L3 = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB ? 1.0f : 0.0f; m_Extended[Pad].SCP_RX = ToAxis(m_padState[Pad].Gamepad.sThumbRX); m_Extended[Pad].SCP_RY = ToAxis(m_padState[Pad].Gamepad.sThumbRY); m_Extended[Pad].SCP_R1 = ToPressure(Report[21]); m_Extended[Pad].SCP_R2 = ToPressure(Report[19]); m_Extended[Pad].SCP_R3 = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB ? 1.0f : 0.0f; m_Extended[Pad].SCP_T = ToPressure(Report[22]); m_Extended[Pad].SCP_C = ToPressure(Report[23]); m_Extended[Pad].SCP_X = ToPressure(Report[24]); m_Extended[Pad].SCP_S = ToPressure(Report[25]); m_Extended[Pad].SCP_SELECT = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_BACK ? 1.0f : 0.0f; m_Extended[Pad].SCP_START = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_START ? 1.0f : 0.0f; m_Extended[Pad].SCP_PS = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_GUIDE ? 1.0f : 0.0f; } if (Model == 2) // DS4 { DWORD Buttons = Report[5] << 0 | Report[6] << 8 | Report[7] << 16; if (Buttons & (0x1 << 12)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_BACK; if (Buttons & (0x1 << 14)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_LEFT_THUMB; if (Buttons & (0x1 << 15)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_RIGHT_THUMB; if (Buttons & (0x1 << 13)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_START; if (Buttons & (0x1 << 0)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_DPAD_UP; if (Buttons & (0x1 << 1)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_DPAD_RIGHT; if (Buttons & (0x1 << 2)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_DPAD_DOWN; if (Buttons & (0x1 << 3)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_DPAD_LEFT; if (Buttons & (0x1 << 8)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_LEFT_SHOULDER; if (Buttons & (0x1 << 9)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_RIGHT_SHOULDER; if (Buttons & (0x1 << 7)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_Y; if (Buttons & (0x1 << 6)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_B; if (Buttons & (0x1 << 5)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_A; if (Buttons & (0x1 << 4)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_X; if (Buttons & (0x1 << 16)) m_padState[Pad].Gamepad.wButtons |= XINPUT_GAMEPAD_GUIDE; m_padState[Pad].Gamepad.sThumbRY = -Scale((SHORT) Report[4]); m_padState[Pad].Gamepad.sThumbRX = Scale((SHORT) Report[3]); m_padState[Pad].Gamepad.sThumbLY = -Scale((SHORT) Report[2]); m_padState[Pad].Gamepad.sThumbLX = Scale((SHORT) Report[1]); // Remap for Triggers m_padState[Pad].Gamepad.bLeftTrigger = Report[8]; m_padState[Pad].Gamepad.bRightTrigger = Report[9]; // Convert for Extension m_Extended[Pad].SCP_UP = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP ? 1.0f : 0.0f; m_Extended[Pad].SCP_RIGHT = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT ? 1.0f : 0.0f; m_Extended[Pad].SCP_DOWN = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN ? 1.0f : 0.0f; m_Extended[Pad].SCP_LEFT = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT ? 1.0f : 0.0f; m_Extended[Pad].SCP_LX = ToAxis(m_padState[Pad].Gamepad.sThumbLX); m_Extended[Pad].SCP_LY = ToAxis(m_padState[Pad].Gamepad.sThumbLY); m_Extended[Pad].SCP_L1 = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER ? 1.0f : 0.0f; m_Extended[Pad].SCP_L2 = ToPressure(Report[8]); m_Extended[Pad].SCP_L3 = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB ? 1.0f : 0.0f; m_Extended[Pad].SCP_RX = ToAxis(m_padState[Pad].Gamepad.sThumbRX); m_Extended[Pad].SCP_RY = ToAxis(m_padState[Pad].Gamepad.sThumbRY); m_Extended[Pad].SCP_R1 = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER ? 1.0f : 0.0f; m_Extended[Pad].SCP_R2 = ToPressure(Report[9]); m_Extended[Pad].SCP_R3 = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB ? 1.0f : 0.0f; m_Extended[Pad].SCP_T = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_Y ? 1.0f : 0.0f; m_Extended[Pad].SCP_C = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_B ? 1.0f : 0.0f; m_Extended[Pad].SCP_X = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_A ? 1.0f : 0.0f; m_Extended[Pad].SCP_S = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_X ? 1.0f : 0.0f; m_Extended[Pad].SCP_SELECT = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_BACK ? 1.0f : 0.0f; m_Extended[Pad].SCP_START = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_START ? 1.0f : 0.0f; m_Extended[Pad].SCP_PS = m_padState[Pad].Gamepad.wButtons & XINPUT_GAMEPAD_GUIDE ? 1.0f : 0.0f; } }