|
|
- namespace VRTK.Examples
- {
- using UnityEngine;
-
- public class VRTK_ControllerAppearance_Example : MonoBehaviour
- {
- public bool highlightBodyOnlyOnCollision = false;
- public bool pulseTriggerHighlightColor = false;
-
- private VRTK_ControllerTooltips tooltips;
- private VRTK_ControllerHighlighter highligher;
- private VRTK_ControllerEvents events;
- private Color highlightColor = Color.yellow;
- private Color pulseColor = Color.black;
- private Color currentPulseColor;
- private float highlightTimer = 0.5f;
- private float pulseTimer = 0.75f;
- private float dimOpacity = 0.8f;
- private float defaultOpacity = 1f;
- private bool highlighted;
-
- private void OnEnable()
- {
- if (GetComponent<VRTK_ControllerEvents>() == null)
- {
- VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_FROM_GAMEOBJECT, "VRTK_ControllerAppearance_Example", "VRTK_ControllerEvents", "the same"));
- return;
- }
-
- events = GetComponent<VRTK_ControllerEvents>();
- highligher = GetComponent<VRTK_ControllerHighlighter>();
- tooltips = GetComponentInChildren<VRTK_ControllerTooltips>();
- currentPulseColor = pulseColor;
- highlighted = false;
-
- //Setup controller event listeners
- events.TriggerPressed += DoTriggerPressed;
- events.TriggerReleased += DoTriggerReleased;
- events.ButtonOnePressed += DoButtonOnePressed;
- events.ButtonOneReleased += DoButtonOneReleased;
- events.ButtonTwoPressed += DoButtonTwoPressed;
- events.ButtonTwoReleased += DoButtonTwoReleased;
- events.StartMenuPressed += DoStartMenuPressed;
- events.StartMenuReleased += DoStartMenuReleased;
- events.GripPressed += DoGripPressed;
- events.GripReleased += DoGripReleased;
- events.TouchpadPressed += DoTouchpadPressed;
- events.TouchpadReleased += DoTouchpadReleased;
-
- tooltips.ToggleTips(false);
- }
-
- private void OnDisable()
- {
- events.TriggerPressed -= DoTriggerPressed;
- events.TriggerReleased -= DoTriggerReleased;
- events.ButtonOnePressed -= DoButtonOnePressed;
- events.ButtonOneReleased -= DoButtonOneReleased;
- events.ButtonTwoPressed -= DoButtonTwoPressed;
- events.ButtonTwoReleased -= DoButtonTwoReleased;
- events.StartMenuPressed -= DoStartMenuPressed;
- events.StartMenuReleased -= DoStartMenuReleased;
- events.GripPressed -= DoGripPressed;
- events.GripReleased -= DoGripReleased;
- events.TouchpadPressed -= DoTouchpadPressed;
- events.TouchpadReleased -= DoTouchpadReleased;
- }
-
- private void PulseTrigger()
- {
- highligher.HighlightElement(SDK_BaseController.ControllerElements.Trigger, currentPulseColor, pulseTimer);
- currentPulseColor = (currentPulseColor == pulseColor ? highlightColor : pulseColor);
- }
-
- private void DoTriggerPressed(object sender, ControllerInteractionEventArgs e)
- {
- tooltips.ToggleTips(true, VRTK_ControllerTooltips.TooltipButtons.TriggerTooltip);
- highligher.HighlightElement(SDK_BaseController.ControllerElements.Trigger, highlightColor, (pulseTriggerHighlightColor ? pulseTimer : highlightTimer));
- if (pulseTriggerHighlightColor)
- {
- InvokeRepeating("PulseTrigger", pulseTimer, pulseTimer);
- }
- VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(events.gameObject), dimOpacity);
- }
-
- private void DoTriggerReleased(object sender, ControllerInteractionEventArgs e)
- {
- tooltips.ToggleTips(false, VRTK_ControllerTooltips.TooltipButtons.TriggerTooltip);
- highligher.UnhighlightElement(SDK_BaseController.ControllerElements.Trigger);
- if (pulseTriggerHighlightColor)
- {
- CancelInvoke("PulseTrigger");
- }
- if (!events.AnyButtonPressed())
- {
- VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(events.gameObject), defaultOpacity);
- }
- }
-
- private void DoButtonOnePressed(object sender, ControllerInteractionEventArgs e)
- {
- tooltips.ToggleTips(true, VRTK_ControllerTooltips.TooltipButtons.ButtonOneTooltip);
- highligher.HighlightElement(SDK_BaseController.ControllerElements.ButtonOne, highlightColor, highlightTimer);
- VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(events.gameObject), dimOpacity);
- }
-
- private void DoButtonOneReleased(object sender, ControllerInteractionEventArgs e)
- {
- tooltips.ToggleTips(false, VRTK_ControllerTooltips.TooltipButtons.ButtonOneTooltip);
- highligher.UnhighlightElement(SDK_BaseController.ControllerElements.ButtonOne);
- if (!events.AnyButtonPressed())
- {
- VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(events.gameObject), defaultOpacity);
- }
- }
-
- private void DoButtonTwoPressed(object sender, ControllerInteractionEventArgs e)
- {
- tooltips.ToggleTips(true, VRTK_ControllerTooltips.TooltipButtons.ButtonTwoTooltip);
- highligher.HighlightElement(SDK_BaseController.ControllerElements.ButtonTwo, highlightColor, highlightTimer);
- VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(events.gameObject), dimOpacity);
- }
-
- private void DoButtonTwoReleased(object sender, ControllerInteractionEventArgs e)
- {
- tooltips.ToggleTips(false, VRTK_ControllerTooltips.TooltipButtons.ButtonTwoTooltip);
- highligher.UnhighlightElement(SDK_BaseController.ControllerElements.ButtonTwo);
- if (!events.AnyButtonPressed())
- {
- VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(events.gameObject), defaultOpacity);
- }
- }
-
- private void DoStartMenuPressed(object sender, ControllerInteractionEventArgs e)
- {
- tooltips.ToggleTips(true, VRTK_ControllerTooltips.TooltipButtons.StartMenuTooltip);
- highligher.HighlightElement(SDK_BaseController.ControllerElements.StartMenu, highlightColor, highlightTimer);
- VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(events.gameObject), dimOpacity);
- }
-
- private void DoStartMenuReleased(object sender, ControllerInteractionEventArgs e)
- {
- tooltips.ToggleTips(false, VRTK_ControllerTooltips.TooltipButtons.StartMenuTooltip);
- highligher.UnhighlightElement(SDK_BaseController.ControllerElements.StartMenu);
- if (!events.AnyButtonPressed())
- {
- VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(events.gameObject), defaultOpacity);
- }
- }
-
- private void DoGripPressed(object sender, ControllerInteractionEventArgs e)
- {
- tooltips.ToggleTips(true, VRTK_ControllerTooltips.TooltipButtons.GripTooltip);
- highligher.HighlightElement(SDK_BaseController.ControllerElements.GripLeft, highlightColor, highlightTimer);
- highligher.HighlightElement(SDK_BaseController.ControllerElements.GripRight, highlightColor, highlightTimer);
- VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(events.gameObject), dimOpacity);
- }
-
- private void DoGripReleased(object sender, ControllerInteractionEventArgs e)
- {
- tooltips.ToggleTips(false, VRTK_ControllerTooltips.TooltipButtons.GripTooltip);
- highligher.UnhighlightElement(SDK_BaseController.ControllerElements.GripLeft);
- highligher.UnhighlightElement(SDK_BaseController.ControllerElements.GripRight);
- if (!events.AnyButtonPressed())
- {
- VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(events.gameObject), defaultOpacity);
- }
- }
-
- private void DoTouchpadPressed(object sender, ControllerInteractionEventArgs e)
- {
- tooltips.ToggleTips(true, VRTK_ControllerTooltips.TooltipButtons.TouchpadTooltip);
- highligher.HighlightElement(SDK_BaseController.ControllerElements.Touchpad, highlightColor, highlightTimer);
- VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(events.gameObject), dimOpacity);
- }
-
- private void DoTouchpadReleased(object sender, ControllerInteractionEventArgs e)
- {
- tooltips.ToggleTips(false, VRTK_ControllerTooltips.TooltipButtons.TouchpadTooltip);
- highligher.UnhighlightElement(SDK_BaseController.ControllerElements.Touchpad);
- if (!events.AnyButtonPressed())
- {
- VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(events.gameObject), defaultOpacity);
- }
- }
-
- private void OnTriggerEnter(Collider collider)
- {
- OnTriggerStay(collider);
- }
-
- private void OnTriggerStay(Collider collider)
- {
- if (!VRTK_PlayerObject.IsPlayerObject(collider.gameObject) && !highlighted)
- {
- if (highlightBodyOnlyOnCollision)
- {
- highligher.HighlightElement(SDK_BaseController.ControllerElements.Body, highlightColor, highlightTimer);
- }
- else
- {
- highligher.HighlightController(highlightColor, highlightTimer);
- }
- highlighted = true;
- }
- }
-
- private void OnTriggerExit(Collider collider)
- {
- if (!VRTK_PlayerObject.IsPlayerObject(collider.gameObject))
- {
- if (highlightBodyOnlyOnCollision)
- {
- highligher.UnhighlightElement(SDK_BaseController.ControllerElements.Body);
- }
- else
- {
- highligher.UnhighlightController();
- }
- highlighted = false;
- }
- }
- }
- }
|