git-subtree-dir: external/gainput git-subtree-split: 2be0a50089eafcc6fccb66142180082e48f27f4c
164 lines
3.8 KiB
C++
164 lines
3.8 KiB
C++
|
|
#ifndef GAINPUTINPUTDEVICEPAD_H_
|
|
#define GAINPUTINPUTDEVICEPAD_H_
|
|
|
|
namespace gainput
|
|
{
|
|
|
|
/// The maximum number of pads supported.
|
|
enum { MaxPadCount = 10 };
|
|
|
|
/// All valid device buttons for InputDevicePad.
|
|
enum PadButton
|
|
{
|
|
PadButtonLeftStickX,
|
|
PadButtonLeftStickY,
|
|
PadButtonRightStickX,
|
|
PadButtonRightStickY,
|
|
PadButtonAxis4, // L2/Left trigger
|
|
PadButtonAxis5, // R2/Right trigger
|
|
PadButtonAxis6,
|
|
PadButtonAxis7,
|
|
PadButtonAxis8,
|
|
PadButtonAxis9,
|
|
PadButtonAxis10,
|
|
PadButtonAxis11,
|
|
PadButtonAxis12,
|
|
PadButtonAxis13,
|
|
PadButtonAxis14,
|
|
PadButtonAxis15,
|
|
PadButtonAxis16,
|
|
PadButtonAxis17,
|
|
PadButtonAxis18,
|
|
PadButtonAxis19,
|
|
PadButtonAxis20,
|
|
PadButtonAxis21,
|
|
PadButtonAxis22,
|
|
PadButtonAxis23,
|
|
PadButtonAxis24,
|
|
PadButtonAxis25,
|
|
PadButtonAxis26,
|
|
PadButtonAxis27,
|
|
PadButtonAxis28,
|
|
PadButtonAxis29,
|
|
PadButtonAxis30,
|
|
PadButtonAxis31,
|
|
PadButtonAccelerationX,
|
|
PadButtonAccelerationY,
|
|
PadButtonAccelerationZ,
|
|
PadButtonGravityX,
|
|
PadButtonGravityY,
|
|
PadButtonGravityZ,
|
|
PadButtonGyroscopeX,
|
|
PadButtonGyroscopeY,
|
|
PadButtonGyroscopeZ,
|
|
PadButtonMagneticFieldX,
|
|
PadButtonMagneticFieldY,
|
|
PadButtonMagneticFieldZ,
|
|
PadButtonStart,
|
|
PadButtonAxisCount_ = PadButtonStart,
|
|
PadButtonSelect,
|
|
PadButtonLeft,
|
|
PadButtonRight,
|
|
PadButtonUp,
|
|
PadButtonDown,
|
|
PadButtonA, // Cross
|
|
PadButtonB, // Circle
|
|
PadButtonX, // Square
|
|
PadButtonY, // Triangle
|
|
PadButtonL1,
|
|
PadButtonR1,
|
|
PadButtonL2,
|
|
PadButtonR2,
|
|
PadButtonL3, // Left thumb
|
|
PadButtonR3, // Right thumb
|
|
PadButtonHome, // PS button
|
|
PadButton17,
|
|
PadButton18,
|
|
PadButton19,
|
|
PadButton20,
|
|
PadButton21,
|
|
PadButton22,
|
|
PadButton23,
|
|
PadButton24,
|
|
PadButton25,
|
|
PadButton26,
|
|
PadButton27,
|
|
PadButton28,
|
|
PadButton29,
|
|
PadButton30,
|
|
PadButton31,
|
|
PadButtonMax_,
|
|
PadButtonCount_ = PadButtonMax_ - PadButtonAxisCount_
|
|
};
|
|
|
|
class InputDevicePadImpl;
|
|
|
|
/// A pad input device.
|
|
/**
|
|
* This input device provides support for gamepad devices. The valid device buttons are defined
|
|
* in the ::PadButton enum.
|
|
*
|
|
* This device is implemented on Android NDK, Linux and Windows.
|
|
*
|
|
* Note that the Android implementation does not support any external pads, but only internal
|
|
* sensors (acceleration, gyroscope, magnetic field).
|
|
*/
|
|
class GAINPUT_LIBEXPORT InputDevicePad : public InputDevice
|
|
{
|
|
public:
|
|
/// The operating system device IDs for all possible pads.
|
|
static const char* PadDeviceIds[MaxPadCount];
|
|
// TODO SetPadDeviceId(padIndex, const char* id);
|
|
|
|
/// Initializes the device.
|
|
/**
|
|
* Instantiate the device using InputManager::CreateDevice().
|
|
*
|
|
* \param manager The input manager this device is managed by.
|
|
* \param device The ID of this device.
|
|
*/
|
|
InputDevicePad(InputManager& manager, DeviceId device, unsigned index, DeviceVariant variant);
|
|
/// Shuts down the device.
|
|
~InputDevicePad();
|
|
|
|
/// Returns DT_PAD.
|
|
DeviceType GetType() const { return DT_PAD; }
|
|
DeviceVariant GetVariant() const;
|
|
const char* GetTypeName() const { return "pad"; }
|
|
bool IsValidButtonId(DeviceButtonId deviceButton) const;
|
|
|
|
size_t GetAnyButtonDown(DeviceButtonSpec* outButtons, size_t maxButtonCount) const;
|
|
|
|
size_t GetButtonName(DeviceButtonId deviceButton, char* buffer, size_t bufferLength) const;
|
|
ButtonType GetButtonType(DeviceButtonId deviceButton) const;
|
|
DeviceButtonId GetButtonByName(const char* name) const;
|
|
|
|
InputState* GetNextInputState();
|
|
|
|
/// Enables the rumble feature of the pad.
|
|
/**
|
|
* \param leftMotor Speed of the left motor, between 0.0 and 1.0.
|
|
* \param rightMotor Speed of the right motor, between 0.0 and 1.0.
|
|
* \return true if rumble was enabled successfully, false otherwise.
|
|
*/
|
|
bool Vibrate(float leftMotor, float rightMotor);
|
|
|
|
/// Returns the platform-specific implementation of this device.
|
|
InputDevicePadImpl* GetPimpl() { return impl_; }
|
|
|
|
protected:
|
|
void InternalUpdate(InputDeltaState* delta);
|
|
|
|
DeviceState InternalGetState() const;
|
|
|
|
private:
|
|
InputDevicePadImpl* impl_;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|
|
|