Want more features on Pastebin? Sign Up, it's FREE!
Guest

Query OUYA Controller SDK through JNI

By: a guest on Jan 29th, 2013  |  syntax: Java  |  size: 7.30 KB  |  views: 120  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. OuyaUnityApplication.java (requires ouyasdk import and setup to access OuyaController API)
  2.  
  3. ----
  4. This would go somewhere in the top:
  5.  
  6.         private static ControllerState [] playerStates;
  7.  
  8. Then, in onCreate:
  9.  
  10.                 playerStates = new ControllerState[OuyaController.MAX_CONTROLLERS];
  11.                 for (int i=0; i<OuyaController.MAX_CONTROLLERS; i++)
  12.                 {
  13.                         playerStates[i] = new ControllerState();
  14.                 }
  15.                 playerStates = new ControllerState[OuyaController.MAX_CONTROLLERS];
  16.                 for (int i=0; i<OuyaController.MAX_CONTROLLERS; i++)
  17.                 {
  18.                         playerStates[i] = new ControllerState();
  19.                 }
  20.  
  21. ----
  22.  
  23.         @Override
  24.         public boolean onKeyDown(int keyCode, KeyEvent event)
  25.         {
  26.  
  27.                 int playerId = OuyaController.getPlayerNumByDeviceId(event.getDeviceId());
  28.  
  29.                 switch (keyCode) {
  30.                         case OuyaController.BUTTON_O:
  31.                                 playerStates[playerId].ButtonO = true;
  32.                                 break;
  33.                         case OuyaController.BUTTON_U:
  34.                                 playerStates[playerId].ButtonU = true;
  35.                                 break;
  36.                         case OuyaController.BUTTON_Y:
  37.                                 playerStates[playerId].ButtonY = true;
  38.                                 break;
  39.                         case OuyaController.BUTTON_A:
  40.                                 playerStates[playerId].ButtonA = true;
  41.                                 break;
  42.                         case OuyaController.BUTTON_L1:
  43.                                 playerStates[playerId].ButtonL1 = true;
  44.                                 break;
  45.                         case OuyaController.BUTTON_L2:
  46.                                 playerStates[playerId].ButtonL2 = true;
  47.                                 break;
  48.                         case OuyaController.BUTTON_L3:
  49.                                 playerStates[playerId].ButtonL3 = true;
  50.                                 break;
  51.                         case OuyaController.BUTTON_R1:
  52.                                 playerStates[playerId].ButtonR1 = true;
  53.                                 break;
  54.                         case OuyaController.BUTTON_R2:
  55.                                 playerStates[playerId].ButtonR2 = true;
  56.                                 break;
  57.                         case OuyaController.BUTTON_R3:
  58.                                 playerStates[playerId].ButtonR3 = true;
  59.                                 break;
  60.                         case OuyaController.BUTTON_DPAD_DOWN:
  61.                                 playerStates[playerId].ButtonDPD = true;
  62.                                 break;
  63.                         case OuyaController.BUTTON_DPAD_UP:
  64.                                 playerStates[playerId].ButtonDPU = true;
  65.                                 break;
  66.                         case OuyaController.BUTTON_DPAD_LEFT:
  67.                                 playerStates[playerId].ButtonDPL = true;
  68.                                 break;
  69.                         case OuyaController.BUTTON_DPAD_RIGHT:
  70.                                 playerStates[playerId].ButtonDPR = true;
  71.                                 break;
  72.                         case OuyaController.BUTTON_SYSTEM:
  73.                                 playerStates[playerId].ButtonSystem = true;
  74.                                 break;
  75.                 }
  76.  
  77.             boolean handled = OuyaController.onKeyDown(keyCode, event);
  78.             return handled || super.onKeyDown(keyCode, event);
  79.         }
  80.  
  81.         @Override
  82.         public boolean onKeyUp(int keyCode, KeyEvent event)
  83.         {
  84.                 int playerId = OuyaController.getPlayerNumByDeviceId(event.getDeviceId());
  85.  
  86.                 switch (keyCode) {
  87.                         case OuyaController.BUTTON_O:
  88.                                 playerStates[playerId].ButtonO = false;
  89.                                 break;
  90.                         case OuyaController.BUTTON_U:
  91.                                 playerStates[playerId].ButtonU = false;
  92.                                 break;
  93.                         case OuyaController.BUTTON_Y:
  94.                                 playerStates[playerId].ButtonY = false;
  95.                                 break;
  96.                         case OuyaController.BUTTON_A:
  97.                                 playerStates[playerId].ButtonA = false;
  98.                                 break;
  99.                         case OuyaController.BUTTON_L1:
  100.                                 playerStates[playerId].ButtonL1 = false;
  101.                                 break;
  102.                         case OuyaController.BUTTON_L2:
  103.                                 playerStates[playerId].ButtonL2 = false;
  104.                                 break;
  105.                         case OuyaController.BUTTON_L3:
  106.                                 playerStates[playerId].ButtonL3 = false;
  107.                                 break;
  108.                         case OuyaController.BUTTON_R1:
  109.                                 playerStates[playerId].ButtonR1 = false;
  110.                                 break;
  111.                         case OuyaController.BUTTON_R2:
  112.                                 playerStates[playerId].ButtonR2 = false;
  113.                                 break;
  114.                         case OuyaController.BUTTON_R3:
  115.                                 playerStates[playerId].ButtonR3 = false;
  116.                                 break;
  117.                         case OuyaController.BUTTON_DPAD_DOWN:
  118.                                 playerStates[playerId].ButtonDPD = false;
  119.                                 break;
  120.                         case OuyaController.BUTTON_DPAD_UP:
  121.                                 playerStates[playerId].ButtonDPU = false;
  122.                                 break;
  123.                         case OuyaController.BUTTON_DPAD_LEFT:
  124.                                 playerStates[playerId].ButtonDPL = false;
  125.                                 break;
  126.                         case OuyaController.BUTTON_DPAD_RIGHT:
  127.                                 playerStates[playerId].ButtonDPR = false;
  128.                                 break;
  129.                         case OuyaController.BUTTON_SYSTEM:
  130.                                 playerStates[playerId].ButtonSystem = false;
  131.                                 break;
  132.                 }
  133.  
  134.             boolean handled = OuyaController.onKeyDown(keyCode, event);
  135.             return handled || super.onKeyDown(keyCode, event);
  136.  
  137.  
  138.         }
  139.  
  140.         @Override
  141.         public boolean onGenericMotionEvent(MotionEvent event) {
  142.             boolean handled = OuyaController.onGenericMotionEvent(event);
  143.             return handled || super.onGenericMotionEvent(event);
  144.         }
  145.  
  146.         public static class ControllerState
  147.         {
  148.  
  149.         public float AxisLSX = 0;
  150.         public float AxisLSY = 0;
  151.         public float AxisRSX = 0;
  152.         public float AxisRSY = 0;
  153.         public float AxisLT = 0;
  154.         public float AxisRT = 0;
  155.  
  156.                 public boolean ButtonO = false;
  157.                 public boolean ButtonU = false;
  158.                 public boolean ButtonY = false;
  159.                 public boolean ButtonA = false;
  160.                 public boolean ButtonDPD = false;
  161.                 public boolean ButtonDPU = false;
  162.                 public boolean ButtonDPL = false;
  163.                 public boolean ButtonDPR = false;
  164.                 public boolean ButtonL1 = false;
  165.                 public boolean ButtonL2 = false;
  166.                 public boolean ButtonL3 = false;
  167.                 public boolean ButtonR1 = false;
  168.                 public boolean ButtonR2 = false;
  169.                 public boolean ButtonR3 = false;
  170.                 public boolean ButtonSystem = false;
  171.  
  172.         }
  173.  
  174.         public static ControllerState GetControllerState(int playerNum)
  175.         {
  176.                 ControllerState data = new ControllerState();
  177.                 OuyaController c = OuyaController.getControllerByPlayer(playerNum);
  178.                 if (c != null)
  179.                 {
  180.  
  181.                         data.AxisLSX = c.getAxisValue(OuyaController.AXIS_LS_X);
  182.                         data.AxisLSY = c.getAxisValue(OuyaController.AXIS_LS_Y);
  183.                         data.AxisRSX = c.getAxisValue(OuyaController.AXIS_RS_X);
  184.                         data.AxisRSY = c.getAxisValue(OuyaController.AXIS_RS_Y);
  185.                         data.AxisLT = c.getAxisValue(OuyaController.AXIS_L2);
  186.                         data.AxisRT = c.getAxisValue(OuyaController.AXIS_R2);
  187.  
  188.                         // return
  189.                         data.ButtonO = c.getButton(OuyaController.BUTTON_O);
  190.                         data.ButtonU = c.getButton(OuyaController.BUTTON_U);
  191.                         data.ButtonY = c.getButton(OuyaController.BUTTON_Y);
  192.                         data.ButtonA = c.getButton(OuyaController.BUTTON_A);
  193.  
  194.  
  195.                         data.ButtonDPD = playerStates[playerNum].ButtonDPD; // c.getButton(OuyaController.BUTTON_DPAD_DOWN);
  196.                         data.ButtonDPU = playerStates[playerNum].ButtonDPU; // c.getButton(OuyaController.BUTTON_DPAD_UP);
  197.                         data.ButtonDPL = playerStates[playerNum].ButtonDPL; // c.getButton(OuyaController.BUTTON_DPAD_LEFT);
  198.                         data.ButtonDPR = playerStates[playerNum].ButtonDPR; // c.getButton(OuyaController.BUTTON_DPAD_RIGHT);
  199.                         data.ButtonL1 = playerStates[playerNum].ButtonL1; // c.getButton(OuyaController.BUTTON_L1);
  200.                         data.ButtonL2 = playerStates[playerNum].ButtonL2; // c.getButton(OuyaController.BUTTON_L2);
  201.                         data.ButtonL3 = playerStates[playerNum].ButtonL3; // c.getButton(OuyaController.BUTTON_L3);
  202.  
  203.                         data.ButtonR1 = playerStates[playerNum].ButtonR1; // c.getButton(OuyaController.BUTTON_R1);
  204.                         data.ButtonR2 = playerStates[playerNum].ButtonR2; // c.getButton(OuyaController.BUTTON_R2);
  205.                         data.ButtonR3 = playerStates[playerNum].ButtonR3; // c.getButton(OuyaController.BUTTON_R3);
  206.  
  207.                         data.ButtonSystem = c.getButton(OuyaController.BUTTON_SYSTEM);
  208.  
  209.                 }
  210.                 return data;
  211.         }
  212.  
  213. ---
  214.  
  215. Then, on the Unity Side:
  216.  
  217.  
  218.                 AndroidJavaClass jc = new AndroidJavaClass("tv.ouya.demo.OuyaUnityApplication"); // This would actually be a member var and initialized in Awake or something
  219.                 using (AndroidJavaObject data = jc.CallStatic<AndroidJavaObject>("GetControllerState", i))
  220.                 {
  221. // Example to fetch Left stick X axis:
  222.                         float axisLSX = data.Get<float>("AxisLSX");
  223. // Example to fetch O Button state:
  224.                         bool oButtonState =  data.Get<bool>("ButtonO");
  225.                 }
clone this paste RAW Paste Data