Chris Dick
/
Gameduino_Invaders_game
Invaders game for the Gameduino
joystick.cpp@0:8a7c58553b44, 2012-06-21 (annotated)
- Committer:
- TheChrisyd
- Date:
- Thu Jun 21 19:13:34 2012 +0000
- Revision:
- 0:8a7c58553b44
- Child:
- 1:f44175dd69fd
backup before adding more features
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
TheChrisyd | 0:8a7c58553b44 | 1 | /*------------------------------------------------------------ |
TheChrisyd | 0:8a7c58553b44 | 2 | Universal joystick driver for Gameduino |
TheChrisyd | 0:8a7c58553b44 | 3 | |
TheChrisyd | 0:8a7c58553b44 | 4 | http://www.artlum.com/gameduino/gameduino.html#joystick |
TheChrisyd | 0:8a7c58553b44 | 5 | ------------------------------------------------------------*/ |
TheChrisyd | 0:8a7c58553b44 | 6 | #include "joystick.h" |
TheChrisyd | 0:8a7c58553b44 | 7 | #include "GD.h" |
TheChrisyd | 0:8a7c58553b44 | 8 | //#include <SPI.h> |
TheChrisyd | 0:8a7c58553b44 | 9 | //#include <GD.h> |
TheChrisyd | 0:8a7c58553b44 | 10 | |
TheChrisyd | 0:8a7c58553b44 | 11 | // Change this line to enable your customized |
TheChrisyd | 0:8a7c58553b44 | 12 | // joystick configuration |
TheChrisyd | 0:8a7c58553b44 | 13 | // "1" = custom configuration |
TheChrisyd | 0:8a7c58553b44 | 14 | // "0" = default (Sparkfun joystick) |
TheChrisyd | 0:8a7c58553b44 | 15 | // |
TheChrisyd | 0:8a7c58553b44 | 16 | #define CUSTOM_JOYSTICK 0 |
TheChrisyd | 0:8a7c58553b44 | 17 | |
TheChrisyd | 0:8a7c58553b44 | 18 | |
TheChrisyd | 0:8a7c58553b44 | 19 | #if CUSTOM_JOYSTICK |
TheChrisyd | 0:8a7c58553b44 | 20 | /*------------------------------------------------------------------ |
TheChrisyd | 0:8a7c58553b44 | 21 | Custom joystick configuration. This is what you need to |
TheChrisyd | 0:8a7c58553b44 | 22 | hack to get your joystick working. |
TheChrisyd | 0:8a7c58553b44 | 23 | |
TheChrisyd | 0:8a7c58553b44 | 24 | The joystick layout can be customized by commenting |
TheChrisyd | 0:8a7c58553b44 | 25 | or uncommenting the lines below. |
TheChrisyd | 0:8a7c58553b44 | 26 | |
TheChrisyd | 0:8a7c58553b44 | 27 | Notes |
TheChrisyd | 0:8a7c58553b44 | 28 | ----- |
TheChrisyd | 0:8a7c58553b44 | 29 | To specify an analog pin for a button add "A0" to |
TheChrisyd | 0:8a7c58553b44 | 30 | the pin number, eg. Analog pin 4 is "A0+4" |
TheChrisyd | 0:8a7c58553b44 | 31 | |
TheChrisyd | 0:8a7c58553b44 | 32 | When connecting a Joystick to an Arduino: |
TheChrisyd | 0:8a7c58553b44 | 33 | * Digital pins 0/1 are used for system stuff. |
TheChrisyd | 0:8a7c58553b44 | 34 | * Gameduino uses pins 2/9/10/11/13 for SPI interface |
TheChrisyd | 0:8a7c58553b44 | 35 | |
TheChrisyd | 0:8a7c58553b44 | 36 | That leaves digital pins 3/4/5/6/7/8/10 free, plus |
TheChrisyd | 0:8a7c58553b44 | 37 | all the analog pins (which work as digital pins, too!) |
TheChrisyd | 0:8a7c58553b44 | 38 | ------------------------------------------------------------------*/ |
TheChrisyd | 0:8a7c58553b44 | 39 | |
TheChrisyd | 0:8a7c58553b44 | 40 | // eg. The following layout is good for an NES controller |
TheChrisyd | 0:8a7c58553b44 | 41 | |
TheChrisyd | 0:8a7c58553b44 | 42 | // Connect the four buttons to pins 3/4/5/6 |
TheChrisyd | 0:8a7c58553b44 | 43 | #define BUTTON_A_PIN 3 |
TheChrisyd | 0:8a7c58553b44 | 44 | #define BUTTON_B_PIN 4 |
TheChrisyd | 0:8a7c58553b44 | 45 | //#define BUTTON_C_PIN ? |
TheChrisyd | 0:8a7c58553b44 | 46 | //#define BUTTON_X_PIN ? |
TheChrisyd | 0:8a7c58553b44 | 47 | //#define BUTTON_Y_PIN ? |
TheChrisyd | 0:8a7c58553b44 | 48 | //#define BUTTON_Z_PIN ? |
TheChrisyd | 0:8a7c58553b44 | 49 | #define BUTTON_ST_PIN 5 |
TheChrisyd | 0:8a7c58553b44 | 50 | #define BUTTON_SEL_PIN 6 |
TheChrisyd | 0:8a7c58553b44 | 51 | |
TheChrisyd | 0:8a7c58553b44 | 52 | // Connect the DPAD L/R/U/D to analog pins 2/3/4/5 |
TheChrisyd | 0:8a7c58553b44 | 53 | #define STICK_LEFT_PIN (A0+2) |
TheChrisyd | 0:8a7c58553b44 | 54 | #define STICK_RIGHT_PIN (A0+3) |
TheChrisyd | 0:8a7c58553b44 | 55 | #define STICK_UP_PIN (A0+4) |
TheChrisyd | 0:8a7c58553b44 | 56 | #define STICK_DOWN_PIN (A0+5) |
TheChrisyd | 0:8a7c58553b44 | 57 | |
TheChrisyd | 0:8a7c58553b44 | 58 | // Analog input is disabled... |
TheChrisyd | 0:8a7c58553b44 | 59 | //#define ANALOG_X_PIN ? |
TheChrisyd | 0:8a7c58553b44 | 60 | //#define ANALOG_Y_PIN ? |
TheChrisyd | 0:8a7c58553b44 | 61 | |
TheChrisyd | 0:8a7c58553b44 | 62 | // Make the DPAD emulate an analog joystick |
TheChrisyd | 0:8a7c58553b44 | 63 | #define DIGITAL_EMULATE_ANALOG |
TheChrisyd | 0:8a7c58553b44 | 64 | //#define ANALOG_EMULATE_DIGITAL |
TheChrisyd | 0:8a7c58553b44 | 65 | |
TheChrisyd | 0:8a7c58553b44 | 66 | #else |
TheChrisyd | 0:8a7c58553b44 | 67 | /*------------------------------------------------------------------ |
TheChrisyd | 0:8a7c58553b44 | 68 | Default: Sparkfun joystick |
TheChrisyd | 0:8a7c58553b44 | 69 | ------------------------------------------------------------------*/ |
TheChrisyd | 0:8a7c58553b44 | 70 | #define BUTTON_A_PIN 3 |
TheChrisyd | 0:8a7c58553b44 | 71 | #define BUTTON_B_PIN 4 |
TheChrisyd | 0:8a7c58553b44 | 72 | // #define BUTTON_C_PIN ? |
TheChrisyd | 0:8a7c58553b44 | 73 | // nb. Button X is pin 7 if you've hacked your board |
TheChrisyd | 0:8a7c58553b44 | 74 | #define BUTTON_X_PIN 2 |
TheChrisyd | 0:8a7c58553b44 | 75 | // #define BUTTON_Y_PIN ? |
TheChrisyd | 0:8a7c58553b44 | 76 | // #define BUTTON_Z_PIN ? |
TheChrisyd | 0:8a7c58553b44 | 77 | #define BUTTON_ST_PIN 5 |
TheChrisyd | 0:8a7c58553b44 | 78 | #define BUTTON_SEL_PIN 6 |
TheChrisyd | 0:8a7c58553b44 | 79 | |
TheChrisyd | 0:8a7c58553b44 | 80 | // Digital joystick/DPAD |
TheChrisyd | 0:8a7c58553b44 | 81 | //#define STICK_LEFT_PIN 11 |
TheChrisyd | 0:8a7c58553b44 | 82 | //#define STICK_RIGHT_PIN 12 |
TheChrisyd | 0:8a7c58553b44 | 83 | //#define STICK_UP_PIN 13 |
TheChrisyd | 0:8a7c58553b44 | 84 | //#define STICK_DOWN_PIN 14 |
TheChrisyd | 0:8a7c58553b44 | 85 | |
TheChrisyd | 0:8a7c58553b44 | 86 | // Analog joystick is enabled |
TheChrisyd | 0:8a7c58553b44 | 87 | #define ANALOG_X_PIN 0 |
TheChrisyd | 0:8a7c58553b44 | 88 | #define ANALOG_Y_PIN 1 |
TheChrisyd | 0:8a7c58553b44 | 89 | |
TheChrisyd | 0:8a7c58553b44 | 90 | // Enable digital joystick emulation |
TheChrisyd | 0:8a7c58553b44 | 91 | // #define DIGITAL_EMULATE_ANALOG |
TheChrisyd | 0:8a7c58553b44 | 92 | #define ANALOG_EMULATE_DIGITAL |
TheChrisyd | 0:8a7c58553b44 | 93 | |
TheChrisyd | 0:8a7c58553b44 | 94 | #endif |
TheChrisyd | 0:8a7c58553b44 | 95 | |
TheChrisyd | 0:8a7c58553b44 | 96 | /*------------------------------------------------------ |
TheChrisyd | 0:8a7c58553b44 | 97 | Stop hacking now...! |
TheChrisyd | 0:8a7c58553b44 | 98 | |
TheChrisyd | 0:8a7c58553b44 | 99 | There are no user-servicable parts below this line |
TheChrisyd | 0:8a7c58553b44 | 100 | ------------------------------------------------------*/ |
TheChrisyd | 0:8a7c58553b44 | 101 | #define STICK_LEFT_BIT 0x01 |
TheChrisyd | 0:8a7c58553b44 | 102 | #define STICK_RIGHT_BIT 0x02 |
TheChrisyd | 0:8a7c58553b44 | 103 | #define STICK_UP_BIT 0x04 |
TheChrisyd | 0:8a7c58553b44 | 104 | #define STICK_DOWN_BIT 0x08 |
TheChrisyd | 0:8a7c58553b44 | 105 | #define ANALOG_STICK_BIT 0x80 |
TheChrisyd | 0:8a7c58553b44 | 106 | #define STICK_INFO_MASK (ANALOG_STICK_BIT) |
TheChrisyd | 0:8a7c58553b44 | 107 | |
TheChrisyd | 0:8a7c58553b44 | 108 | /*--------------------------------------------- |
TheChrisyd | 0:8a7c58553b44 | 109 | Joystick reader |
TheChrisyd | 0:8a7c58553b44 | 110 | ---------------------------------------------*/ |
TheChrisyd | 0:8a7c58553b44 | 111 | static PROGMEM prog_uchar joystickPinList[] = { |
TheChrisyd | 0:8a7c58553b44 | 112 | #ifdef BUTTON_A_PIN |
TheChrisyd | 0:8a7c58553b44 | 113 | BUTTON_A_PIN |
TheChrisyd | 0:8a7c58553b44 | 114 | #endif |
TheChrisyd | 0:8a7c58553b44 | 115 | #ifdef BUTTON_B_PIN |
TheChrisyd | 0:8a7c58553b44 | 116 | , BUTTON_B_PIN |
TheChrisyd | 0:8a7c58553b44 | 117 | #endif |
TheChrisyd | 0:8a7c58553b44 | 118 | #ifdef BUTTON_C_PIN |
TheChrisyd | 0:8a7c58553b44 | 119 | , BUTTON_C_PIN |
TheChrisyd | 0:8a7c58553b44 | 120 | #endif |
TheChrisyd | 0:8a7c58553b44 | 121 | #ifdef BUTTON_X_PIN |
TheChrisyd | 0:8a7c58553b44 | 122 | , BUTTON_X_PIN |
TheChrisyd | 0:8a7c58553b44 | 123 | #endif |
TheChrisyd | 0:8a7c58553b44 | 124 | #ifdef BUTTON_Y_PIN |
TheChrisyd | 0:8a7c58553b44 | 125 | , BUTTON_Y_PIN |
TheChrisyd | 0:8a7c58553b44 | 126 | #endif |
TheChrisyd | 0:8a7c58553b44 | 127 | #ifdef BUTTON_Z_PIN |
TheChrisyd | 0:8a7c58553b44 | 128 | , BUTTON_Z_PIN |
TheChrisyd | 0:8a7c58553b44 | 129 | #endif |
TheChrisyd | 0:8a7c58553b44 | 130 | #ifdef BUTTON_ST_PIN |
TheChrisyd | 0:8a7c58553b44 | 131 | , BUTTON_ST_PIN |
TheChrisyd | 0:8a7c58553b44 | 132 | #endif |
TheChrisyd | 0:8a7c58553b44 | 133 | #ifdef BUTTON_SEL_PIN |
TheChrisyd | 0:8a7c58553b44 | 134 | , BUTTON_SEL_PIN |
TheChrisyd | 0:8a7c58553b44 | 135 | #endif |
TheChrisyd | 0:8a7c58553b44 | 136 | #ifdef STICK_LEFT_PIN |
TheChrisyd | 0:8a7c58553b44 | 137 | , STICK_LEFT_PIN, |
TheChrisyd | 0:8a7c58553b44 | 138 | STICK_RIGHT_PIN, |
TheChrisyd | 0:8a7c58553b44 | 139 | STICK_UP_PIN, |
TheChrisyd | 0:8a7c58553b44 | 140 | STICK_DOWN_PIN |
TheChrisyd | 0:8a7c58553b44 | 141 | #endif |
TheChrisyd | 0:8a7c58553b44 | 142 | }; |
TheChrisyd | 0:8a7c58553b44 | 143 | Joystick::Joystick() |
TheChrisyd | 0:8a7c58553b44 | 144 | { |
TheChrisyd | 0:8a7c58553b44 | 145 | // set up digital pins for dpad and buttons |
TheChrisyd | 0:8a7c58553b44 | 146 | // const prog_uchar *pin = joystickPinList; |
TheChrisyd | 0:8a7c58553b44 | 147 | for (byte i=0; i<sizeof(joystickPinList); ++i) { |
TheChrisyd | 0:8a7c58553b44 | 148 | byte p = pgm_read_byte(joystickPinList+i); |
TheChrisyd | 0:8a7c58553b44 | 149 | //pinMode(p,INPUT); |
TheChrisyd | 0:8a7c58553b44 | 150 | //digitalWrite(p,HIGH); |
TheChrisyd | 0:8a7c58553b44 | 151 | } |
TheChrisyd | 0:8a7c58553b44 | 152 | stickX = stickY = 0; |
TheChrisyd | 0:8a7c58553b44 | 153 | xCal = yCal = 0; |
TheChrisyd | 0:8a7c58553b44 | 154 | buttons = prev = dpad = 0; |
TheChrisyd | 0:8a7c58553b44 | 155 | |
TheChrisyd | 0:8a7c58553b44 | 156 | #ifdef ANALOG_X_PIN |
TheChrisyd | 0:8a7c58553b44 | 157 | dpad |= ANALOG_STICK_BIT; |
TheChrisyd | 0:8a7c58553b44 | 158 | #endif |
TheChrisyd | 0:8a7c58553b44 | 159 | } |
TheChrisyd | 0:8a7c58553b44 | 160 | bool Joystick::hasAnalogStick() |
TheChrisyd | 0:8a7c58553b44 | 161 | { |
TheChrisyd | 0:8a7c58553b44 | 162 | return (dpad&ANALOG_STICK_BIT)!=0; |
TheChrisyd | 0:8a7c58553b44 | 163 | } |
TheChrisyd | 0:8a7c58553b44 | 164 | void Joystick::recalibrate() |
TheChrisyd | 0:8a7c58553b44 | 165 | { |
TheChrisyd | 0:8a7c58553b44 | 166 | read(); |
TheChrisyd | 0:8a7c58553b44 | 167 | xCal = stickX; |
TheChrisyd | 0:8a7c58553b44 | 168 | yCal = stickY; |
TheChrisyd | 0:8a7c58553b44 | 169 | } |
TheChrisyd | 0:8a7c58553b44 | 170 | static char stickCalc(int a, char cal) |
TheChrisyd | 0:8a7c58553b44 | 171 | { |
TheChrisyd | 0:8a7c58553b44 | 172 | //a = ((analogRead(a)-512)/4)-cal; |
TheChrisyd | 0:8a7c58553b44 | 173 | if (a < -128) a = -128; |
TheChrisyd | 0:8a7c58553b44 | 174 | if (a > 127) a = 127; |
TheChrisyd | 0:8a7c58553b44 | 175 | return char(a); |
TheChrisyd | 0:8a7c58553b44 | 176 | } |
TheChrisyd | 0:8a7c58553b44 | 177 | void Joystick::read() |
TheChrisyd | 0:8a7c58553b44 | 178 | { |
TheChrisyd | 0:8a7c58553b44 | 179 | // Joystick buttons |
TheChrisyd | 0:8a7c58553b44 | 180 | prev = buttons; |
TheChrisyd | 0:8a7c58553b44 | 181 | buttons = 0; |
TheChrisyd | 0:8a7c58553b44 | 182 | #ifdef BUTTON_A_PIN |
TheChrisyd | 0:8a7c58553b44 | 183 | // if (digitalRead(BUTTON_A_PIN)==LOW) { buttons |= buttonA; } |
TheChrisyd | 0:8a7c58553b44 | 184 | #endif |
TheChrisyd | 0:8a7c58553b44 | 185 | #ifdef BUTTON_B_PIN |
TheChrisyd | 0:8a7c58553b44 | 186 | // if (digitalRead(BUTTON_B_PIN)==LOW) { buttons |= buttonB; } |
TheChrisyd | 0:8a7c58553b44 | 187 | #endif |
TheChrisyd | 0:8a7c58553b44 | 188 | #ifdef BUTTON_C_PIN |
TheChrisyd | 0:8a7c58553b44 | 189 | // if (digitalRead(BUTTON_C_PIN)==LOW) { buttons |= buttonC; } |
TheChrisyd | 0:8a7c58553b44 | 190 | #endif |
TheChrisyd | 0:8a7c58553b44 | 191 | #ifdef BUTTON_X_PIN |
TheChrisyd | 0:8a7c58553b44 | 192 | // if (digitalRead(BUTTON_X_PIN)==LOW) { buttons |= buttonX; } |
TheChrisyd | 0:8a7c58553b44 | 193 | #endif |
TheChrisyd | 0:8a7c58553b44 | 194 | #ifdef BUTTON_Y_PIN |
TheChrisyd | 0:8a7c58553b44 | 195 | // if (digitalRead(BUTTON_Y_PIN)==LOW) { buttons |= buttonY; } |
TheChrisyd | 0:8a7c58553b44 | 196 | #endif |
TheChrisyd | 0:8a7c58553b44 | 197 | #ifdef BUTTON_Z_PIN |
TheChrisyd | 0:8a7c58553b44 | 198 | // if (digitalRead(BUTTON_Z_PIN)==LOW) { buttons |= buttonZ; } |
TheChrisyd | 0:8a7c58553b44 | 199 | #endif |
TheChrisyd | 0:8a7c58553b44 | 200 | #ifdef BUTTON_SEL_PIN |
TheChrisyd | 0:8a7c58553b44 | 201 | // if (digitalRead(BUTTON_SEL_PIN)==LOW){ buttons |= buttonSelect; } |
TheChrisyd | 0:8a7c58553b44 | 202 | #endif |
TheChrisyd | 0:8a7c58553b44 | 203 | #ifdef BUTTON_ST_PIN |
TheChrisyd | 0:8a7c58553b44 | 204 | // if (digitalRead(BUTTON_ST_PIN)==LOW){ buttons |= buttonStart; } |
TheChrisyd | 0:8a7c58553b44 | 205 | #endif |
TheChrisyd | 0:8a7c58553b44 | 206 | |
TheChrisyd | 0:8a7c58553b44 | 207 | // Digital joystick/dpad |
TheChrisyd | 0:8a7c58553b44 | 208 | dpad &= STICK_INFO_MASK; // The top bits are informational...preserve them |
TheChrisyd | 0:8a7c58553b44 | 209 | #ifdef STICK_LEFT_PIN |
TheChrisyd | 0:8a7c58553b44 | 210 | // if (!digitalRead(STICK_LEFT_PIN)) { dpad |= STICK_LEFT_BIT; } |
TheChrisyd | 0:8a7c58553b44 | 211 | // if (!digitalRead(STICK_RIGHT_PIN)) { dpad |= STICK_RIGHT_BIT; } |
TheChrisyd | 0:8a7c58553b44 | 212 | // if (!digitalRead(STICK_UP_PIN)) { dpad |= STICK_UP_BIT; } |
TheChrisyd | 0:8a7c58553b44 | 213 | // if (!digitalRead(STICK_DOWN_PIN)) { dpad |= STICK_DOWN_BIT; } |
TheChrisyd | 0:8a7c58553b44 | 214 | #ifdef DIGITAL_EMULATE_ANALOG |
TheChrisyd | 0:8a7c58553b44 | 215 | stickX = 0; |
TheChrisyd | 0:8a7c58553b44 | 216 | if (dpad&STICK_LEFT_BIT) { stickX = -127; } |
TheChrisyd | 0:8a7c58553b44 | 217 | else if (dpad&STICK_RIGHT_BIT) { stickX = 127; } |
TheChrisyd | 0:8a7c58553b44 | 218 | stickY = 0; |
TheChrisyd | 0:8a7c58553b44 | 219 | if (dpad&STICK_UP_BIT) { stickY = 127; } |
TheChrisyd | 0:8a7c58553b44 | 220 | else if (dpad&STICK_DOWN_BIT) { stickY = -127; } |
TheChrisyd | 0:8a7c58553b44 | 221 | #endif |
TheChrisyd | 0:8a7c58553b44 | 222 | #endif |
TheChrisyd | 0:8a7c58553b44 | 223 | |
TheChrisyd | 0:8a7c58553b44 | 224 | // Analog stick |
TheChrisyd | 0:8a7c58553b44 | 225 | #ifdef ANALOG_X_PIN |
TheChrisyd | 0:8a7c58553b44 | 226 | stickX = stickCalc(ANALOG_X_PIN,xCal); |
TheChrisyd | 0:8a7c58553b44 | 227 | #endif |
TheChrisyd | 0:8a7c58553b44 | 228 | #ifdef ANALOG_Y_PIN |
TheChrisyd | 0:8a7c58553b44 | 229 | stickY = stickCalc(ANALOG_Y_PIN,yCal); |
TheChrisyd | 0:8a7c58553b44 | 230 | #endif |
TheChrisyd | 0:8a7c58553b44 | 231 | #ifdef ANALOG_EMULATE_DIGITAL |
TheChrisyd | 0:8a7c58553b44 | 232 | if (stickX < -40) { dpad |= STICK_LEFT_BIT; } |
TheChrisyd | 0:8a7c58553b44 | 233 | else if (stickX > 40) { dpad |= STICK_RIGHT_BIT; } |
TheChrisyd | 0:8a7c58553b44 | 234 | if (stickY > 40) { dpad |= STICK_UP_BIT; } |
TheChrisyd | 0:8a7c58553b44 | 235 | else if (stickY < -40) { dpad |= STICK_DOWN_BIT; } |
TheChrisyd | 0:8a7c58553b44 | 236 | #endif |
TheChrisyd | 0:8a7c58553b44 | 237 | } |
TheChrisyd | 0:8a7c58553b44 | 238 | |
TheChrisyd | 0:8a7c58553b44 | 239 | /*-------------------------------------------------------- |
TheChrisyd | 0:8a7c58553b44 | 240 | Useful function to show joystick status on screen. |
TheChrisyd | 0:8a7c58553b44 | 241 | |
TheChrisyd | 0:8a7c58553b44 | 242 | Note: You won't make your program any smaller by |
TheChrisyd | 0:8a7c58553b44 | 243 | removing this - the Arduino compiler is really, |
TheChrisyd | 0:8a7c58553b44 | 244 | really good at discarding unused code. |
TheChrisyd | 0:8a7c58553b44 | 245 | |
TheChrisyd | 0:8a7c58553b44 | 246 | ie. If you're not calling Joystick::dump() then it |
TheChrisyd | 0:8a7c58553b44 | 247 | doesn't take up any space. Try it and see...! |
TheChrisyd | 0:8a7c58553b44 | 248 | --------------------------------------------------------*/ |
TheChrisyd | 0:8a7c58553b44 | 249 | // Formatted output of joystick position |
TheChrisyd | 0:8a7c58553b44 | 250 | static void jpos(int v, char *s, char t) |
TheChrisyd | 0:8a7c58553b44 | 251 | { |
TheChrisyd | 0:8a7c58553b44 | 252 | *s++ = t; |
TheChrisyd | 0:8a7c58553b44 | 253 | *s++ = ':'; |
TheChrisyd | 0:8a7c58553b44 | 254 | boolean neg = (v<0); |
TheChrisyd | 0:8a7c58553b44 | 255 | if (neg) { |
TheChrisyd | 0:8a7c58553b44 | 256 | v = -v; |
TheChrisyd | 0:8a7c58553b44 | 257 | } |
TheChrisyd | 0:8a7c58553b44 | 258 | char *o = s; |
TheChrisyd | 0:8a7c58553b44 | 259 | int m = 1000; |
TheChrisyd | 0:8a7c58553b44 | 260 | while (m != 0) { |
TheChrisyd | 0:8a7c58553b44 | 261 | int d = v/m; |
TheChrisyd | 0:8a7c58553b44 | 262 | *o++ = d+'0'; |
TheChrisyd | 0:8a7c58553b44 | 263 | v -= d*m; |
TheChrisyd | 0:8a7c58553b44 | 264 | m /= 10; |
TheChrisyd | 0:8a7c58553b44 | 265 | } |
TheChrisyd | 0:8a7c58553b44 | 266 | *o-- = 0; |
TheChrisyd | 0:8a7c58553b44 | 267 | // Remove leading zeros |
TheChrisyd | 0:8a7c58553b44 | 268 | while ((s<o) and (*s=='0')) { |
TheChrisyd | 0:8a7c58553b44 | 269 | *s++ = ' '; |
TheChrisyd | 0:8a7c58553b44 | 270 | } |
TheChrisyd | 0:8a7c58553b44 | 271 | if (neg) { |
TheChrisyd | 0:8a7c58553b44 | 272 | s[-1] = '-'; |
TheChrisyd | 0:8a7c58553b44 | 273 | } |
TheChrisyd | 0:8a7c58553b44 | 274 | } |
TheChrisyd | 0:8a7c58553b44 | 275 | void Joystick::dump(int sx, int sy) |
TheChrisyd | 0:8a7c58553b44 | 276 | { |
TheChrisyd | 0:8a7c58553b44 | 277 | char temp[32]; |
TheChrisyd | 0:8a7c58553b44 | 278 | if (hasAnalogStick()) { |
TheChrisyd | 0:8a7c58553b44 | 279 | jpos(analogX(),temp,'X'); |
TheChrisyd | 0:8a7c58553b44 | 280 | GD.putstr(sx,sy++,temp); |
TheChrisyd | 0:8a7c58553b44 | 281 | jpos(analogY(),temp,'Y'); |
TheChrisyd | 0:8a7c58553b44 | 282 | GD.putstr(sx,sy++,temp); |
TheChrisyd | 0:8a7c58553b44 | 283 | } |
TheChrisyd | 0:8a7c58553b44 | 284 | temp[0] = 'D'; |
TheChrisyd | 0:8a7c58553b44 | 285 | temp[1] = ':'; |
TheChrisyd | 0:8a7c58553b44 | 286 | char *s = temp+2; |
TheChrisyd | 0:8a7c58553b44 | 287 | *s++ = left() ?'L':'.'; |
TheChrisyd | 0:8a7c58553b44 | 288 | *s++ = right() ?'R':'.'; |
TheChrisyd | 0:8a7c58553b44 | 289 | *s++ = up() ?'U':'.'; |
TheChrisyd | 0:8a7c58553b44 | 290 | *s++ = down() ?'D':'.'; |
TheChrisyd | 0:8a7c58553b44 | 291 | *s = 0; |
TheChrisyd | 0:8a7c58553b44 | 292 | GD.putstr(sx,sy++,temp); |
TheChrisyd | 0:8a7c58553b44 | 293 | temp[0] = 'B'; |
TheChrisyd | 0:8a7c58553b44 | 294 | s = temp+2; |
TheChrisyd | 0:8a7c58553b44 | 295 | *s++ = (buttons&buttonSelect)?'L':'.'; |
TheChrisyd | 0:8a7c58553b44 | 296 | *s++ = (buttons&buttonStart)?'S':'.'; |
TheChrisyd | 0:8a7c58553b44 | 297 | *s++ = (buttons&buttonZ)?'Z':'.'; |
TheChrisyd | 0:8a7c58553b44 | 298 | *s++ = (buttons&buttonY)?'Y':'.'; |
TheChrisyd | 0:8a7c58553b44 | 299 | *s++ = (buttons&buttonX)?'X':'.'; |
TheChrisyd | 0:8a7c58553b44 | 300 | *s++ = (buttons&buttonC)?'C':'.'; |
TheChrisyd | 0:8a7c58553b44 | 301 | *s++ = (buttons&buttonB)?'B':'.'; |
TheChrisyd | 0:8a7c58553b44 | 302 | *s++ = (buttons&buttonA)?'A':'.'; |
TheChrisyd | 0:8a7c58553b44 | 303 | *s = 0; |
TheChrisyd | 0:8a7c58553b44 | 304 | GD.putstr(sx,sy++,temp); |
TheChrisyd | 0:8a7c58553b44 | 305 | } |