OuyaUnityApplication.java (requires ouyasdk import and setup to access OuyaController API)
----
This would go somewhere in the top:
private static ControllerState [] playerStates;
Then, in onCreate:
playerStates = new ControllerState[OuyaController.MAX_CONTROLLERS];
for (int i=0; i<OuyaController.MAX_CONTROLLERS; i++)
{
playerStates[i] = new ControllerState();
}
playerStates = new ControllerState[OuyaController.MAX_CONTROLLERS];
for (int i=0; i<OuyaController.MAX_CONTROLLERS; i++)
{
playerStates[i] = new ControllerState();
}
----
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
int playerId = OuyaController.getPlayerNumByDeviceId(event.getDeviceId());
switch (keyCode) {
case OuyaController.BUTTON_O:
playerStates[playerId].ButtonO = true;
break;
case OuyaController.BUTTON_U:
playerStates[playerId].ButtonU = true;
break;
case OuyaController.BUTTON_Y:
playerStates[playerId].ButtonY = true;
break;
case OuyaController.BUTTON_A:
playerStates[playerId].ButtonA = true;
break;
case OuyaController.BUTTON_L1:
playerStates[playerId].ButtonL1 = true;
break;
case OuyaController.BUTTON_L2:
playerStates[playerId].ButtonL2 = true;
break;
case OuyaController.BUTTON_L3:
playerStates[playerId].ButtonL3 = true;
break;
case OuyaController.BUTTON_R1:
playerStates[playerId].ButtonR1 = true;
break;
case OuyaController.BUTTON_R2:
playerStates[playerId].ButtonR2 = true;
break;
case OuyaController.BUTTON_R3:
playerStates[playerId].ButtonR3 = true;
break;
case OuyaController.BUTTON_DPAD_DOWN:
playerStates[playerId].ButtonDPD = true;
break;
case OuyaController.BUTTON_DPAD_UP:
playerStates[playerId].ButtonDPU = true;
break;
case OuyaController.BUTTON_DPAD_LEFT:
playerStates[playerId].ButtonDPL = true;
break;
case OuyaController.BUTTON_DPAD_RIGHT:
playerStates[playerId].ButtonDPR = true;
break;
case OuyaController.BUTTON_SYSTEM:
playerStates[playerId].ButtonSystem = true;
break;
}
boolean handled = OuyaController.onKeyDown(keyCode, event);
return handled || super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
int playerId = OuyaController.getPlayerNumByDeviceId(event.getDeviceId());
switch (keyCode) {
case OuyaController.BUTTON_O:
playerStates[playerId].ButtonO = false;
break;
case OuyaController.BUTTON_U:
playerStates[playerId].ButtonU = false;
break;
case OuyaController.BUTTON_Y:
playerStates[playerId].ButtonY = false;
break;
case OuyaController.BUTTON_A:
playerStates[playerId].ButtonA = false;
break;
case OuyaController.BUTTON_L1:
playerStates[playerId].ButtonL1 = false;
break;
case OuyaController.BUTTON_L2:
playerStates[playerId].ButtonL2 = false;
break;
case OuyaController.BUTTON_L3:
playerStates[playerId].ButtonL3 = false;
break;
case OuyaController.BUTTON_R1:
playerStates[playerId].ButtonR1 = false;
break;
case OuyaController.BUTTON_R2:
playerStates[playerId].ButtonR2 = false;
break;
case OuyaController.BUTTON_R3:
playerStates[playerId].ButtonR3 = false;
break;
case OuyaController.BUTTON_DPAD_DOWN:
playerStates[playerId].ButtonDPD = false;
break;
case OuyaController.BUTTON_DPAD_UP:
playerStates[playerId].ButtonDPU = false;
break;
case OuyaController.BUTTON_DPAD_LEFT:
playerStates[playerId].ButtonDPL = false;
break;
case OuyaController.BUTTON_DPAD_RIGHT:
playerStates[playerId].ButtonDPR = false;
break;
case OuyaController.BUTTON_SYSTEM:
playerStates[playerId].ButtonSystem = false;
break;
}
boolean handled = OuyaController.onKeyDown(keyCode, event);
return handled || super.onKeyDown(keyCode, event);
}
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
boolean handled = OuyaController.onGenericMotionEvent(event);
return handled || super.onGenericMotionEvent(event);
}
public static class ControllerState
{
public float AxisLSX = 0;
public float AxisLSY = 0;
public float AxisRSX = 0;
public float AxisRSY = 0;
public float AxisLT = 0;
public float AxisRT = 0;
public boolean ButtonO = false;
public boolean ButtonU = false;
public boolean ButtonY = false;
public boolean ButtonA = false;
public boolean ButtonDPD = false;
public boolean ButtonDPU = false;
public boolean ButtonDPL = false;
public boolean ButtonDPR = false;
public boolean ButtonL1 = false;
public boolean ButtonL2 = false;
public boolean ButtonL3 = false;
public boolean ButtonR1 = false;
public boolean ButtonR2 = false;
public boolean ButtonR3 = false;
public boolean ButtonSystem = false;
}
public static ControllerState GetControllerState(int playerNum)
{
ControllerState data = new ControllerState();
OuyaController c = OuyaController.getControllerByPlayer(playerNum);
if (c != null)
{
data.AxisLSX = c.getAxisValue(OuyaController.AXIS_LS_X);
data.AxisLSY = c.getAxisValue(OuyaController.AXIS_LS_Y);
data.AxisRSX = c.getAxisValue(OuyaController.AXIS_RS_X);
data.AxisRSY = c.getAxisValue(OuyaController.AXIS_RS_Y);
data.AxisLT = c.getAxisValue(OuyaController.AXIS_L2);
data.AxisRT = c.getAxisValue(OuyaController.AXIS_R2);
// return
data.ButtonO = c.getButton(OuyaController.BUTTON_O);
data.ButtonU = c.getButton(OuyaController.BUTTON_U);
data.ButtonY = c.getButton(OuyaController.BUTTON_Y);
data.ButtonA = c.getButton(OuyaController.BUTTON_A);
data.ButtonDPD = playerStates[playerNum].ButtonDPD; // c.getButton(OuyaController.BUTTON_DPAD_DOWN);
data.ButtonDPU = playerStates[playerNum].ButtonDPU; // c.getButton(OuyaController.BUTTON_DPAD_UP);
data.ButtonDPL = playerStates[playerNum].ButtonDPL; // c.getButton(OuyaController.BUTTON_DPAD_LEFT);
data.ButtonDPR = playerStates[playerNum].ButtonDPR; // c.getButton(OuyaController.BUTTON_DPAD_RIGHT);
data.ButtonL1 = playerStates[playerNum].ButtonL1; // c.getButton(OuyaController.BUTTON_L1);
data.ButtonL2 = playerStates[playerNum].ButtonL2; // c.getButton(OuyaController.BUTTON_L2);
data.ButtonL3 = playerStates[playerNum].ButtonL3; // c.getButton(OuyaController.BUTTON_L3);
data.ButtonR1 = playerStates[playerNum].ButtonR1; // c.getButton(OuyaController.BUTTON_R1);
data.ButtonR2 = playerStates[playerNum].ButtonR2; // c.getButton(OuyaController.BUTTON_R2);
data.ButtonR3 = playerStates[playerNum].ButtonR3; // c.getButton(OuyaController.BUTTON_R3);
data.ButtonSystem = c.getButton(OuyaController.BUTTON_SYSTEM);
}
return data;
}
---
Then, on the Unity Side:
AndroidJavaClass jc = new AndroidJavaClass("tv.ouya.demo.OuyaUnityApplication"); // This would actually be a member var and initialized in Awake or something
using (AndroidJavaObject data = jc.CallStatic<AndroidJavaObject>("GetControllerState", i))
{
// Example to fetch Left stick X axis:
float axisLSX = data.Get<float>("AxisLSX");
// Example to fetch O Button state:
bool oButtonState = data.Get<bool>("ButtonO");
}