Esempio n. 1
0
 /// <summary>
 /// Observable ValueChanged event
 /// </summary>
 /// <param name="events"></param>
 /// <returns></returns>
 public static IObservable <Control3DEventArgs> ValueChangedAsObservable(this VRTK_Button events)
 {
     return(Observable.FromEvent <Control3DEventHandler, Control3DEventArgs>(
                h => (s, e) => h(e),
                h => events.ValueChanged += h,
                h => events.ValueChanged -= h));
 }
 private void SetButton3D()
 {
     if (b3d == null)
     {
         b3d = GetComponent <VRTK_Button>();
     }
 }
 public void ActivateCircle(VRTK_Button button)
 {
     if (button.circleActivated != null)
     {
         startAnimRotation startAnim = button.circleActivated.GetComponent <startAnimRotation>();
         if (startAnim.firstCircle)
         {
             StartCoroutine(ActivateCircleCoroutine(3f, startAnim, 0));
             button.circleActivated.GetComponent <AudioSource>().PlayDelayed(3f);
         }
         else if (startAnim.secondCircle)
         {
             StartCoroutine(ActivateCircleCoroutine(3f, startAnim, 1));
             button.circleActivated.GetComponent <AudioSource>().PlayDelayed(3f);
         }
         else if (startAnim.thirdCircle)
         {
             StartCoroutine(ActivateCircleCoroutine(3f, startAnim, 2));
             button.circleActivated.GetComponent <AudioSource>().PlayDelayed(3f);
         }
     }
 }
    public void UpdateButton(VRTK_Button button)
    {
        int id = buttons.FindIndex(e => e.GetInstanceID() == button.GetInstanceID());

        // Don't try to access element before 0
        if (id - 1 > 0)
        {
            // If the previous one needed the next one to be completed
            if (buttons[id - 1].doneOnNext && buttons[id - 1].ReachedActivationDistance())
            {
                // Deactivate previous button
                buttons[id - 1].active = false;
                buttons[id - 1].done   = true;
                buttons[id - 1].GetComponent <VRTK_InteractableObject>().enabled = false;
                buttons[id - 1].GetComponent <MeshRenderer>().material.color     = Color.green;
                //buttons[id - 1].GetComponent<AudioSource>().Play();

                // Deactivate the button who called the method
                buttons[id].active = false;
                buttons[id].GetComponent <VRTK_InteractableObject>().enabled = false;
                buttons[id].GetComponent <MeshRenderer>().material.color     = Color.green;

                ActivateCircle(buttons[id]);

                // Prepare next button of the puzzle
                if (id != buttons.Count - 1)
                {
                    buttons[id + 1].active = true;
                    buttons[id + 1].GetComponent <VRTK_InteractableObject>().enabled = true;
                    buttons[id + 1].GetComponent <MeshRenderer>().material.color     = buttons[id + 1].GetComponent <ActiveColor>().m_activeColor;
                }
            }
            else if (buttons[id - 1].doneOnNext && !buttons[id - 1].ReachedActivationDistance())
            {
                buttons[id].done = false;

                /*
                 * buttons[id].active = false;
                 * buttons[id].GetComponent<VRTK_InteractableObject>().enabled = false;
                 * buttons[id].GetComponent<MeshRenderer>().material.color = Color.green;
                 *
                 * if (id != buttons.Count - 1) {
                 *  buttons[id + 1].active = true;
                 *  buttons[id + 1].GetComponent<VRTK_InteractableObject>().enabled = true;
                 *  buttons[id + 1].GetComponent<MeshRenderer>().material.color = Color.yellow;
                 * }
                 */
                // If the call wasn't made by a doneOnNext type of button
            }
            else if (!buttons[id].doneOnNext)
            {
                buttons[id].active = false;
                buttons[id].GetComponent <VRTK_InteractableObject>().enabled = false;
                buttons[id].GetComponent <MeshRenderer>().material.color     = Color.green;
                buttons[id].GetComponent <AudioSource>().Play();


                ActivateCircle(buttons[id]);

                if (id != buttons.Count - 1)
                {
                    buttons[id + 1].active = true;
                    buttons[id + 1].GetComponent <VRTK_InteractableObject>().enabled = true;
                    buttons[id + 1].GetComponent <MeshRenderer>().material.color     = buttons[id + 1].GetComponent <ActiveColor>().m_activeColor;
                }
                // If the call was made by a doneOnNext button type
            }
            else if (buttons[id].doneOnNext)
            {
                buttons[id + 1].active = true;
                buttons[id + 1].GetComponent <VRTK_InteractableObject>().enabled = true;
                buttons[id + 1].GetComponent <MeshRenderer>().material.color     = Color.yellow;
            }
        }
        else
        {
            if (!buttons[id].doneOnNext)
            {
                buttons[id].active = false;
                buttons[id].GetComponent <VRTK_InteractableObject>().enabled = false;
                buttons[id].GetComponent <MeshRenderer>().material.color     = Color.green;
                buttons[id].GetComponent <AudioSource>().Play();


                ActivateCircle(buttons[id]);
            }

            if (id != buttons.Count - 1)
            {
                buttons[id + 1].active = true;
                buttons[id + 1].GetComponent <VRTK_InteractableObject>().enabled = true;
                buttons[id + 1].GetComponent <MeshRenderer>().material.color     = buttons[id + 1].GetComponent <ActiveColor>().m_activeColor;
            }
        }
    }