// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using Microsoft.MixedReality.Toolkit.Utilities; using UnityEngine; namespace Microsoft.MixedReality.Toolkit.Input { /// /// The Mixed Reality Visualization component is primarily responsible for synchronizing the user's current input with controller models. /// /// [AddComponentMenu("Scripts/MRTK/SDK/MixedRealityControllerVisualizer")] public class MixedRealityControllerVisualizer : ControllerPoseSynchronizer, IMixedRealityControllerVisualizer { /// /// The amount to offset this controller visualizer's rotation from the input pose /// [SerializeField] [Tooltip("The amount to offset this controller visualizer's rotation from the input pose")] protected Quaternion rotationOffset = Quaternion.identity; protected virtual Quaternion RotationOffset => rotationOffset; // TODO wire up input actions to controller transform nodes / animations /// public GameObject GameObjectProxy => gameObject; #region IMixedRealityInputHandler Implementation /// /// Visualize digital and single axis controls down state on the controller model, if supported /// /// /// Reserved for future implementation /// public override void OnInputDown(InputEventData eventData) { base.OnInputDown(eventData); // TODO Visualize digital and single axis controls down state } /// /// Visualize digital and single axis controls up state on the controller model, if supported /// /// /// Reserved for future implementation /// public override void OnInputUp(InputEventData eventData) { base.OnInputUp(eventData); // TODO Visualize digital and single axis controls up state } /// /// Visualize single axis controls on the controller model, if supported /// /// /// Reserved for future implementation /// public override void OnInputChanged(InputEventData eventData) { base.OnInputChanged(eventData); // TODO Visualize single axis controls } /// /// Visualize the movement of a dual axis input on the controller model, if supported /// /// /// Reserved for future implementation /// public override void OnInputChanged(InputEventData eventData) { base.OnInputChanged(eventData); // TODO Visualize dual axis controls } /// public override void OnSourcePoseChanged(SourcePoseEventData eventData) { if (UseSourcePoseData && eventData.SourceId == Controller?.InputSource.SourceId) { base.OnSourcePoseChanged(eventData); transform.localRotation *= RotationOffset; } } #endregion IMixedRealityInputHandler Implementation } }