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