Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

224 lines
10 KiB

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;
}
}
}
}