Files
kaizen/lib/include/gainput/GainputInputDevicePad.h
Simone 4e42229bdd Squashed 'external/gainput/' content from commit 2be0a50
git-subtree-dir: external/gainput
git-subtree-split: 2be0a50089eafcc6fccb66142180082e48f27f4c
2024-01-22 08:51:55 +01:00

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