Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| /* | |
| * Gamepad libraries for Nashoba Robotics Simple Robot 2013 | |
| * | |
| * These are the gamepad abstractions for the 2013 Simple Robot code by Brandon Yannoni and Alex Brinister | |
| * | |
| * FreeBSD License: | |
| * | |
| * Copyright (c) 2013, Brandon Yannoni and Alex Brinister | |
| * All rights reserved. | |
| * | |
| * Redistribution and use in source and binary forms, with or without | |
| * modification, are permitted provided that the following conditions are met: | |
| * | |
| * 1. Redistributions of source code must retain the above copyright notice, this | |
| * list of conditions and the following disclaimer. | |
| * 2. Redistributions in binary form must reproduce the above copyright notice, | |
| * this list of conditions and the following disclaimer in the documentation | |
| * and/or other materials provided with the distribution. | |
| * | |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | |
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
| * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR | |
| * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
| * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| * | |
| * The views and conclusions contained in the software and documentation are those | |
| * of the authors and should not be interpreted as representing official policies, | |
| * either expressed or implied, of the FreeBSD Project. | |
| */ | |
| #ifndef PADS_HPP | |
| #define PADS_HPP | |
| #include "Joystick.h" | |
| namespace nr | |
| { | |
| namespace gamepad | |
| { | |
| // Logitech F310 | |
| class Gamepad : public Joystick | |
| { | |
| public: | |
| // Enums for the axes, sticks, and buttons | |
| typedef enum | |
| { | |
| kLeftStick = 1, | |
| kRightStick = 2 | |
| } StickType; | |
| typedef enum | |
| { | |
| kLeftXAxis = 1, | |
| kLeftYAxis = 2, | |
| kRightXAxis = 3, | |
| kRightYAxis = 4, | |
| kDPadXAxis = 5, | |
| kDPadYAxis = 6 | |
| } AxisType; | |
| typedef enum | |
| { | |
| kXButton = 1, | |
| kAButton = 2, | |
| kBButton = 3, | |
| kYButton = 4, | |
| kLeftBumper = 5, | |
| kRightBumper = 6, | |
| kLeftTrigger = 7, | |
| kRightTrigger = 8, | |
| kBackButton = 9, | |
| kStartButton = 10, | |
| kLeftStickButton = 11, | |
| kRightStickButton = 12 | |
| } ButtonType; | |
| Gamepad(UINT32 port) : Joystick(port) {} | |
| virtual ~Gamepad(); | |
| float GetX(StickType stick) | |
| { | |
| switch(stick) | |
| { | |
| case kRightStick: | |
| return GetRawAxis(kRightXAxis); | |
| case kLeftStick: | |
| return GetRawAxis(kLeftXAxis); | |
| default: | |
| return 0.0; | |
| } | |
| } | |
| float GetY(StickType stick) | |
| { | |
| switch(stick) | |
| { | |
| case kRightStick: | |
| return GetRawAxis(kRightYAxis); | |
| case kLeftStick: | |
| return GetRawAxis(kLeftYAxis); | |
| default: | |
| return 0.0; | |
| } | |
| } | |
| float GetAxis(AxisType axis) | |
| { | |
| switch(axis) | |
| { | |
| case kLeftXAxis: return GetX(kLeftStick); | |
| case kLeftYAxis: return GetY(kLeftStick); | |
| case kRightXAxis: return GetX(kRightStick); | |
| case kRightYAxis: return GetY(kRightStick); | |
| case kDPadXAxis: return GetRawAxis(kDPadXAxis); | |
| case kDPadYAxis: return GetRawAxis(kDPadYAxis); | |
| default: return 0.0; | |
| } | |
| } | |
| bool GetButton(ButtonType button) | |
| { | |
| switch(button) | |
| { | |
| case kXButton: | |
| return GetRawButton(kXButton); | |
| case kAButton: | |
| return GetRawButton(kAButton); | |
| case kBButton: | |
| return GetRawButton(kBButton); | |
| case kYButton: | |
| return GetRawButton(kYButton); | |
| case kLeftBumper: | |
| return GetRawButton(kLeftBumper); | |
| case kRightBumper: | |
| return GetRawButton(kRightBumper); | |
| case kLeftTrigger: | |
| return GetRawButton(kLeftTrigger); | |
| case kRightTrigger: | |
| return GetRawButton(kRightTrigger); | |
| case kBackButton: | |
| return GetRawButton(kBackButton); | |
| case kStartButton: | |
| return GetRawButton(kStartButton); | |
| case kLeftStickButton: | |
| return GetRawButton(kLeftStickButton); | |
| case kRightStickButton: | |
| return GetRawButton(kRightStickButton); | |
| default: | |
| return false; | |
| } | |
| } | |
| }; | |
| // Xbox controller | |
| class XPad : public Joystick | |
| { | |
| public: | |
| typedef enum | |
| { | |
| kLeftStick = 1, | |
| kRightStick = 2 | |
| } StickType; | |
| typedef enum | |
| { | |
| kLeftXAxis = 1, | |
| kLeftYAxis = 2, //Inverted | |
| kTriggerAxis = 3, //Left negative, right posotive | |
| kRightXAxis = 4, | |
| kRightYAxis = 5, //Inverted | |
| kDPadXAxis = 6, | |
| kDPadYAxis = 7 //<-Doesnt seem to work? | |
| } AxisType; | |
| typedef enum | |
| { | |
| kAButton = 1, | |
| kBButton = 2, | |
| kXButton = 3, | |
| kYButton = 4, | |
| kLeftBumperButton = 5, | |
| kRightBumperButton = 6, | |
| kBackButton = 7, | |
| kStartButton = 8, | |
| kLeftStickButton = 9, | |
| kRightStickButton = 10 | |
| } ButtonType; | |
| XPad(UINT32 port) : Joystick(port) {} | |
| virtual | |
| ~XPad(); | |
| float | |
| GetX(StickType stick) | |
| { | |
| if(stick == kRightStick) | |
| return GetRawAxis(kRightXAxis); | |
| else if(stick == kLeftStick) | |
| return GetRawAxis(kLeftXAxis); | |
| else | |
| return 0.0; | |
| } | |
| float | |
| GetY(StickType stick) | |
| { | |
| if(stick == kRightStick) | |
| return GetRawAxis(kRightYAxis); | |
| else if(stick == kLeftStick) | |
| return GetRawAxis(kLeftYAxis); | |
| else | |
| return 0.0; | |
| } | |
| float | |
| GetAxis(AxisType axis) | |
| { | |
| switch(axis) | |
| { | |
| case kLeftXAxis: return GetX(kLeftStick); | |
| case kLeftYAxis: return GetY(kLeftStick); | |
| case kRightXAxis: return GetX(kRightStick); | |
| case kRightYAxis: return GetY(kRightStick); | |
| case kTriggerAxis: return GetRawAxis(kTriggerAxis); | |
| case kDPadXAxis: return GetRawAxis(kDPadXAxis); | |
| case kDPadYAxis: return GetRawAxis(kDPadYAxis); | |
| } | |
| } | |
| bool | |
| GetButton(ButtonType button) | |
| { | |
| switch(button) | |
| { | |
| case kXButton: | |
| return GetRawButton(kXButton); | |
| case kAButton: | |
| return GetRawButton(kAButton); | |
| case kBButton: | |
| return GetRawButton(kBButton); | |
| case kYButton: | |
| return GetRawButton(kYButton); | |
| case kLeftBumperButton: | |
| return GetRawButton(kLeftBumperButton); | |
| case kRightBumperButton: | |
| return GetRawButton(kRightBumperButton); | |
| case kBackButton: | |
| return GetRawButton(kBackButton); | |
| case kStartButton: | |
| return GetRawButton(kStartButton); | |
| case kLeftStickButton: | |
| return GetRawButton(kLeftStickButton); | |
| case kRightStickButton: | |
| return GetRawButton(kRightStickButton); | |
| default: | |
| return false; | |
| } | |
| } | |
| }; | |
| } | |
| } | |
| #endif |