XInput.java
     1: //========================================================================================
     2: //  XInput.java
     3: //    en:XInput Gamepad
     4: //    ja:XInput Gamepad
     5: //  Copyright (C) 2003-2023 Makoto Kamada
     6: //
     7: //  This file is part of the XEiJ (X68000 Emulator in Java).
     8: //  You can use, modify and redistribute the XEiJ if the conditions are met.
     9: //  Read the XEiJ License for more details.
    10: //  https://stdkmd.net/xeij/
    11: //========================================================================================
    12: 
    13: package xeij;
    14: 
    15: import java.util.*;
    16: 
    17: //class XInput
    18: public final class XInput extends Thread {
    19: 
    20: 
    21: 
    22:   //動作制御
    23: 
    24:   protected Gamepad[] gamepads;  //Gamepadの配列
    25:   protected ArrayList<GamepadListener> gamepadListeners;  //Gamepadリスナーのリスト
    26:   protected boolean polling;  //true=ポーリング動作中
    27: 
    28:   //new XInput ()
    29:   //  コンストラクタ
    30:   public XInput () {
    31:     //Gamepadの配列を作る
    32:     gamepads = new Gamepad[4];
    33:     //Gamepadを開く
    34:     for (int index = 0; index < 4; index++) {
    35:       gamepads[index] = new Gamepad (index);
    36:     }
    37:     //Gamepadリスナーのリストを作る
    38:     gamepadListeners = new ArrayList<GamepadListener> ();
    39:     //ポーリングを開始する
    40:     polling = true;
    41:     this.start ();
    42:   }  //new XInput
    43: 
    44:   //end ()
    45:   //  終了
    46:   public void end () {
    47:     //ポーリングを終了する
    48:     if (polling) {
    49:       polling = false;
    50:       if (this.isAlive ()) {  //スレッドがある
    51:         this.interrupt ();  //割り込む
    52:         try {
    53:           this.join ();  //止まるまで待つ
    54:         } catch (InterruptedException ie) {
    55:         }
    56:       }
    57:     }
    58:     //Gamepadを閉じる
    59:     for (int index = 0; index < 4; index++) {
    60:       gamepads[index].close ();
    61:     }
    62:   }  //end
    63: 
    64:   //run ()
    65:   //  ポーリング
    66:   //  使用できるコントローラは1/100間隔、それ以外はおよそ1/3秒間隔でポーリングする
    67:   @Override public void run () {
    68:     while (polling) {
    69:       boolean available = false;  //true=使用できるコントローラがある
    70:       int counter = 0;  //0~31
    71:       for (int index = 0; index < 4; index++) {
    72:         Gamepad gamepad = gamepads[index];
    73:         if (counter == 0 || gamepad.isAvailable ()) {
    74:           available = available || gamepad.isAvailable ();
    75:           if (gamepad.getState () &&  //状態を取得する。変化したかつ
    76:               gamepadListeners.size () != 0) {  //リスナーがある
    77:             if (gamepad.isConnected ()) {  //接続された
    78:               for (GamepadListener listener : gamepadListeners) {
    79:                 listener.connected (gamepad);
    80:               }
    81:             } else if (gamepad.isDisconnected ()) {  //切断された
    82:               for (GamepadListener listener : gamepadListeners) {
    83:                 listener.disconnected (gamepad);
    84:               }
    85:             }
    86:             if (gamepad.isAvailable ()) {  //使用できる
    87:               int buttonMasks = gamepad.getPressedButtonMasks ();
    88:               if (buttonMasks != 0) {  //押されたボタンがある
    89:                 for (GamepadListener listener : gamepadListeners) {
    90:                   listener.buttonPressed (gamepad, buttonMasks);
    91:                 }
    92:               }
    93:               buttonMasks = gamepad.getReleasedButtonMasks ();
    94:               if (buttonMasks != 0) {  //離されたボタンがある
    95:                 for (GamepadListener listener : gamepadListeners) {
    96:                   listener.buttonReleased (gamepad, buttonMasks);
    97:                 }
    98:               }
    99:               if (gamepad.isLeftStickMovedX ()) {  //左スティックがX方向に動いた
   100:                 for (GamepadListener listener : gamepadListeners) {
   101:                   listener.leftStickMovedX (gamepad);
   102:                 }
   103:               }
   104:               if (gamepad.isLeftStickMovedY ()) {  //左スティックがY方向に動いた
   105:                 for (GamepadListener listener : gamepadListeners) {
   106:                   listener.leftStickMovedY (gamepad);
   107:                 }
   108:               }
   109:               if (gamepad.isLeftTriggerMoved ()) {  //左トリガーが動いた
   110:                 for (GamepadListener listener : gamepadListeners) {
   111:                   listener.leftTriggerMoved (gamepad);
   112:                 }
   113:               }
   114:               if (gamepad.isRightStickMovedX ()) {  //右スティックがX方向に動いた
   115:                 for (GamepadListener listener : gamepadListeners) {
   116:                   listener.rightStickMovedX (gamepad);
   117:                 }
   118:               }
   119:               if (gamepad.isRightStickMovedY ()) {  //右スティックがY方向に動いた
   120:                 for (GamepadListener listener : gamepadListeners) {
   121:                   listener.rightStickMovedY (gamepad);
   122:                 }
   123:               }
   124:               if (gamepad.isRightTriggerMoved ()) {  //右トリガーが動いた
   125:                 for (GamepadListener listener : gamepadListeners) {
   126:                   listener.rightTriggerMoved (gamepad);
   127:                 }
   128:               }
   129:             }  //if 使用できる
   130:           }  //if 変化したかつリスナーがある
   131:         }  //if counter==0||isAvailable
   132:       }  //for index
   133:       try {
   134:         if (available) {  //使用できるコントローラがある
   135:           counter = (counter + 1) & 31;
   136:           Thread.sleep (10L);
   137:         } else {  //使用できるコントローラがない
   138:           counter = 0;
   139:           Thread.sleep (320L);
   140:         }
   141:       } catch (InterruptedException ie) {  //割り込まれた
   142:         return;  //終了する
   143:       }
   144:     }  //while polling
   145:   }  //run
   146: 
   147: 
   148: 
   149:   //状態取得
   150: 
   151:   //ボタン
   152:   public static final int UP_BIT        = 0;  //上ボタン
   153:   public static final int DOWN_BIT      = 1;  //下ボタン
   154:   public static final int LEFT_BIT      = 2;  //左ボタン
   155:   public static final int RIGHT_BIT     = 3;  //右ボタン
   156:   public static final int START_BIT     = 4;  //STARTボタン
   157:   public static final int BACK_BIT      = 5;  //BACKボタン
   158:   public static final int LSTICK_BIT    = 6;  //左スティックボタン
   159:   public static final int RSTICK_BIT    = 7;  //右スティックボタン
   160:   public static final int LB_BIT        = 8;  //LBボタン
   161:   public static final int RB_BIT        = 9;  //RBボタン
   162:   public static final int A_BIT         = 12;  //Aボタン
   163:   public static final int B_BIT         = 13;  //Bボタン
   164:   public static final int X_BIT         = 14;  //Xボタン
   165:   public static final int Y_BIT         = 15;  //Yボタン
   166:   public static final int LSUP_BIT      = 16;  //左スティック上
   167:   public static final int LSDOWN_BIT    = 17;  //左スティック下
   168:   public static final int LSLEFT_BIT    = 18;  //左スティック左
   169:   public static final int LSRIGHT_BIT   = 19;  //左スティック右
   170:   public static final int RSUP_BIT      = 20;  //右スティック上
   171:   public static final int RSDOWN_BIT    = 21;  //右スティック下
   172:   public static final int RSLEFT_BIT    = 22;  //右スティック左
   173:   public static final int RSRIGHT_BIT   = 23;  //右スティック右
   174:   public static final int LTRIGGER_BIT  = 24;  //左トリガー
   175:   public static final int RTRIGGER_BIT  = 25;  //右トリガー
   176:   public static final int BUTTONS       = 26;  //ボタンの数
   177: 
   178:   public static final int UP_MASK       = 1 << UP_BIT;
   179:   public static final int DOWN_MASK     = 1 << DOWN_BIT;
   180:   public static final int LEFT_MASK     = 1 << LEFT_BIT;
   181:   public static final int RIGHT_MASK    = 1 << RIGHT_BIT;
   182:   public static final int START_MASK    = 1 << START_BIT;
   183:   public static final int BACK_MASK     = 1 << BACK_BIT;
   184:   public static final int LSTICK_MASK   = 1 << LSTICK_BIT;
   185:   public static final int RSTICK_MASK   = 1 << RSTICK_BIT;
   186:   public static final int LB_MASK       = 1 << LB_BIT;
   187:   public static final int RB_MASK       = 1 << RB_BIT;
   188:   public static final int A_MASK        = 1 << A_BIT;
   189:   public static final int B_MASK        = 1 << B_BIT;
   190:   public static final int X_MASK        = 1 << X_BIT;
   191:   public static final int Y_MASK        = 1 << Y_BIT;
   192:   public static final int LSUP_MASK     = 1 << LSUP_BIT;
   193:   public static final int LSDOWN_MASK   = 1 << LSDOWN_BIT;
   194:   public static final int LSLEFT_MASK   = 1 << LSLEFT_BIT;
   195:   public static final int LSRIGHT_MASK  = 1 << LSRIGHT_BIT;
   196:   public static final int RSUP_MASK     = 1 << RSUP_BIT;
   197:   public static final int RSDOWN_MASK   = 1 << RSDOWN_BIT;
   198:   public static final int RSLEFT_MASK   = 1 << RSLEFT_BIT;
   199:   public static final int RSRIGHT_MASK  = 1 << RSRIGHT_BIT;
   200:   public static final int LTRIGGER_MASK = 1 << LTRIGGER_BIT;
   201:   public static final int RTRIGGER_MASK = 1 << RTRIGGER_BIT;
   202: 
   203:   public static final String BIT_TO_TEXT[] = new String[] {
   204:     "UP", "DOWN", "LEFT", "RIGHT", "START", "BACK", "LSTICK", "RSTICK",
   205:     "LB", "RB", "(10)", "(11)", "A", "B", "X", "Y",
   206:     "LSUP", "LSDOWN", "LSLEFT", "LSRIGHT", "RSUP", "RSDOWN", "RSLEFT", "RSRIGHT",
   207:     "LTRIGGER", "RTRIGGER",
   208:   };
   209: 
   210:   //buttonMasks = getButtonMasks (index)
   211:   //  すべての押されているボタンのマスクを返す
   212:   //  index  コントローラのインデックス
   213:   //  buttonMasks  すべての押されているボタンのマスク
   214:   public int getButtonMasks (int index) {
   215:     return gamepads[index].getButtonMasks ();
   216:   }
   217: 
   218:   //leftStickX = getLeftStickX (index)
   219:   //  左スティックのX方向の位置を返す
   220:   //  index  コントローラのインデックス
   221:   //  leftStickX  左スティックのX方向の位置
   222:   public int getLeftStickX (int index) {
   223:     return gamepads[index].getLeftStickX ();
   224:   }
   225: 
   226:   //leftStickY = getLeftStickY (index)
   227:   //  左スティックのY方向の位置を返す
   228:   //  index  コントローラのインデックス
   229:   //  leftStickY  左スティックのY方向の位置
   230:   public int getLeftStickY (int index) {
   231:     return gamepads[index].getLeftStickY ();
   232:   }
   233: 
   234:   //leftTrigger = getLeftTrigger (index)
   235:   //  左トリガーの位置を返す
   236:   //  index  コントローラのインデックス
   237:   //  leftTrigger  左トリガーの位置
   238:   public int getLeftTrigger (int index) {
   239:     return gamepads[index].getLeftTrigger ();
   240:   }
   241: 
   242:   //rightStickX = getRightStickX (index)
   243:   //  右スティックのX方向の位置を返す
   244:   //  index  コントローラのインデックス
   245:   //  rightStickX  右スティックのX方向の位置
   246:   public int getRightStickX (int index) {
   247:     return gamepads[index].getRightStickX ();
   248:   }
   249: 
   250:   //rightStickY = getRightStickY (index)
   251:   //  右スティックのY方向の位置を返す
   252:   //  index  コントローラのインデックス
   253:   //  rightStickY  右スティックのY方向の位置
   254:   public int getRightStickY (int index) {
   255:     return gamepads[index].getRightStickY ();
   256:   }
   257: 
   258:   //rightTrigger = getRightTrigger (index)
   259:   //  右トリガーの位置を返す
   260:   //  index  コントローラのインデックス
   261:   //  rightTrigger  右トリガーの位置
   262:   public int getRightTrigger (int index) {
   263:     return gamepads[index].getRightTrigger ();
   264:   }
   265: 
   266:   //available = isAvailable (index)
   267:   //  使用できるかを返す
   268:   //  index  コントローラのインデックス
   269:   //  available  使用できるか
   270:   public boolean isAvailable (int index) {
   271:     return gamepads[index].isAvailable ();
   272:   }
   273: 
   274: /*
   275:   //setCenterOfLeftStick (index, centerOfLeftStickX, centerOfLeftStickY)
   276:   //  左スティックの中央の位置を設定する
   277:   //  index  コントローラのインデックス
   278:   //  centerOfLeftStickX  左スティックのX方向の中央の位置
   279:   //  centerOfLeftStickY  左スティックのY方向の中央の位置
   280:   public void setCenterOfLeftStick (int index, int centerOfLeftStickX, int centerOfLeftStickY) {
   281:     gamepads[index].setCenterOfLeftStick (centerOfLeftStickX, centerOfLeftStickY);
   282:   }
   283: 
   284:   //setCenterOfRightStick (index, centerOfRightStickX, centerOfRightStickY)
   285:   //  右スティックの中央の位置を設定する
   286:   //  index  コントローラのインデックス
   287:   //  centerOfRightStickX  右スティックのX方向の中央の位置
   288:   //  centerOfRightStickY  右スティックのY方向の中央の位置
   289:   public void setCenterOfRightStick (int index, int centerOfRightStickX, int centerOfRightStickY) {
   290:     gamepads[index].setCenterOfRightStick (centerOfRightStickX, centerOfRightStickY);
   291:   }
   292: 
   293:   //setPlayOfLeftStick (index, playOfLeftStickX, playOfLeftStickY)
   294:   //  左スティックの遊びを設定する
   295:   //  index  コントローラのインデックス
   296:   //  playOfLeftStickX  左スティックのX方向の遊び
   297:   //  playOfLeftStickY  左スティックのY方向の遊び
   298:   public void setPlayOfLeftStick (int index, int playOfLeftStickX, int playOfLeftStickY) {
   299:     gamepads[index].setPlayOfLeftStick (playOfLeftStickX, playOfLeftStickY);
   300:   }
   301: 
   302:   //setPlayOfRightStick (index, playOfRightStickX, playOfRightStickY)
   303:   //  右スティックの遊びを設定する
   304:   //  index  コントローラのインデックス
   305:   //  playOfRightStickX  右スティックのX方向の遊び
   306:   //  playOfRightStickY  右スティックのY方向の遊び
   307:   public void setPlayOfRightStick (int index, int playOfRightStickX, int playOfRightStickY) {
   308:     gamepads[index].setPlayOfRightStick (playOfRightStickX, playOfRightStickY);
   309:   }
   310: */
   311: 
   312:   //setThresholdOfLeftStick (index, thresholdOfLeftStick)
   313:   //  左スティックの閾値を設定する
   314:   //  index  コントローラのインデックス
   315:   //  thresholdOfLeftStick  左スティックの閾値
   316:   public void setThresholdOfLeftStick (int index, int thresholdOfLeftStick) {
   317:     gamepads[index].setThresholdOfLeftStick (thresholdOfLeftStick);
   318:   }
   319: 
   320:   //setThresholdOfRightStick (index, thresholdOfRightStick)
   321:   //  右スティックの閾値を設定する
   322:   //  index  コントローラのインデックス
   323:   //  thresholdOfRightStick  右スティックの閾値
   324:   public void setThresholdOfRightStick (int index, int thresholdOfRightStick) {
   325:     gamepads[index].setThresholdOfRightStick (thresholdOfRightStick);
   326:   }
   327: 
   328:   //setThresholdOfLeftTrigger (index, thresholdOfLeftTrigger)
   329:   //  左トリガーの閾値を設定する
   330:   //  index  コントローラのインデックス
   331:   //  thresholdOfLeftTrigger  左トリガーの閾値
   332:   public void setThresholdOfLeftTrigger (int index, int thresholdOfLeftTrigger) {
   333:     gamepads[index].setThresholdOfLeftTrigger (thresholdOfLeftTrigger);
   334:   }
   335: 
   336:   //setThresholdOfRightTrigger (index, thresholdOfRightTrigger)
   337:   //  右トリガーの閾値を設定する
   338:   //  index  コントローラのインデックス
   339:   //  thresholdOfRightTrigger  右トリガーの閾値
   340:   public void setThresholdOfRightTrigger (int index, int thresholdOfRightTrigger) {
   341:     gamepads[index].setThresholdOfRightTrigger (thresholdOfRightTrigger);
   342:   }
   343: 
   344: 
   345: 
   346:   //Gamepadリスナー
   347: 
   348:   //interface XInput.GamepadListener
   349:   public interface GamepadListener {
   350:     public void connected (Gamepad gamepad);  //接続された
   351:     public void disconnected (Gamepad gamepad);  //切断された
   352:     public void buttonPressed (Gamepad gamepad, int buttonMasks);  //ボタンが押された
   353:     public void buttonReleased (Gamepad gamepad, int buttonMasks);  //ボタンが離された
   354:     public void leftStickMovedX (Gamepad gamepad);  //左スティックがX方向に動いた
   355:     public void leftStickMovedY (Gamepad gamepad);  //左スティックがY方向に動いた
   356:     public void leftTriggerMoved (Gamepad gamepad);  //左トリガーが動いた
   357:     public void rightStickMovedX (Gamepad gamepad);  //右スティックがX方向に動いた
   358:     public void rightStickMovedY (Gamepad gamepad);  //右スティックがY方向に動いた
   359:     public void rightTriggerMoved (Gamepad gamepad);  //右トリガーが動いた
   360:   }
   361: 
   362:   //class XInput.GamepadAdapter
   363:   public static class GamepadAdapter implements GamepadListener {
   364:     @Override public void connected (Gamepad gamepad) {
   365:     }
   366:     @Override public void disconnected (Gamepad gamepad) {
   367:     }
   368:     @Override public void buttonPressed (Gamepad gamepad, int buttonMasks) {
   369:     }
   370:     @Override public void buttonReleased (Gamepad gamepad, int buttonMasks) {
   371:     }
   372:     @Override public void leftStickMovedX (Gamepad gamepad) {
   373:     }
   374:     @Override public void leftStickMovedY (Gamepad gamepad) {
   375:     }
   376:     @Override public void leftTriggerMoved (Gamepad gamepad) {
   377:     }
   378:     @Override public void rightStickMovedX (Gamepad gamepad) {
   379:     }
   380:     @Override public void rightStickMovedY (Gamepad gamepad) {
   381:     }
   382:     @Override public void rightTriggerMoved (Gamepad gamepad) {
   383:     }
   384:   }
   385: 
   386:   //addGamepadListener (listener)
   387:   //  Gamepadリスナーを追加する
   388:   //  listener  追加するGamepadリスナー
   389:   public void addGamepadListener (GamepadListener listener) {
   390:     if (listener != null && !gamepadListeners.contains (listener)) {
   391:       gamepadListeners.add (listener);
   392:     }
   393:   }
   394: 
   395:   //removeGamepadListener (listener)
   396:   //  Gamepadリスナーを削除する
   397:   //  listener  削除するGamepadリスナー
   398:   public void removeGamepadListener (GamepadListener listener) {
   399:     gamepadListeners.remove (listener);
   400:   }
   401: 
   402:   //removeGamepadListeners ()
   403:   //  すべてのGamepadリスナーを削除する
   404:   public void removeGamepadListeners () {
   405:     gamepadListeners.clear ();
   406:   }
   407: 
   408:   //getGamepadListeners ()
   409:   //  すべてのGamepadリスナーを取得する
   410:   public GamepadListener[] getGamepadListeners () {
   411:     return gamepadListeners.toArray (new GamepadListener[gamepadListeners.size ()]);
   412:   }
   413: 
   414: 
   415: 
   416:   //class XInput.Gamepad
   417:   public static class Gamepad implements AutoCloseable {
   418: 
   419:     private long xiwork;  //ワークエリアを指すポインタ
   420: 
   421:     //new Gamepad (index)
   422:     //  コンストラクタ
   423:     //  index  コントローラのインデックス。0~3
   424:     public Gamepad (int index) {
   425:       open (index);
   426:     }
   427: 
   428:     //close ()
   429:     //  閉じる
   430:     @Override public native void close ();
   431: 
   432:     //buttonMasks = getButtonMasks ()
   433:     //  getState()で取得したすべての押されているボタンのマスクを返す
   434:     //  buttonMasks  すべての押されているボタンのマスク
   435:     public native int getButtonMasks ();
   436: 
   437:     //index = getIndex ()
   438:     //  コントローラのインデックスを返す
   439:     //  index  コントローラのインデックス
   440:     public native int getIndex ();
   441: 
   442:     //leftStickX = getLeftStickX ()
   443:     //  getState()で取得した左スティックのX方向の位置を返す
   444:     //  leftStickX  左スティックのX方向の位置
   445:     public native int getLeftStickX ();
   446: 
   447:     //leftStickY = getLeftStickY ()
   448:     //  getState()で取得した左スティックのY方向の位置を返す
   449:     //  leftStickY  左スティックのY方向の位置
   450:     public native int getLeftStickY ();
   451: 
   452:     //leftTrigger = getLeftTrigger ()
   453:     //  getState()で取得した左トリガーの位置を返す
   454:     //  leftTrigger  左トリガーの位置
   455:     public native int getLeftTrigger ();
   456: 
   457:     //pressedButtonMasks = getPressedButtonMasks ()
   458:     //  getState()で取得したすべての押されたボタンのマスクを返す
   459:     //  pressedButtonMasks  すべての押されたボタンのマスク
   460:     public native int getPressedButtonMasks ();
   461: 
   462:     //releasedButtonMasks = getReleasedButtonMasks ()
   463:     //  getState()で取得したすべての離されたボタンのマスクを返す
   464:     //  releasedButtonMasks  すべての離されたボタンのマスク
   465:     public native int getReleasedButtonMasks ();
   466: 
   467:     //rightStickX = getRightStickX ()
   468:     //  getState()で取得した右スティックのX方向の位置を返す
   469:     //  rightStickX  右スティックのX方向の位置
   470:     public native int getRightStickX ();
   471: 
   472:     //rightStickY = getRightStickY ()
   473:     //  getState()で取得した右スティックのY方向の位置を返す
   474:     //  rightStickY  右スティックのY方向の位置
   475:     public native int getRightStickY ();
   476: 
   477:     //rightTrigger = getRightTrigger ()
   478:     //  getState()で取得した右トリガーの位置を返す
   479:     //  rightTrigger  右トリガーの位置
   480:     public native int getRightTrigger ();
   481: 
   482:     //changed = getState ()
   483:     //  コントローラの状態を取得する
   484:     //  changed  false=変化しなかった,true=変化した。使用可能とは限らない
   485:     public native boolean getState ();
   486: 
   487:     //available = isAvailable ()
   488:     //  使用できるかを返す
   489:     //  available  使用できるか
   490:     public native boolean isAvailable ();
   491: 
   492:     //connected = isConnected ()
   493:     //  接続されたかを返す
   494:     //  connected  接続されたか
   495:     public native boolean isConnected ();
   496: 
   497:     //disconnected = isDisconnected ()
   498:     //  切断されたかを返す
   499:     //  disconnected  切断されたか
   500:     public native boolean isDisconnected ();
   501: 
   502:     //leftStickMovedX = isLeftStickMovedX ()
   503:     //  getState()で取得した左スティックがX方向に動いたかを返す
   504:     //  leftStickMovedX  左スティックがX方向に動いたか
   505:     public native boolean isLeftStickMovedX ();
   506: 
   507:     //leftStickMovedY = isLeftStickMovedY ()
   508:     //  getState()で取得した左スティックがY方向に動いたかを返す
   509:     //  leftStickMovedY  左スティックがY方向に動いたか
   510:     public native boolean isLeftStickMovedY ();
   511: 
   512:     //leftTriggerMoved = isLeftTriggerMoved ()
   513:     //  getState()で取得した左トリガーが動いたかを返す
   514:     //  leftTriggerMoved  左トリガーが動いたか
   515:     public native boolean isLeftTriggerMoved ();
   516: 
   517:     //rightStickMovedX = isRightStickMovedX ()
   518:     //  getState()で取得した右スティックがX方向に動いたかを返す
   519:     //  rightStickMovedX  右スティックがX方向に動いたか
   520:     public native boolean isRightStickMovedX ();
   521: 
   522:     //rightStickMovedY = isRightStickMovedY ()
   523:     //  getState()で取得した右スティックがY方向に動いたかを返す
   524:     //  rightStickMovedY  右スティックがY方向に動いたか
   525:     public native boolean isRightStickMovedY ();
   526: 
   527:     //rightTriggerMoved = isRightTriggerMoved ()
   528:     //  getState()で取得した右トリガーが動いたかを返す
   529:     //  rightTriggerMoved  右トリガーが動いたか
   530:     public native boolean isRightTriggerMoved ();
   531: 
   532:     //open (index)
   533:     //  開く
   534:     //  index  コントローラのインデックス。0~3
   535:     private native void open (int index);
   536: 
   537: /*
   538:     //setCenterOfLeftStick (centerOfLeftStickX, centerOfLeftStickY)
   539:     //  左スティックの中央の位置を設定する
   540:     //  centerOfLeftStickX  左スティックのX方向の中央の位置
   541:     //  centerOfLeftStickY  左スティックのY方向の中央の位置
   542:     public native void setCenterOfLeftStick (int centerOfLeftStickX, int centerOfLeftStickY);
   543: 
   544:     //setCenterOfRightStick (centerOfRightStickX, centerOfRightStickY)
   545:     //  右スティックの中央の位置を設定する
   546:     //  centerOfRightStickX  右スティックのX方向の中央の位置
   547:     //  centerOfRightStickY  右スティックのY方向の中央の位置
   548:     public native void setCenterOfRightStick (int centerOfRightStickX, int centerOfRightStickY);
   549: 
   550:     //setPlayOfLeftStick (playOfLeftStickX, playOfLeftStickY)
   551:     //  左スティックの遊びを設定する
   552:     //  playOfLeftStickX  左スティックのX方向の遊び
   553:     //  playOfLeftStickY  左スティックのY方向の遊び
   554:     public native void setPlayOfLeftStick (int playOfLeftStickX, int playOfLeftStickY);
   555: 
   556:     //setPlayOfRightStick (playOfRightStickX, playOfRightStickY)
   557:     //  右スティックの遊びを設定する
   558:     //  playOfRightStickX  右スティックのX方向の遊び
   559:     //  playOfRightStickY  右スティックのY方向の遊び
   560:     public native void setPlayOfRightStick (int playOfRightStickX, int playOfRightStickY);
   561: */
   562: 
   563:     //------------------------------------------------------------------------
   564:     //setThresholdOfLeftStick (thresholdOfLeftStick)
   565:     //  左スティックの閾値を設定する
   566:     //  thresholdOfLeftStick  左スティックの閾値
   567:     public native void setThresholdOfLeftStick (int thresholdOfLeftStick);
   568: 
   569:     //------------------------------------------------------------------------
   570:     //setThresholdOfRightStick (thresholdOfRightStick)
   571:     //  右スティックの閾値を設定する
   572:     //  thresholdOfRightStick  右スティックの閾値
   573:     public native void setThresholdOfRightStick (int thresholdOfRightStick);
   574: 
   575:     //------------------------------------------------------------------------
   576:     //setThresholdOfLeftTrigger (thresholdOfLeftTrigger)
   577:     //  左トリガーの閾値を設定する
   578:     //  thresholdOfLeftTrigger  左トリガーの閾値
   579:     public native void setThresholdOfLeftTrigger (int thresholdOfLeftTrigger);
   580: 
   581:     //------------------------------------------------------------------------
   582:     //setThresholdOfRightTrigger (thresholdOfRightTrigger)
   583:     //  右トリガーの閾値を設定する
   584:     //  thresholdOfRightTrigger  右トリガーの閾値
   585:     public native void setThresholdOfRightTrigger (int thresholdOfRightTrigger);
   586: 
   587:   }  //class Gamepad
   588: 
   589: 
   590: 
   591: }  //class XInput