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() == 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(); highligher = GetComponent(); tooltips = GetComponentInChildren(); 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; } } } }