home *** CD-ROM | disk | FTP | other *** search
/ GameStar Special 2004 August / GSSH0804.iso / Action / Parsec47 / Parsec47.exe / p47 / src / abagames / util / sdl / Pad.d < prev    next >
Text File  |  2003-11-29  |  3KB  |  97 lines

  1. /*
  2.  * $Id: Pad.d,v 1.1.1.1 2003/11/28 17:26:30 kenta Exp $
  3.  *
  4.  * Copyright 2003 Kenta Cho. All rights reserved.
  5.  */
  6. module abagames.util.sdl.Pad;
  7.  
  8. import std.string;
  9. import SDL;
  10. import abagames.util.sdl.Input;
  11. import abagames.util.sdl.SDLInitFailedException;
  12.  
  13. /**
  14.  * Joystick and keyboard input.
  15.  */
  16. public class Pad: Input {
  17.  public:
  18.   static const int PAD_UP = 1;
  19.   static const int PAD_DOWN = 2;
  20.   static const int PAD_LEFT = 4;
  21.   static const int PAD_RIGHT = 8;
  22.   static const int PAD_BUTTON1 = 16;
  23.   static const int PAD_BUTTON2 = 32;
  24.   Uint8 *keys;
  25.   bool buttonReversed = false;
  26.  
  27.  private:
  28.   SDL_Joystick *stick = null;
  29.   const int JOYSTICK_AXIS = 16384;
  30.  
  31.   public void openJoystick() {
  32.     if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) < 0) {
  33.       throw new SDLInitFailedException(
  34.     "Unable to init SDL joystick: " ~ std.string.toString(SDL_GetError()));
  35.     }
  36.     stick = SDL_JoystickOpen(0);
  37.   }
  38.  
  39.   public void handleEvent(SDL_Event *event) {
  40.     keys = SDL_GetKeyState(null);
  41.   }
  42.   
  43.   // Joystick and keyboard handler.
  44.  
  45.   public int getPadState() {
  46.     int x = 0, y = 0;
  47.     int pad = 0;
  48.     if (stick) {
  49.       x = SDL_JoystickGetAxis(stick, 0);
  50.       y = SDL_JoystickGetAxis(stick, 1);
  51.     }
  52.     if (keys[SDLK_RIGHT] == SDL_PRESSED || keys[SDLK_KP6] == SDL_PRESSED || x > JOYSTICK_AXIS) {
  53.       pad |= PAD_RIGHT;
  54.     }
  55.     if (keys[SDLK_LEFT] == SDL_PRESSED || keys[SDLK_KP4] == SDL_PRESSED || x < -JOYSTICK_AXIS) {
  56.       pad |= PAD_LEFT;
  57.     }
  58.     if (keys[SDLK_DOWN] == SDL_PRESSED || keys[SDLK_KP2] == SDL_PRESSED || y > JOYSTICK_AXIS) {
  59.       pad |= PAD_DOWN;
  60.     }
  61.     if (keys[SDLK_UP] == SDL_PRESSED ||  keys[SDLK_KP8] == SDL_PRESSED || y < -JOYSTICK_AXIS) {
  62.       pad |= PAD_UP;
  63.     }
  64.     return pad;
  65.   }
  66.  
  67.   public int getButtonState() {
  68.     int btn = 0;
  69.     int btn1 = 0, btn2 = 0, btn3 = 0, btn4 = 0, btn5 = 0, btn6 = 0, btn7 = 0, btn8 = 0;
  70.     if (stick) {
  71.       btn1 = SDL_JoystickGetButton(stick, 0);
  72.       btn2 = SDL_JoystickGetButton(stick, 1);
  73.       btn3 = SDL_JoystickGetButton(stick, 2);
  74.       btn4 = SDL_JoystickGetButton(stick, 3);
  75.       btn5 = SDL_JoystickGetButton(stick, 4);
  76.       btn6 = SDL_JoystickGetButton(stick, 5);
  77.       btn7 = SDL_JoystickGetButton(stick, 6);
  78.       btn8 = SDL_JoystickGetButton(stick, 7);
  79.     }
  80.     if (keys[SDLK_z] == SDL_PRESSED || keys[SDLK_LCTRL] == SDL_PRESSED || 
  81.     btn1 || btn4 || btn5 || btn8) {
  82.       if (!buttonReversed)
  83.     btn |= PAD_BUTTON1;
  84.       else
  85.     btn |= PAD_BUTTON2;
  86.     }
  87.     if (keys[SDLK_x] == SDL_PRESSED || keys[SDLK_LALT] == SDL_PRESSED ||
  88.     btn2 || btn3 || btn6 || btn7) {
  89.       if (!buttonReversed)
  90.     btn |= PAD_BUTTON2;
  91.       else
  92.     btn |= PAD_BUTTON1;
  93.     }
  94.     return btn;
  95.   }
  96. }
  97.