|
|
- namespace VRTK.Examples
- {
- using UnityEngine;
- using Controllables;
- using Controllables.PhysicsBased;
- using Controllables.ArtificialBased;
-
- public class PusherStickyToggle : MonoBehaviour
- {
- public VRTK_BaseControllable buttonOne;
- public VRTK_BaseControllable buttonTwo;
-
- public Color onColor = Color.green;
- public Color offColor = Color.red;
-
- protected bool buttonOnePressed = false;
- protected bool buttonTwoPressed = false;
-
- protected virtual void OnEnable()
- {
- SetStayPressed(buttonOne, true);
- SetStayPressed(buttonTwo, true);
-
- buttonOne.MaxLimitReached += ButtonOne_MaxLimitReached;
- buttonTwo.MaxLimitReached += ButtonTwo_MaxLimitReached;
- buttonOne.MaxLimitExited += ButtonOne_MaxLimitExited;
- buttonTwo.MaxLimitExited += ButtonTwo_MaxLimitExited;
- }
-
- protected virtual void OnDisable()
- {
- buttonOne.MaxLimitReached -= ButtonOne_MaxLimitReached;
- buttonTwo.MaxLimitReached -= ButtonTwo_MaxLimitReached;
- buttonOne.MaxLimitExited -= ButtonOne_MaxLimitExited;
- buttonTwo.MaxLimitExited -= ButtonTwo_MaxLimitExited;
- }
-
- protected virtual void ButtonOne_MaxLimitReached(object sender, Controllables.ControllableEventArgs e)
- {
- if (buttonTwoPressed)
- {
- SetStayPressed(buttonTwo, false);
- }
- buttonOnePressed = true;
- SetPositionTarget(buttonOne, 0f);
- ChangeColor(buttonOne.gameObject, onColor);
- }
-
- protected virtual void ButtonTwo_MaxLimitReached(object sender, Controllables.ControllableEventArgs e)
- {
- if (buttonOnePressed)
- {
- SetStayPressed(buttonOne, false);
- }
- buttonTwoPressed = true;
- SetPositionTarget(buttonTwo, 0f);
- ChangeColor(buttonTwo.gameObject, onColor);
- }
-
- protected virtual void ButtonOne_MaxLimitExited(object sender, Controllables.ControllableEventArgs e)
- {
- SetStayPressed(buttonOne, true);
- buttonOnePressed = false;
- ChangeColor(buttonOne.gameObject, offColor);
- }
-
- protected virtual void ButtonTwo_MaxLimitExited(object sender, Controllables.ControllableEventArgs e)
- {
- SetStayPressed(buttonTwo, true);
- buttonTwoPressed = false;
- ChangeColor(buttonTwo.gameObject, offColor);
- }
-
- protected virtual void ChangeColor(GameObject obj, Color col)
- {
- obj.GetComponent<Renderer>().material.color = col;
- }
-
-
- protected virtual void SetStayPressed(VRTK_BaseControllable obj, bool state)
- {
- if (obj.GetType() == typeof(VRTK_PhysicsPusher))
- {
- VRTK_PhysicsPusher physicsObj = obj as VRTK_PhysicsPusher;
- physicsObj.stayPressed = state;
- }
- else if (obj.GetType() == typeof(VRTK_ArtificialPusher))
- {
- VRTK_ArtificialPusher artificialObj = obj as VRTK_ArtificialPusher;
- artificialObj.SetStayPressed(state);
- }
- }
-
- protected virtual void SetPositionTarget(VRTK_BaseControllable obj, float newTarget)
- {
- if (obj.GetType() == typeof(VRTK_PhysicsPusher))
- {
- VRTK_PhysicsPusher physicsObj = obj as VRTK_PhysicsPusher;
- physicsObj.positionTarget = newTarget;
- }
- else if (obj.GetType() == typeof(VRTK_ArtificialPusher))
- {
- VRTK_ArtificialPusher artificialObj = obj as VRTK_ArtificialPusher;
- artificialObj.SetPositionTarget(newTarget);
- }
- }
- }
- }
|