public static bool GetButtonWithDelegate(OuyaSDK.KeyEnum keyCode, OuyaSDK.OuyaPlayer player, GetButtonDelegate action)
    {
        if (null == OuyaSDK.Joysticks)
        {
            return false;
        }
        int playerIndex = (int)player - 1;
        if (playerIndex >= OuyaSDK.Joysticks.Length)
        {
            return false;
        }

        string joystickName = OuyaSDK.Joysticks[playerIndex];
        if (null == joystickName)
        {
            return false;
        }

        switch (joystickName.ToUpper())
        {
            case "HARMONIX ROCK BAND DRUMKIT":
                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_GREEN:
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_A:
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_RED:
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_B:
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_YELLOW:
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_Y:
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_BLUE:
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_X:
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_ORANGE:
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_BACK:
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(10, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_START:
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(11, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_SYSTEM:
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(12, player, action);
                    default:
                        return false;
                }
            case "HARMONIX ROCK BAND GUITAR":
                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_GREEN:
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_RED:
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_YELLOW:
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_BLUE:
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_ORANGE:
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_LOWER:
                        return GetButton(13, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_BACK:
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(10, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_START:
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(11, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_SYSTEM:
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(12, player, action);
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_PICKUP:
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return false;
                    case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_WHAMMI:
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return false;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetAxis(keyCode, player) < 0f;
                    default:
                        return false;
                }

            case "BROADCOM BLUETOOTH HID":
            case "MOGA PRO HID":
                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(7, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(13, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(14, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetAxis(keyCode, player) > 0f;
                    default:
                        return false;
                }

            case "OUYA GAME CONTROLLER":

#if UNITY_4_3

#if !UNITY_EDITOR && UNITY_ANDROID
                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(5, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(2, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(8, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(9, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetButton(7, player, action);
                    default:
                        return false;
#else
                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(5, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(2, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(7, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetButton(9, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetButton(10, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetButton(11, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetButton(8, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetButton(12, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetButton(13, player, action);
                    default:
                        return false;
#endif
                }
#else
                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(5, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(2, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(7, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetButton(8, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetButton(9, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetButton(10, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetButton(11, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetButton(12, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetButton(13, player, action);
                    default:
                        return false;
                }
#endif

            case "XBOX 360 WIRELESS RECEIVER":

#if !UNITY_EDITOR && UNITY_ANDROID

                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(7, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(13, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(14, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetButton(2, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetAxis(keyCode, player) > 0f;
                    default:
                        return false;
                }
#else
                if (Application.platform == RuntimePlatform.OSXEditor)
                {
                    switch (keyCode)
                    {
                        case OuyaSDK.KeyEnum.BUTTON_LB:
                            return GetButton(13, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_RB:
                            return GetButton(14, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_O:
                            return GetButton(16, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_U:
                            return GetButton(18, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_Y:
                            return GetButton(19, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_A:
                            return GetButton(17, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_L3:
                            return GetButton(11, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_R3:
                            return GetButton(12, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                            return GetButton(5, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                            return GetButton(6, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                            return GetButton(7, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                            return GetButton(8, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_LT:
                            return GetAxis(keyCode, player) > -1f;
                        case OuyaSDK.KeyEnum.BUTTON_RT:
                            return GetAxis(keyCode, player) > -1f;
                        default:
                            return false;
                    }
                }
                else
                {
                    switch (keyCode)
                    {
                        case OuyaSDK.KeyEnum.BUTTON_LB:
                            return GetButton(4, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_RB:
                            return GetButton(5, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_O:
                            return GetButton(0, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_U:
                            return GetButton(2, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_Y:
                            return GetButton(3, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_A:
                            return GetButton(1, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_L3:
                            return GetButton(8, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_R3:
                            return GetButton(9, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                            return GetAxis(keyCode, player) > 0f;
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                            return GetAxis(keyCode, player) < 0f;
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                            return GetAxis(keyCode, player) < 0f;
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                            return GetAxis(keyCode, player) > 0f;
                        case OuyaSDK.KeyEnum.BUTTON_LT:
                            return GetAxis(keyCode, player) > 0f;
                        case OuyaSDK.KeyEnum.BUTTON_RT:
                            return GetAxis(keyCode, player) > 0f;
                        default:
                            return false;
                    }
                }
#endif

            case "CONTROLLER (AFTERGLOW GAMEPAD FOR XBOX 360)":
            case "CONTROLLER (ROCK CANDY GAMEPAD FOR XBOX 360)":
            case "CONTROLLER (XBOX 360 WIRELESS RECEIVER FOR WINDOWS)":
            case "MICROSOFT X-BOX 360 PAD":
            case "CONTROLLER (XBOX 360 FOR WINDOWS)":
            case "CONTROLLER (XBOX360 GAMEPAD)":
            case "XBOX 360 FOR WINDOWS (CONTROLLER)":
            case "MICROSOFT WIRELESS 360 CONTROLLER":

#if !UNITY_EDITOR && UNITY_ANDROID

                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(7, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(13, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(14, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetAxis(keyCode, player) > 0f;
                    default:
                        return false;
                }
#else
                if (Application.platform == RuntimePlatform.OSXEditor)
                {
                    switch (keyCode)
                    {
                        case OuyaSDK.KeyEnum.BUTTON_LB:
                            return GetButton(13, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_RB:
                            return GetButton(14, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_O:
                            return GetButton(16, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_U:
                            return GetButton(18, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_Y:
                            return GetButton(19, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_A:
                            return GetButton(17, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_L3:
                            return GetButton(11, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_R3:
                            return GetButton(12, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                            return GetButton(5, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                            return GetButton(6, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                            return GetButton(7, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                            return GetButton(8, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_LT:
                            return GetAxis(keyCode, player) > -1f;
                        case OuyaSDK.KeyEnum.BUTTON_RT:
                            return GetAxis(keyCode, player) > -1f;
                        default:
                            return false;
                    }
                }
                else
                {
                    switch (keyCode)
                    {
                        case OuyaSDK.KeyEnum.BUTTON_LB:
                            return GetButton(4, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_RB:
                            return GetButton(5, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_O:
                            return GetButton(0, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_U:
                            return GetButton(2, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_Y:
                            return GetButton(3, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_A:
                            return GetButton(1, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_L3:
                            return GetButton(8, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_R3:
                            return GetButton(9, player, action);
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                            return GetAxis(keyCode, player) > 0f;
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                            return GetAxis(keyCode, player) < 0f;
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                            return GetAxis(keyCode, player) < 0f;
                        case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                            return GetAxis(keyCode, player) > 0f;
                        case OuyaSDK.KeyEnum.BUTTON_LT:
                            return GetAxis(keyCode, player) > 0f;
                        case OuyaSDK.KeyEnum.BUTTON_RT:
                            return GetAxis(keyCode, player) > 0f;
                        default:
                            return false;
                    }
                }
#endif

            case "": //the driver is reporting the controller as blank

#if !UNITY_EDITOR && UNITY_ANDROID

                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(7, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(13, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(14, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetAxis(keyCode, player) > 0f;
                    default:
                        return false;
                }
#else
                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(13, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(14, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(16, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(18, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(19, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(17, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(11, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(12, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetButton(5, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetButton(7, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetButton(8, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_SELECT:
                        return GetButton(10, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_START:
                        return GetButton(9, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_SYSTEM:
                        return GetButton(15, player, action);
                    default:
                        return false;
                }
#endif
        }

        return false;
    }

    #endregion
}
예제 #2
0
 public static void SetGetButtonDelegate(GetButtonDelegate d)
 {
     getButtonDelegate = d;
 }
 public static bool GetButton(int buttonNum, OuyaSDK.OuyaPlayer player, GetButtonDelegate action)
 {
     string keyCode = GetKeyCode(buttonNum, player);
     if (string.IsNullOrEmpty(keyCode))
     {
         return false;
     }
     OuyaKeyCode key = (OuyaKeyCode)Enum.Parse(typeof(OuyaKeyCode), keyCode);
     return action((KeyCode)(int)key);
 }
예제 #4
0
	public static bool GetButtonWithDelegate( OuyaSDK.KeyEnum keyCode, OuyaSDK.OuyaPlayer player, GetButtonDelegate action )
	{
		if (null == OuyaSDK.Joysticks)
		{
			return false;
		}
		int playerIndex = (int) player - 1;
		if (playerIndex >= OuyaSDK.Joysticks.Length)
		{
			return false;
		}

		string joystickName = OuyaSDK.Joysticks[playerIndex];
		if (null == joystickName)
		{
			return false;
		}

		if (joystickName.Equals( "Broadcom Bluetooth HID", StringComparison.CurrentCultureIgnoreCase ))
		{
			if (SystemInfo.deviceModel.Contains( "M.O.J.O." ))
			{
				// The M.O.J.O. reports the wrong name for the OUYA Game Controller
				joystickName = "OUYA Game Controller";
			}
		}

		switch (joystickName.ToUpper())
		{
		case "HARMONIX ROCK BAND DRUMKIT":
			switch (keyCode)
			{
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_GREEN:
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_A:
			case OuyaSDK.KeyEnum.BUTTON_O:
				return GetButton( 0, player, action );
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_RED:
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_B:
			case OuyaSDK.KeyEnum.BUTTON_A:
				return GetButton( 1, player, action );
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_YELLOW:
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_Y:
			case OuyaSDK.KeyEnum.BUTTON_Y:
				return GetButton( 4, player, action );
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_BLUE:
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_X:
			case OuyaSDK.KeyEnum.BUTTON_U:
				return GetButton( 3, player, action );
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_DRUMKIT_ORANGE:
			case OuyaSDK.KeyEnum.BUTTON_L3:
				return GetButton( 6, player, action );
			case OuyaSDK.KeyEnum.BUTTON_BACK:
			case OuyaSDK.KeyEnum.BUTTON_R3:
				return GetButton( 10, player, action );
			case OuyaSDK.KeyEnum.BUTTON_START:
			case OuyaSDK.KeyEnum.BUTTON_LB:
				return GetButton( 11, player, action );
			case OuyaSDK.KeyEnum.BUTTON_SYSTEM:
			case OuyaSDK.KeyEnum.BUTTON_RB:
				return GetButton( 12, player, action );
			default:
				return false;
			}
		case "HARMONIX ROCK BAND GUITAR":
			switch (keyCode)
			{
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_GREEN:
			case OuyaSDK.KeyEnum.BUTTON_O:
				return GetButton( 0, player, action );
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_RED:
			case OuyaSDK.KeyEnum.BUTTON_A:
				return GetButton( 1, player, action );
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_YELLOW:
			case OuyaSDK.KeyEnum.BUTTON_Y:
				return GetButton( 4, player, action );
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_BLUE:
			case OuyaSDK.KeyEnum.BUTTON_U:
				return GetButton( 3, player, action );
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_ORANGE:
			case OuyaSDK.KeyEnum.BUTTON_L3:
				return GetButton( 6, player, action );
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_LOWER:
				return GetButton( 13, player, action );
			case OuyaSDK.KeyEnum.BUTTON_BACK:
			case OuyaSDK.KeyEnum.BUTTON_R3:
				return GetButton( 10, player, action );
			case OuyaSDK.KeyEnum.BUTTON_START:
			case OuyaSDK.KeyEnum.BUTTON_LB:
				return GetButton( 11, player, action );
			case OuyaSDK.KeyEnum.BUTTON_SYSTEM:
			case OuyaSDK.KeyEnum.BUTTON_RB:
				return GetButton( 12, player, action );
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_PICKUP:
			case OuyaSDK.KeyEnum.BUTTON_LT:
				return false;
			case OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_WHAMMI:
			case OuyaSDK.KeyEnum.BUTTON_RT:
				return false;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
				return GetAxis( keyCode, player ) > 0f;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
				return GetAxis( keyCode, player ) < 0f;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
				return GetAxis( keyCode, player ) > 0f;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
				return GetAxis( keyCode, player ) < 0f;
			default:
				return false;
			}

		case "BROADCOM BLUETOOTH HID":
		case "MOGA PRO HID":
			switch (keyCode)
			{
			case OuyaSDK.KeyEnum.BUTTON_LB:
				return GetButton( 6, player, action );
			case OuyaSDK.KeyEnum.BUTTON_RB:
				return GetButton( 7, player, action );
			case OuyaSDK.KeyEnum.BUTTON_O:
				return GetButton( 0, player, action );
			case OuyaSDK.KeyEnum.BUTTON_U:
				return GetButton( 3, player, action );
			case OuyaSDK.KeyEnum.BUTTON_Y:
				return GetButton( 4, player, action );
			case OuyaSDK.KeyEnum.BUTTON_A:
				return GetButton( 1, player, action );
			case OuyaSDK.KeyEnum.BUTTON_L3:
				return GetButton( 13, player, action );
			case OuyaSDK.KeyEnum.BUTTON_R3:
				return GetButton( 14, player, action );
			case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
				return GetAxis( keyCode, player ) > 0f;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
				return GetAxis( keyCode, player ) < 0f;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
				return GetAxis( keyCode, player ) < 0f;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
				return GetAxis( keyCode, player ) > 0f;
			case OuyaSDK.KeyEnum.BUTTON_LT:
				return GetAxis( keyCode, player ) > 0f;
			case OuyaSDK.KeyEnum.BUTTON_RT:
				return GetAxis( keyCode, player ) > 0f;
			default:
				return false;
			}

		case "MAD CATZ C.T.R.L.R (SMART)":
			switch (keyCode)
			{
			case OuyaSDK.KeyEnum.BUTTON_LB:
				return GetButton( 4, player, action );
			case OuyaSDK.KeyEnum.BUTTON_RB:
				return GetButton( 5, player, action );
			case OuyaSDK.KeyEnum.BUTTON_O:
				return GetButton( 0, player, action );
			case OuyaSDK.KeyEnum.BUTTON_U:
				return GetButton( 2, player, action );
			case OuyaSDK.KeyEnum.BUTTON_Y:
				return GetButton( 3, player, action );
			case OuyaSDK.KeyEnum.BUTTON_A:
				return GetButton( 1, player, action );
			case OuyaSDK.KeyEnum.BUTTON_L3:
				return GetButton( 8, player, action );
			case OuyaSDK.KeyEnum.BUTTON_R3:
				return GetButton( 9, player, action );
			case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
				return GetAxis( keyCode, player ) < 0f;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
				return GetAxis( keyCode, player ) < 0f;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
				return GetAxis( keyCode, player ) > 0f;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
				return GetAxis( keyCode, player ) > 0f;
			case OuyaSDK.KeyEnum.BUTTON_LT:
				return GetAxis( keyCode, player ) > 0f;
			case OuyaSDK.KeyEnum.BUTTON_RT:
				return GetAxis( keyCode, player ) > 0f;
			default:
				return false;
			}

		default:
		case "OUYA GAME CONTROLLER":

#if UNITY_4_3

#if !UNITY_EDITOR && UNITY_ANDROID
                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(5, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(2, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(8, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(9, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetButton(7, player, action);
                    default:
                        return false;
#else
			switch (keyCode)
			{
			case OuyaSDK.KeyEnum.BUTTON_LB:
				return GetButton( 4, player, action );
			case OuyaSDK.KeyEnum.BUTTON_RB:
				return GetButton( 5, player, action );
			case OuyaSDK.KeyEnum.BUTTON_O:
				return GetButton( 0, player, action );
			case OuyaSDK.KeyEnum.BUTTON_U:
				return GetButton( 1, player, action );
			case OuyaSDK.KeyEnum.BUTTON_Y:
				return GetButton( 2, player, action );
			case OuyaSDK.KeyEnum.BUTTON_A:
				return GetButton( 3, player, action );
			case OuyaSDK.KeyEnum.BUTTON_L3:
				return GetButton( 6, player, action );
			case OuyaSDK.KeyEnum.BUTTON_R3:
				return GetButton( 7, player, action );
			case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
				return GetButton( 9, player, action );
			case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
				return GetButton( 10, player, action );
			case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
				return GetButton( 11, player, action );
			case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
				return GetButton( 8, player, action );
			case OuyaSDK.KeyEnum.BUTTON_LT:
				return GetButton( 12, player, action );
			case OuyaSDK.KeyEnum.BUTTON_RT:
				return GetButton( 13, player, action );
			default:
				return false;
#endif
			}
#else
                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(5, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(2, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(7, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetButton(8, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetButton(9, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetButton(10, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetButton(11, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetButton(12, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetButton(13, player, action);
                    default:
                        return false;
                }
#endif

		case "XBOX 360 WIRELESS RECEIVER":

#if !UNITY_EDITOR && UNITY_ANDROID

                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(7, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(13, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(14, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetButton(2, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetAxis(keyCode, player) > 0f;
                    default:
                        return false;
                }
#else
			if (Application.platform == RuntimePlatform.OSXEditor)
			{
				switch (keyCode)
				{
				case OuyaSDK.KeyEnum.BUTTON_LB:
					return GetButton( 13, player, action );
				case OuyaSDK.KeyEnum.BUTTON_RB:
					return GetButton( 14, player, action );
				case OuyaSDK.KeyEnum.BUTTON_O:
					return GetButton( 16, player, action );
				case OuyaSDK.KeyEnum.BUTTON_U:
					return GetButton( 18, player, action );
				case OuyaSDK.KeyEnum.BUTTON_Y:
					return GetButton( 19, player, action );
				case OuyaSDK.KeyEnum.BUTTON_A:
					return GetButton( 17, player, action );
				case OuyaSDK.KeyEnum.BUTTON_L3:
					return GetButton( 11, player, action );
				case OuyaSDK.KeyEnum.BUTTON_R3:
					return GetButton( 12, player, action );
				case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
					return GetButton( 5, player, action );
				case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
					return GetButton( 6, player, action );
				case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
					return GetButton( 7, player, action );
				case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
					return GetButton( 8, player, action );
				case OuyaSDK.KeyEnum.BUTTON_LT:
					return GetAxis( keyCode, player ) > -1f;
				case OuyaSDK.KeyEnum.BUTTON_RT:
					return GetAxis( keyCode, player ) > -1f;
				default:
					return false;
				}
			}
			else
			{
				switch (keyCode)
				{
				case OuyaSDK.KeyEnum.BUTTON_LB:
					return GetButton( 4, player, action );
				case OuyaSDK.KeyEnum.BUTTON_RB:
					return GetButton( 5, player, action );
				case OuyaSDK.KeyEnum.BUTTON_O:
					return GetButton( 0, player, action );
				case OuyaSDK.KeyEnum.BUTTON_U:
					return GetButton( 2, player, action );
				case OuyaSDK.KeyEnum.BUTTON_Y:
					return GetButton( 3, player, action );
				case OuyaSDK.KeyEnum.BUTTON_A:
					return GetButton( 1, player, action );
				case OuyaSDK.KeyEnum.BUTTON_L3:
					return GetButton( 8, player, action );
				case OuyaSDK.KeyEnum.BUTTON_R3:
					return GetButton( 9, player, action );
				case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
					return GetAxis( keyCode, player ) > 0f;
				case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
					return GetAxis( keyCode, player ) < 0f;
				case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
					return GetAxis( keyCode, player ) < 0f;
				case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
					return GetAxis( keyCode, player ) > 0f;
				case OuyaSDK.KeyEnum.BUTTON_LT:
					return GetAxis( keyCode, player ) > 0f;
				case OuyaSDK.KeyEnum.BUTTON_RT:
					return GetAxis( keyCode, player ) > 0f;
				default:
					return false;
				}
			}
#endif

		case "CONTROLLER (AFTERGLOW GAMEPAD FOR XBOX 360)":
		case "CONTROLLER (ROCK CANDY GAMEPAD FOR XBOX 360)":
		case "CONTROLLER (XBOX 360 WIRELESS RECEIVER FOR WINDOWS)":
		case "MICROSOFT X-BOX 360 PAD":
		case "CONTROLLER (XBOX 360 FOR WINDOWS)":
		case "CONTROLLER (XBOX360 GAMEPAD)":
		case "XBOX 360 FOR WINDOWS (CONTROLLER)":
		case "MICROSOFT WIRELESS 360 CONTROLLER":

#if !UNITY_EDITOR && UNITY_ANDROID

                switch (keyCode)
                {
                    case OuyaSDK.KeyEnum.BUTTON_LB:
                        return GetButton(6, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_RB:
                        return GetButton(7, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_O:
                        return GetButton(0, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_U:
                        return GetButton(3, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_Y:
                        return GetButton(4, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_A:
                        return GetButton(1, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_L3:
                        return GetButton(13, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_R3:
                        return GetButton(14, player, action);
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
                        return GetAxis(keyCode, player) < 0f;
                    case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetAxis(keyCode, player) > 0f;
                    default:
                        return false;
                }
#else
			if (Application.platform == RuntimePlatform.OSXEditor)
			{
				switch (keyCode)
				{
				case OuyaSDK.KeyEnum.BUTTON_LB:
					return GetButton( 13, player, action );
				case OuyaSDK.KeyEnum.BUTTON_RB:
					return GetButton( 14, player, action );
				case OuyaSDK.KeyEnum.BUTTON_O:
					return GetButton( 16, player, action );
				case OuyaSDK.KeyEnum.BUTTON_U:
					return GetButton( 18, player, action );
				case OuyaSDK.KeyEnum.BUTTON_Y:
					return GetButton( 19, player, action );
				case OuyaSDK.KeyEnum.BUTTON_A:
					return GetButton( 17, player, action );
				case OuyaSDK.KeyEnum.BUTTON_L3:
					return GetButton( 11, player, action );
				case OuyaSDK.KeyEnum.BUTTON_R3:
					return GetButton( 12, player, action );
				case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
					return GetButton( 5, player, action );
				case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
					return GetButton( 6, player, action );
				case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
					return GetButton( 7, player, action );
				case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
					return GetButton( 8, player, action );
				case OuyaSDK.KeyEnum.BUTTON_LT:
					return GetAxis( keyCode, player ) > -1f;
				case OuyaSDK.KeyEnum.BUTTON_RT:
					return GetAxis( keyCode, player ) > -1f;
				default:
					return false;
				}
			}
			else
			{
				switch (keyCode)
				{
				case OuyaSDK.KeyEnum.BUTTON_LB:
					return GetButton( 4, player, action );
				case OuyaSDK.KeyEnum.BUTTON_RB:
					return GetButton( 5, player, action );
				case OuyaSDK.KeyEnum.BUTTON_O:
					return GetButton( 0, player, action );
				case OuyaSDK.KeyEnum.BUTTON_U:
					return GetButton( 2, player, action );
				case OuyaSDK.KeyEnum.BUTTON_Y:
					return GetButton( 3, player, action );
				case OuyaSDK.KeyEnum.BUTTON_A:
					return GetButton( 1, player, action );
				case OuyaSDK.KeyEnum.BUTTON_L3:
					return GetButton( 8, player, action );
				case OuyaSDK.KeyEnum.BUTTON_R3:
					return GetButton( 9, player, action );
				case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
					return GetAxis( keyCode, player ) > 0f;
				case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
					return GetAxis( keyCode, player ) < 0f;
				case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
					return GetAxis( keyCode, player ) < 0f;
				case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
					return GetAxis( keyCode, player ) > 0f;
				case OuyaSDK.KeyEnum.BUTTON_LT:
					return GetAxis( keyCode, player ) > 0f;
				case OuyaSDK.KeyEnum.BUTTON_RT:
					return GetAxis( keyCode, player ) > 0f;
				default:
					return false;
				}
			}
#endif
		case "LOGITECH DUAL ACTION":
		case "LOGITECH LOGITECH DUAL ACTION":

#if !UNITY_EDITOR && UNITY_ANDROID
				
				switch (keyCode)
				{
				case OuyaSDK.KeyEnum.BUTTON_LB:
					return GetButton(4, player, action);
				case OuyaSDK.KeyEnum.BUTTON_RB:
					return GetButton(5, player, action);
				case OuyaSDK.KeyEnum.BUTTON_O:
					return GetButton(1, player, action);
				case OuyaSDK.KeyEnum.BUTTON_U:
					return GetButton(0, player, action);
				case OuyaSDK.KeyEnum.BUTTON_Y:
					return GetButton(3, player, action);
				case OuyaSDK.KeyEnum.BUTTON_A:
					return GetButton(2, player, action);
				case OuyaSDK.KeyEnum.BUTTON_L3:
					return GetButton(10, player, action);
				case OuyaSDK.KeyEnum.BUTTON_R3:
					return GetButton(11, player, action);
				case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
					return GetAxis(keyCode, player) > 0f;
				case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
					return GetAxis(keyCode, player) < 0f;
				case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
					return GetAxis(keyCode, player) < 0f;
				case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
					return GetAxis(keyCode, player) > 0f;
				case OuyaSDK.KeyEnum.BUTTON_LT:
					return GetAxis(keyCode, player) > 0f;
				case OuyaSDK.KeyEnum.BUTTON_RT:
					return GetAxis(keyCode, player) > 0f;
				default:
					return false;
				}
#else
			switch (keyCode)
			{
			case OuyaSDK.KeyEnum.BUTTON_LB:
				return GetButton( 4, player, action );
			case OuyaSDK.KeyEnum.BUTTON_RB:
				return GetButton( 5, player, action );
			case OuyaSDK.KeyEnum.BUTTON_O:
				return GetButton( 1, player, action );
			case OuyaSDK.KeyEnum.BUTTON_U:
				return GetButton( 0, player, action );
			case OuyaSDK.KeyEnum.BUTTON_Y:
				return GetButton( 3, player, action );
			case OuyaSDK.KeyEnum.BUTTON_A:
				return GetButton( 2, player, action );
			case OuyaSDK.KeyEnum.BUTTON_L3:
				return GetButton( 10, player, action );
			case OuyaSDK.KeyEnum.BUTTON_R3:
				return GetButton( 11, player, action );
			case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
				return GetAxis( keyCode, player ) > 0f;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
				return GetAxis( keyCode, player ) < 0f;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
				return GetAxis( keyCode, player ) < 0f;
			case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
				return GetAxis( keyCode, player ) > 0f;
			case OuyaSDK.KeyEnum.BUTTON_LT:
				return GetButton( 6, player, action );
			case OuyaSDK.KeyEnum.BUTTON_RT:
				return GetButton( 7, player, action );
			case OuyaSDK.KeyEnum.BUTTON_SELECT:
				return GetButton( 8, player, action );
			case OuyaSDK.KeyEnum.BUTTON_START:
				return GetButton( 9, player, action );
			case OuyaSDK.KeyEnum.BUTTON_SYSTEM:
				return GetButton( 15, player, action );
			default:
				return false;
			}
#endif
		case "": //the driver is reporting the controller as blank

#if !UNITY_EDITOR && UNITY_ANDROID
				
				switch (keyCode)
				{
				case OuyaSDK.KeyEnum.BUTTON_LB:
					return GetButton(6, player, action);
				case OuyaSDK.KeyEnum.BUTTON_RB:
					return GetButton(7, player, action);
				case OuyaSDK.KeyEnum.BUTTON_O:
					return GetButton(0, player, action);
				case OuyaSDK.KeyEnum.BUTTON_U:
					return GetButton(3, player, action);
				case OuyaSDK.KeyEnum.BUTTON_Y:
					return GetButton(4, player, action);
				case OuyaSDK.KeyEnum.BUTTON_A:
					return GetButton(1, player, action);
				case OuyaSDK.KeyEnum.BUTTON_L3:
					return GetButton(13, player, action);
				case OuyaSDK.KeyEnum.BUTTON_R3:
					return GetButton(14, player, action);
				case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
					return GetAxis(keyCode, player) > 0f;
				case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
					return GetAxis(keyCode, player) < 0f;
				case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
					return GetAxis(keyCode, player) < 0f;
				case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
					return GetAxis(keyCode, player) > 0f;
				case OuyaSDK.KeyEnum.BUTTON_LT:
                        return GetAxis(keyCode, player) > 0f;
                    case OuyaSDK.KeyEnum.BUTTON_RT:
                        return GetAxis(keyCode, player) > 0f;
                    default:
                        return false;
                }
#else
			switch (keyCode)
			{
			case OuyaSDK.KeyEnum.BUTTON_LB:
				return GetButton( 13, player, action );
			case OuyaSDK.KeyEnum.BUTTON_RB:
				return GetButton( 14, player, action );
			case OuyaSDK.KeyEnum.BUTTON_O:
				return GetButton( 16, player, action );
			case OuyaSDK.KeyEnum.BUTTON_U:
				return GetButton( 18, player, action );
			case OuyaSDK.KeyEnum.BUTTON_Y:
				return GetButton( 19, player, action );
			case OuyaSDK.KeyEnum.BUTTON_A:
				return GetButton( 17, player, action );
			case OuyaSDK.KeyEnum.BUTTON_L3:
				return GetButton( 11, player, action );
			case OuyaSDK.KeyEnum.BUTTON_R3:
				return GetButton( 12, player, action );
			case OuyaSDK.KeyEnum.BUTTON_DPAD_UP:
				return GetButton( 5, player, action );
			case OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN:
				return GetButton( 6, player, action );
			case OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT:
				return GetButton( 7, player, action );
			case OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT:
				return GetButton( 8, player, action );
			case OuyaSDK.KeyEnum.BUTTON_LT:
				return GetAxis( keyCode, player ) > 0f;
			case OuyaSDK.KeyEnum.BUTTON_RT:
				return GetAxis( keyCode, player ) > 0f;
			case OuyaSDK.KeyEnum.BUTTON_SELECT:
				return GetButton( 10, player, action );
			case OuyaSDK.KeyEnum.BUTTON_START:
				return GetButton( 9, player, action );
			case OuyaSDK.KeyEnum.BUTTON_SYSTEM:
				return GetButton( 15, player, action );
			default:
				return false;
			}
#endif
		}

		#pragma warning disable 0162
		return false;
	}

    #endregion
}