Example #1
0
        protected override float ProcessAxis(Key key, float deadZone)
        {
            if (key.map == InputKeyMap.None)
            {
                return(base.ProcessAxis(key, deadZone));
            }

            OuyaSDK.OuyaPlayer player = GetPlayer(key);

            switch (key.axis)
            {
            case ButtonAxis.Minus:
                return(OuyaExampleCommon.GetButton((OuyaSDK.KeyEnum)key.map, player) ? -1.0f : 0.0f);

                break;

            case ButtonAxis.Plus:
                return(OuyaExampleCommon.GetButton((OuyaSDK.KeyEnum)key.map, player) ? 1.0f : 0.0f);

                break;

            case ButtonAxis.Both:
                float val = OuyaExampleCommon.GetAxis((OuyaSDK.KeyEnum)key.map, player);
                return(Mathf.Abs(val) > deadZone ? val : 0.0f);
            }

            return(0.0f);
        }
    private void FixedUpdate()
    {
        OuyaExampleCommon.UpdateJoysticks();

        if (RendererLabel)
        {
            RendererLabel.text = m_items.Count.ToString();
        }

        if (PolysLabel)
        {
            int count = 0;
            foreach (MeshFilter mf in m_items)
            {
                if (mf.mesh)
                {
                    count += mf.mesh.vertexCount;
                }
            }
            PolysLabel.text = count.ToString();
        }

        if (m_timerChange < DateTime.Now)
        {
            m_timerChange = DateTime.Now + TimeSpan.FromMilliseconds(200);

            if (OuyaExampleCommon.GetButton(OuyaSDK.OuyaPlayer.player1, OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT))
            {
                DecreaseGeometry(1f);
            }

            if (OuyaExampleCommon.GetButton(OuyaSDK.OuyaPlayer.player1, OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT))
            {
                IncreaseGeometry(1f);
            }

            if (OuyaExampleCommon.GetButton(OuyaSDK.OuyaPlayer.player1, OuyaSDK.KeyEnum.BUTTON_DPAD_UP))
            {
                CombineGeometry();
            }

            if (OuyaExampleCommon.GetButton(OuyaSDK.OuyaPlayer.player1, OuyaSDK.KeyEnum.BUTTON_O))
            {
                IncreaseGeometry(0.1f);
            }

            if (OuyaExampleCommon.GetButton(OuyaSDK.OuyaPlayer.player1, OuyaSDK.KeyEnum.BUTTON_A))
            {
                DecreaseGeometry(0.1f);
            }
        }

        float x = OuyaExampleCommon.GetAxis("LY", OuyaSDK.OuyaPlayer.player1);
        float y = OuyaExampleCommon.GetAxis("LX", OuyaSDK.OuyaPlayer.player1);

        Camera.main.transform.RotateAround(new Vector3(0, 0, 3), Camera.main.transform.rotation * Vector3.right, x * 45 * Time.fixedDeltaTime);
        Camera.main.transform.RotateAround(new Vector3(0, 0, 3), Camera.main.transform.rotation * Vector3.up, y * 45 * Time.fixedDeltaTime);
    }
Example #3
0
    void OnGUI()
    {
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_O, OuyaSDK.OuyaPlayer.player1))
        {
            ++m_threadCount;
            RespawnThreads();
        }

        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_A, OuyaSDK.OuyaPlayer.player1))
        {
            m_threadCount = Mathf.Max(0, m_threadCount - 1);
            RespawnThreads();
        }
    }
Example #4
0
        protected override bool ProcessButtonDown(Key key)
        {
            if (key.map == InputKeyMap.None)
            {
                return(base.ProcessButtonDown(key));
            }

            if (key.map == InputKeyMap.HACK1)
            {
                return(OuyaExampleCommon.GetButton(2, GetPlayer(key)));
            }

            return(OuyaExampleCommon.GetButton((OuyaSDK.KeyEnum)key.map, GetPlayer(key)));
        }
    private bool GetButton(OuyaSDK.KeyEnum keyCode, OuyaSDK.OuyaPlayer player)
    {
        // Check if we want the *new* SDK input or the example common
        if (m_useSDKForInput)
        {
            // Get the Unity KeyCode for the Unity API
            KeyCode unityKeyCode = OuyaSDK.GetUnityKeyCode(keyCode, player);

            // Check if the KeyCode is valid
            if (unityKeyCode != (KeyCode)(-1))
            {
                //use the Unity API to get the button value
                bool buttonState = Input.GetKey(unityKeyCode);
                return(buttonState);
            }
        }
        // moving the common code into the sdk via aboveUs
        else
        {
            return(OuyaExampleCommon.GetButton(keyCode, player));
        }
        return(false);
    }
