#ifndef XNA_INPUT_GAMEPAD_HPP #define XNA_INPUT_GAMEPAD_HPP #include "../default.hpp" #include "../common/vectors.hpp" namespace xna { struct IGamePadTriggers { public: virtual float Left() const = 0; virtual float Right() const = 0; }; struct IGamePadThumbSticks { public: virtual Vector2 Left() const = 0; virtual Vector2 Right() const = 0; }; struct IGamePadDPad { virtual ButtonState Up() const = 0; virtual ButtonState Down() const = 0; virtual ButtonState Right() const = 0; virtual ButtonState Left() const = 0; }; struct IGamePadButtons { virtual ButtonState A() const = 0; virtual ButtonState B() const = 0; virtual ButtonState Back() const = 0; virtual ButtonState X() const = 0; virtual ButtonState Y() const = 0; virtual ButtonState Start() const = 0; virtual ButtonState LeftShoulder() const = 0; virtual ButtonState LeftStick() const = 0; virtual ButtonState RightShoulder() const = 0; virtual ButtonState RightStick() const = 0; virtual ButtonState BigButton() const = 0; }; struct GamePadId; struct IGamePadCapabilities { virtual GamePadCapabilitiesType GamePadType() const = 0; virtual bool IsConnected() const = 0; virtual GamePadId Id() const = 0; virtual Ushort Vid() const = 0; virtual Ushort Pid() const = 0; }; struct IGamePadState { virtual GamePadButtons Buttons() const = 0; virtual GamePadDPad DPad() const = 0; virtual bool IsConnected() const = 0; virtual Ulong PacketNumber() const = 0; virtual GamePadThumbSticks ThumbSticks() = 0; virtual GamePadTriggers Triggers() = 0; virtual bool IsButtonDown(xna::Buttons button) = 0; virtual bool IsButtonUp(xna::Buttons button) = 0; }; class IGamePad { public: virtual ~IGamePad(){} virtual GamePadState GetState(PlayerIndex index) = 0; virtual GamePadState GetState(PlayerIndex index, GamePadDeadZone deadZone) = 0; virtual GamePadCapabilities GetCapabilities(PlayerIndex index) = 0; virtual bool SetVibration(PlayerIndex index, float leftMotor, float rightMotor, float leftTrigger = 0, float rightTrigger = 0) = 0; }; } #endif