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