home *** CD-ROM | disk | FTP | other *** search
/ GameStar Special 2004 August / GSSH0804.iso / Action / TumikiFighters / tf0_2.exe / tf / src / abagames / util / sdl / pad.d < prev    next >
Text File  |  2004-05-15  |  3KB  |  103 lines

  1. /*
  2.  * $Id: pad.d,v 1.2 2004/05/14 14:35:39 kenta Exp $
  3.  *
  4.  * Copyright 2003 Kenta Cho. All rights reserved.
  5.  */
  6. module abagames.util.sdl.pad;
  7.  
  8. private import std.string;
  9. private import SDL;
  10. private import abagames.util.sdl.input;
  11. private import abagames.util.sdl.sdlexception;
  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 || 
  53.     keys[SDLK_d] == SDL_PRESSED || x > JOYSTICK_AXIS) {
  54.       pad |= PAD_RIGHT;
  55.     }
  56.     if (keys[SDLK_LEFT] == SDL_PRESSED || keys[SDLK_KP4] == SDL_PRESSED ||
  57.     keys[SDLK_a] == SDL_PRESSED || x < -JOYSTICK_AXIS) {
  58.       pad |= PAD_LEFT;
  59.     }
  60.     if (keys[SDLK_DOWN] == SDL_PRESSED || keys[SDLK_KP2] == SDL_PRESSED ||
  61.     keys[SDLK_s] == SDL_PRESSED || y > JOYSTICK_AXIS) {
  62.       pad |= PAD_DOWN;
  63.     }
  64.     if (keys[SDLK_UP] == SDL_PRESSED ||  keys[SDLK_KP8] == SDL_PRESSED ||
  65.     keys[SDLK_w] == SDL_PRESSED || y < -JOYSTICK_AXIS) {
  66.       pad |= PAD_UP;
  67.     }
  68.     return pad;
  69.   }
  70.  
  71.   public int getButtonState() {
  72.     int btn = 0;
  73.     int btn1 = 0, btn2 = 0, btn3 = 0, btn4 = 0, btn5 = 0, btn6 = 0, btn7 = 0, btn8 = 0;
  74.     if (stick) {
  75.       btn1 = SDL_JoystickGetButton(stick, 0);
  76.       btn2 = SDL_JoystickGetButton(stick, 1);
  77.       btn3 = SDL_JoystickGetButton(stick, 2);
  78.       btn4 = SDL_JoystickGetButton(stick, 3);
  79.       btn5 = SDL_JoystickGetButton(stick, 4);
  80.       btn6 = SDL_JoystickGetButton(stick, 5);
  81.       btn7 = SDL_JoystickGetButton(stick, 6);
  82.       btn8 = SDL_JoystickGetButton(stick, 7);
  83.     }
  84.     if (keys[SDLK_z] == SDL_PRESSED || keys[SDLK_PERIOD] == SDL_PRESSED ||
  85.     keys[SDLK_LCTRL] == SDL_PRESSED || 
  86.     btn1 || btn4 || btn5 || btn8) {
  87.       if (!buttonReversed)
  88.     btn |= PAD_BUTTON1;
  89.       else
  90.     btn |= PAD_BUTTON2;
  91.     }
  92.     if (keys[SDLK_x] == SDL_PRESSED || keys[SDLK_SLASH] == SDL_PRESSED ||
  93.     keys[SDLK_LALT] == SDL_PRESSED || keys[SDLK_LSHIFT] == SDL_PRESSED ||
  94.     btn2 || btn3 || btn6 || btn7) {
  95.       if (!buttonReversed)
  96.     btn |= PAD_BUTTON2;
  97.       else
  98.     btn |= PAD_BUTTON1;
  99.     }
  100.     return btn;
  101.   }
  102. }
  103.