Example #6
0
    private void UpdateController()
    {
        #region Axis Code

        UpdateHighlight(RendererAxisLeft, Mathf.Abs(OuyaExampleCommon.GetAxis(OuyaSDK.KeyEnum.AXIS_LSTICK_X, OuyaExampleCommon.Player)) > 0.25f ||
                        Mathf.Abs(OuyaExampleCommon.GetAxis(OuyaSDK.KeyEnum.AXIS_LSTICK_Y, OuyaExampleCommon.Player)) > 0.25f);

        RendererAxisLeft.transform.localRotation = Quaternion.Euler(OuyaExampleCommon.GetAxis(OuyaSDK.KeyEnum.AXIS_LSTICK_Y, OuyaExampleCommon.Player) * 15, 0, OuyaExampleCommon.GetAxis(OuyaSDK.KeyEnum.AXIS_LSTICK_X, OuyaExampleCommon.Player) * 15);

        UpdateHighlight(RendererAxisRight, Mathf.Abs(OuyaExampleCommon.GetAxis(OuyaSDK.KeyEnum.AXIS_RSTICK_X, OuyaExampleCommon.Player)) > 0.25f ||
                        Mathf.Abs(OuyaExampleCommon.GetAxis(OuyaSDK.KeyEnum.AXIS_RSTICK_Y, OuyaExampleCommon.Player)) > 0.25f);

        RendererAxisRight.transform.localRotation = Quaternion.Euler(OuyaExampleCommon.GetAxis(OuyaSDK.KeyEnum.AXIS_RSTICK_Y, OuyaExampleCommon.Player) * 15, 0, OuyaExampleCommon.GetAxis(OuyaSDK.KeyEnum.AXIS_RSTICK_X, OuyaExampleCommon.Player) * 15);

        RendererLT.transform.localRotation = Quaternion.Euler(OuyaExampleCommon.GetAxis(OuyaSDK.KeyEnum.BUTTON_LT, OuyaExampleCommon.Player) * -15, 0, 0);

        RendererRT.transform.localRotation = Quaternion.Euler(OuyaExampleCommon.GetAxis(OuyaSDK.KeyEnum.BUTTON_RT, OuyaExampleCommon.Player) * -15, 0, 0);

        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_L3, OuyaExampleCommon.Player))
        {
            RendererAxisLeft.transform.localPosition = Vector3.Lerp(RendererAxisLeft.transform.localPosition,
                                                                    new Vector3(5.503977f, 0.75f, -3.344945f), Time.fixedDeltaTime);
        }
        else
        {
            RendererAxisLeft.transform.localPosition = Vector3.Lerp(RendererAxisLeft.transform.localPosition,
                                                                    new Vector3(5.503977f, 1.127527f, -3.344945f), Time.fixedDeltaTime);
        }

        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_R3, OuyaExampleCommon.Player))
        {
            RendererAxisRight.transform.localPosition = Vector3.Lerp(RendererAxisRight.transform.localPosition,
                                                                     new Vector3(-2.707688f, 0.75f, -1.354063f), Time.fixedDeltaTime);
        }
        else
        {
            RendererAxisRight.transform.localPosition = Vector3.Lerp(RendererAxisRight.transform.localPosition,
                                                                     new Vector3(-2.707688f, 1.11295f, -1.354063f), Time.fixedDeltaTime);
        }

        #endregion


        #region Button Code

        #region BUTTONS O - A
        //Check O button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_O, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererButtonO, true, true);
        }
        else
        {
            UpdateHighlight(RendererButtonO, false, true);
        }

        //Check U button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_U, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererButtonU, true, true);
        }
        else
        {
            UpdateHighlight(RendererButtonU, false, true);
        }

        //Check Y button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_Y, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererButtonY, true, true);
        }
        else
        {
            UpdateHighlight(RendererButtonY, false, true);
        }

        //Check A button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_A, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererButtonA, true, true);
        }
        else
        {
            UpdateHighlight(RendererButtonA, false, true);
        }

        //Check L3 button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_L3, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererAxisLeft, true, true);
        }
        else
        {
            UpdateHighlight(RendererAxisLeft, false, true);
        }

        //Check R3 button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_R3, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererAxisRight, true, true);
        }
        else
        {
            UpdateHighlight(RendererAxisRight, false, true);
        }
        #endregion

        #region Bumpers
        //Check LB button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_LB, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererLB, true, true);
        }
        else
        {
            UpdateHighlight(RendererLB, false, true);
        }

        //Check RB button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_RB, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererRB, true, true);
        }
        else
        {
            UpdateHighlight(RendererRB, false, true);
        }
        #endregion

        #region triggers
        //Check LT button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_LT, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererLT, true, true);
        }
        else
        {
            UpdateHighlight(RendererLT, false, true);
        }

        //Check RT button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_RT, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererRT, true, true);
        }
        else
        {
            UpdateHighlight(RendererRT, false, true);
        }
        #endregion

        #region DPAD
        //Check DPAD UP button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_DPAD_UP, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererDpadUp, true, true);
        }
        else
        {
            UpdateHighlight(RendererDpadUp, false, true);
        }

        //Check DPAD DOWN button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererDpadDown, true, true);
        }
        else
        {
            UpdateHighlight(RendererDpadDown, false, true);
        }

        //Check DPAD LEFT button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererDpadLeft, true, true);
        }
        else
        {
            UpdateHighlight(RendererDpadLeft, false, true);
        }

        //Check DPAD RIGHT button for down state
        if (OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT, OuyaExampleCommon.Player))
        {
            UpdateHighlight(RendererDpadRight, true, true);
        }
        else
        {
            UpdateHighlight(RendererDpadRight, false, true);
        }
        #endregion

        #endregion
    }
Example #7
0
    private void UpdateLabels()
    {
        try
        {
            OuyaNGUIHandler nguiHandler = GameObject.Find("_NGUIHandler").GetComponent <OuyaNGUIHandler>();
            if (nguiHandler != null &&
                null != OuyaSDK.Joysticks)
            {
                for (int i = 0; i < OuyaSDK.Joysticks.Length || i < 8; i++)
                {
                    string joyName = "N/A";
                    if (i < OuyaSDK.Joysticks.Length)
                    {
                        joyName = OuyaSDK.Joysticks[i];
                    }
                    switch (i)
                    {
                    case 0:
                        nguiHandler.controller1.text = OuyaExampleCommon.Player == OuyaSDK.OuyaPlayer.player1 ? string.Format("*{0}", joyName) : joyName;
                        break;

                    case 1:
                        nguiHandler.controller2.text = OuyaExampleCommon.Player == OuyaSDK.OuyaPlayer.player2 ? string.Format("*{0}", joyName) : joyName;
                        break;

                    case 2:
                        nguiHandler.controller3.text = OuyaExampleCommon.Player == OuyaSDK.OuyaPlayer.player3 ? string.Format("*{0}", joyName) : joyName;
                        break;

                    case 3:
                        nguiHandler.controller4.text = OuyaExampleCommon.Player == OuyaSDK.OuyaPlayer.player4 ? string.Format("*{0}", joyName) : joyName;
                        break;

                    case 4:
                        nguiHandler.controller5.text = OuyaExampleCommon.Player == OuyaSDK.OuyaPlayer.player5 ? string.Format("*{0}", joyName) : joyName;
                        break;

                    case 5:
                        nguiHandler.controller6.text = OuyaExampleCommon.Player == OuyaSDK.OuyaPlayer.player6 ? string.Format("*{0}", joyName) : joyName;
                        break;

                    case 6:
                        nguiHandler.controller7.text = OuyaExampleCommon.Player == OuyaSDK.OuyaPlayer.player7 ? string.Format("*{0}", joyName) : joyName;
                        break;

                    case 7:
                        nguiHandler.controller8.text = OuyaExampleCommon.Player == OuyaSDK.OuyaPlayer.player8 ? string.Format("*{0}", joyName) : joyName;
                        break;
                    }
                }

                nguiHandler.button1.text  = OuyaExampleCommon.GetButton(0, OuyaExampleCommon.Player).ToString();
                nguiHandler.button2.text  = OuyaExampleCommon.GetButton(1, OuyaExampleCommon.Player).ToString();
                nguiHandler.button3.text  = OuyaExampleCommon.GetButton(2, OuyaExampleCommon.Player).ToString();
                nguiHandler.button4.text  = OuyaExampleCommon.GetButton(3, OuyaExampleCommon.Player).ToString();
                nguiHandler.button5.text  = OuyaExampleCommon.GetButton(4, OuyaExampleCommon.Player).ToString();
                nguiHandler.button6.text  = OuyaExampleCommon.GetButton(5, OuyaExampleCommon.Player).ToString();
                nguiHandler.button7.text  = OuyaExampleCommon.GetButton(6, OuyaExampleCommon.Player).ToString();
                nguiHandler.button8.text  = OuyaExampleCommon.GetButton(7, OuyaExampleCommon.Player).ToString();
                nguiHandler.button9.text  = OuyaExampleCommon.GetButton(8, OuyaExampleCommon.Player).ToString();
                nguiHandler.button10.text = OuyaExampleCommon.GetButton(9, OuyaExampleCommon.Player).ToString();
                nguiHandler.button11.text = OuyaExampleCommon.GetButton(10, OuyaExampleCommon.Player).ToString();
                nguiHandler.button12.text = OuyaExampleCommon.GetButton(11, OuyaExampleCommon.Player).ToString();
                nguiHandler.button13.text = OuyaExampleCommon.GetButton(12, OuyaExampleCommon.Player).ToString();
                nguiHandler.button14.text = OuyaExampleCommon.GetButton(13, OuyaExampleCommon.Player).ToString();
                nguiHandler.button15.text = OuyaExampleCommon.GetButton(14, OuyaExampleCommon.Player).ToString();
                nguiHandler.button16.text = OuyaExampleCommon.GetButton(15, OuyaExampleCommon.Player).ToString();
                nguiHandler.button17.text = OuyaExampleCommon.GetButton(16, OuyaExampleCommon.Player).ToString();
                nguiHandler.button18.text = OuyaExampleCommon.GetButton(17, OuyaExampleCommon.Player).ToString();
                nguiHandler.button19.text = OuyaExampleCommon.GetButton(18, OuyaExampleCommon.Player).ToString();
                nguiHandler.button20.text = OuyaExampleCommon.GetButton(19, OuyaExampleCommon.Player).ToString();

                //nguiHandler.rawOut.text = OuyaGameObject.InputData;
                nguiHandler.device.text = SystemInfo.deviceModel;
            }
        }
        catch (System.Exception)
        {
        }
    }
    void Update()
    {
        if (m_timerCreate < DateTime.Now)
        {
            m_timerCreate = DateTime.Now + TimeSpan.FromMilliseconds(NoteTimeToCreate);
            int index = Random.Range(0, Lanes.Count);
            CreateNote(Lanes[index]);
        }

        foreach (CubeLaneItem item in Lanes)
        {
            bool val = OuyaExampleCommon.GetButton(item.LaneButton);
            if (LastPressed.ContainsKey(item.LaneButton))
            {
                if (!val)
                {
                    LastPressed.Remove(item.LaneButton);
                }
            }
            else
            {
                if (val)
                {
                    LastPressed[item.LaneButton] = OuyaExampleCommon.GetButton(item.LaneButton);
                }
            }
        }

        List<NoteItem> removeList = new List<NoteItem>();
        foreach (NoteItem note in Notes)
        {
            if (note.EndTime < DateTime.Now)
            {
                removeList.Add(note);
                continue;
            }
            
            float elapsed = (float)(DateTime.Now - note.StartTime).TotalMilliseconds;
            
            note.Instance.transform.position =
                Vector3.Lerp(
                    note.Parent.StartPosition.transform.position,
                    note.Parent.EndPosition.transform.position,
                    elapsed/(float) NoteTimeToLive);

            bool inRange = Mathf.Abs(TrackEnd.position.z - note.Instance.transform.position.z) <= 16;
            bool afterRange = (note.Instance.transform.position.z - 8) < TrackEnd.position.z;
            
            // use available press of the lane button
            if (LastPressed.ContainsKey(note.Parent.LaneButton) &&
                LastPressed[note.Parent.LaneButton])
            {
                if (
                    //check if note is across the finish line
                    inRange
                    )
                {
                    //use button press
                    LastPressed[note.Parent.LaneButton] = false;

                    //hit the note
                    if (!note.NoteHit)
                    {
                        note.NoteHit = true;
                        note.FadeTime = DateTime.Now + TimeSpan.FromMilliseconds(NoteTimeToFade);
                        UpdateFadeDelay(note);
                    }
                }
            }

            if (note.NoteHit)
            {
            }
            else if (inRange)
            {
                (note.Instance.renderer as MeshRenderer).material.color = Color.white;
            }
            else if (afterRange)
            {
                (note.Instance.renderer as MeshRenderer).material.color = new Color(0, 0, 0, 0.75f);
                if (!note.NoteHit)
                {
                    note.Parent.FadeDelay = DateTime.Now;
                }
            }

            if (note.FadeTime != DateTime.MinValue)
            {
                if (note.FadeTime < DateTime.Now)
                {
                    removeList.Add(note);
                    continue;
                }
                elapsed = (float)(note.FadeTime - DateTime.Now).TotalMilliseconds;
                (note.Instance.renderer as MeshRenderer).material.color = Color.Lerp(note.Parent.LaneColor, Color.clear, 1f - elapsed / (float)NoteTimeToFade);
                note.Instance.transform.localScale = Vector3.Lerp(note.Instance.transform.localScale, note.Parent.StartPosition.transform.localScale * 2, elapsed / (float)NoteTimeToFade);

            }
        }
        foreach (NoteItem note in removeList)
        {
            Notes.Remove(note);
            DestroyNote(note);
        }
    }
    public static bool GetButton(string inputName, OuyaSDK.OuyaPlayer player)
    {
        switch (Moga)
        {
        case true:

            switch (inputName)
            {
            case "Shoot":
                return(MogaInput.GetKey(KeyCode.JoystickButton0));                               //a

            case "Orbit":
                return(MogaInput.GetKey(KeyCode.JoystickButton2));                       //x

            case "Option":
                return(MogaInput.GetKey(KeyCode.JoystickButton3));                          //y

            case "Exit":
                return(MogaInput.GetKey(KeyCode.JoystickButton1));                              //b

            case "TurnLeft":
                return(MogaInput.GetKeyDown(KeyCode.JoystickButton10));

            case "TurnRight":
                return(MogaInput.GetKeyDown(KeyCode.JoystickButton11));

            case "SkipLeft":
                return(MogaInput.GetKeyDown(KeyCode.JoystickButton4));

            case "SkipRight":
                return(MogaInput.GetKeyDown(KeyCode.JoystickButton5));

            case "DLeft":
                return(MogaInput.GetKey(KeyCode.JoystickButton14));

            case "DRight":
                return(MogaInput.GetKey(KeyCode.JoystickButton15));

            case "DUp":
                return(MogaInput.GetKey(KeyCode.JoystickButton12));

            case "DDown":
                return(MogaInput.GetKey(KeyCode.JoystickButton13));

            case "StartBtn":
                return(MogaInput.GetKeyDown(KeyCode.JoystickButton7));

            default:
                return(false);
            }

        case false:

            switch (inputName)
            {
            case "Shoot":
                return(OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_O, player));

            case "Orbit":
                return(OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_U, player));

            case "Option":
                return(OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_Y, player));

            case "Exit":
                return(OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_A, player));

            case "TurnLeft":
                return(OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_LT, player));

            case "TurnRight":
                return(OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_RT, player));

            case "SkipLeft":
                return(OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_LB, player));

            case "SkipRight":
                return(OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_RB, player));

            case "DLeft":
                return(OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_DPAD_LEFT, player));

            case "DRight":
                return(OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_DPAD_RIGHT, player));

            case "DUp":
                return(OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_DPAD_UP, player));

            case "DDown":
                return(OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.BUTTON_DPAD_DOWN, player));

            default:
                return(false);
            }
        }
        return(false);
    }
    void Update()
    {
        if (m_timerCreate < DateTime.Now)
        {
            m_timerCreate = DateTime.Now + TimeSpan.FromMilliseconds(NoteTimeToCreate);
            int index = Random.Range(0, Lanes.Count);
            CreateNote(Lanes[index]);
        }

        bool lower = OuyaExampleCommon.GetButton(OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_LOWER,
                                                 OuyaSDK.OuyaPlayer.player1);

        float strum = OuyaExampleCommon.GetAxis(OuyaSDK.KeyEnum.HARMONIX_ROCK_BAND_GUITAR_STRUM,
                                                OuyaSDK.OuyaPlayer.player1);

        bool strumChanged = LastStrum != strum;

        LastStrum = strum;

        foreach (CubeLaneItem item in Lanes)
        {
            // cache the button state
            LastPressed[item.LaneButton] = OuyaExampleCommon.GetButton(item.LaneButton, OuyaSDK.OuyaPlayer.player1);
        }

        List <NoteItem> removeList = new List <NoteItem>();

        foreach (NoteItem note in Notes)
        {
            if (note.EndTime < DateTime.Now)
            {
                removeList.Add(note);
                continue;
            }

            float elapsed = (float)(DateTime.Now - note.StartTime).TotalMilliseconds;

            note.Instance.transform.position =
                Vector3.Lerp(
                    note.Parent.StartPosition.transform.position,
                    note.Parent.EndPosition.transform.position,
                    elapsed / (float)NoteTimeToLive);

            bool inRange    = Mathf.Abs(TrackEnd.position.z - note.Instance.transform.position.z) <= 16;
            bool afterRange = (note.Instance.transform.position.z - 8) < TrackEnd.position.z;
            if (inRange)
            {
                (note.Instance.renderer as MeshRenderer).material.color = Color.white;
            }
            else if (afterRange)
            {
                (note.Instance.renderer as MeshRenderer).material.color = new Color(0, 0, 0, 0.75f);
            }

            // use available press of the lane button
            if (LastPressed.ContainsKey(note.Parent.LaneButton) &&
                LastPressed[note.Parent.LaneButton])
            {
                if (
                    //check if note is across the finish line
                    inRange &&

                    //check if lower was used
                    (!note.UseLower ||
                     lower == note.UseLower) &&

                    // check if strum was used
                    strumChanged &&
                    strum != 0f)
                {
                    //use button press
                    LastPressed[note.Parent.LaneButton] = false;

                    //hit the note
                    if (note.FadeTime == DateTime.MinValue)
                    {
                        note.FadeTime = DateTime.Now + TimeSpan.FromMilliseconds(NoteTimeToFade);
                        note.Parent.LaneSound.volume = 1;
                    }
                }
            }

            if (note.FadeTime != DateTime.MinValue)
            {
                if (note.FadeTime < DateTime.Now)
                {
                    removeList.Add(note);
                    continue;
                }
                elapsed = (float)(note.FadeTime - DateTime.Now).TotalMilliseconds;
                (note.Instance.renderer as MeshRenderer).material.color = Color.Lerp(note.Parent.LaneColor, Color.clear, 1f - elapsed / (float)NoteTimeToFade);
                note.Instance.transform.localScale = Vector3.Lerp(note.Instance.transform.localScale, note.Parent.StartPosition.transform.localScale * 2, elapsed / (float)NoteTimeToFade);
            }
        }
        foreach (NoteItem note in removeList)
        {
            Notes.Remove(note);
            DestroyNote(note);
        }
    }