436 lines
17 KiB
C#
436 lines
17 KiB
C#
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT License.
|
|
|
|
using Microsoft.MixedReality.Toolkit.Utilities;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace Microsoft.MixedReality.Toolkit.Input
|
|
{
|
|
/// <summary>
|
|
/// Manager interface for a Input system in the Mixed Reality Toolkit
|
|
/// All replacement systems for providing Input System functionality should derive from this interface
|
|
/// </summary>
|
|
public interface IMixedRealityInputSystem : IMixedRealityEventSystem
|
|
{
|
|
/// <summary>
|
|
/// Event that's raised when the Input is enabled.
|
|
/// </summary>
|
|
event Action InputEnabled;
|
|
|
|
/// <summary>
|
|
/// Event that's raised when the Input is disabled.
|
|
/// </summary>
|
|
event Action InputDisabled;
|
|
|
|
/// <summary>
|
|
/// List of the Interaction Input Sources as detected by the input manager like hands or motion controllers.
|
|
/// </summary>
|
|
HashSet<IMixedRealityInputSource> DetectedInputSources { get; }
|
|
|
|
/// <summary>
|
|
/// List of <see cref="Microsoft.MixedReality.Toolkit.Input.IMixedRealityController"/>s currently detected by the input manager.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This property is similar to <see cref="DetectedInputSources"/>, as this is a subset of those <see cref="IMixedRealityInputSource"/>s in that list.
|
|
/// </remarks>
|
|
HashSet<IMixedRealityController> DetectedControllers { get; }
|
|
|
|
/// <summary>
|
|
/// Typed representation of the ConfigurationProfile property.
|
|
/// </summary>
|
|
MixedRealityInputSystemProfile InputSystemProfile { get; }
|
|
|
|
/// <summary>
|
|
/// The current Focus Provider that's been implemented by this Input System.
|
|
/// </summary>
|
|
IMixedRealityFocusProvider FocusProvider { get; }
|
|
|
|
/// <summary>
|
|
/// The current Raycast Provider that's been implemented by this Input System.
|
|
/// </summary>
|
|
IMixedRealityRaycastProvider RaycastProvider { get; }
|
|
|
|
/// <summary>
|
|
/// The current Gaze Provider that's been implemented by this Input System.
|
|
/// </summary>
|
|
IMixedRealityGazeProvider GazeProvider { get; }
|
|
|
|
/// <summary>
|
|
/// The current Eye Gaze Provider that's been implemented by this Input System.
|
|
/// </summary>
|
|
IMixedRealityEyeGazeProvider EyeGazeProvider { get; }
|
|
|
|
/// <summary>
|
|
/// Indicates if input is currently enabled or not.
|
|
/// </summary>
|
|
bool IsInputEnabled { get; }
|
|
|
|
/// <summary>
|
|
/// Push a disabled input state onto the Input System.
|
|
/// While input is disabled no events will be sent out and the cursor displays
|
|
/// a waiting animation.
|
|
/// </summary>
|
|
void PushInputDisable();
|
|
|
|
/// <summary>
|
|
/// Pop disabled input state. When the last disabled state is
|
|
/// popped off the stack input will be re-enabled.
|
|
/// </summary>
|
|
void PopInputDisable();
|
|
|
|
/// <summary>
|
|
/// Clear the input disable stack, which will immediately re-enable input.
|
|
/// </summary>
|
|
void ClearInputDisableStack();
|
|
|
|
/// <summary>
|
|
/// Push a game object into the modal input stack. Any input handlers
|
|
/// on the game object are given priority to input events before any focused objects.
|
|
/// </summary>
|
|
/// <param name="inputHandler">The input handler to push</param>
|
|
void PushModalInputHandler(GameObject inputHandler);
|
|
|
|
/// <summary>
|
|
/// Remove the last game object from the modal input stack.
|
|
/// </summary>
|
|
void PopModalInputHandler();
|
|
|
|
/// <summary>
|
|
/// Clear all modal input handlers off the stack.
|
|
/// </summary>
|
|
void ClearModalInputStack();
|
|
|
|
/// <summary>
|
|
/// Push a game object into the fallback input stack. Any input handlers on
|
|
/// the game object are given input events when no modal or focused objects consume the event.
|
|
/// </summary>
|
|
/// <param name="inputHandler">The input handler to push</param>
|
|
void PushFallbackInputHandler(GameObject inputHandler);
|
|
|
|
/// <summary>
|
|
/// Remove the last game object from the fallback input stack.
|
|
/// </summary>
|
|
void PopFallbackInputHandler();
|
|
|
|
/// <summary>
|
|
/// Clear all fallback input handlers off the stack.
|
|
/// </summary>
|
|
void ClearFallbackInputStack();
|
|
|
|
#region Input Events
|
|
|
|
#region Input Source Events
|
|
|
|
/// <summary>
|
|
/// Generates a new unique input source id.<para/>
|
|
/// </summary>
|
|
/// <remarks>All Input Sources are required to call this method in their constructor or initialization.</remarks>
|
|
/// <returns>a new unique Id for the input source.</returns>
|
|
uint GenerateNewSourceId();
|
|
|
|
IMixedRealityInputSource RequestNewGenericInputSource(string name, IMixedRealityPointer[] pointers = null, InputSourceType sourceType = InputSourceType.Other);
|
|
|
|
BaseGlobalInputSource RequestNewGlobalInputSource(string name, IMixedRealityFocusProvider focusProvider = null, InputSourceType sourceType = InputSourceType.Other);
|
|
|
|
/// <summary>
|
|
/// Raise the event that the Input Source was detected.
|
|
/// </summary>
|
|
/// <param name="source">The detected Input Source.</param>
|
|
void RaiseSourceDetected(IMixedRealityInputSource source, IMixedRealityController controller = null);
|
|
|
|
/// <summary>
|
|
/// Raise the event that the Input Source was lost.
|
|
/// </summary>
|
|
/// <param name="source">The lost Input Source.</param>
|
|
void RaiseSourceLost(IMixedRealityInputSource source, IMixedRealityController controller = null);
|
|
|
|
/// <summary>
|
|
/// Raise the event that the Input Source's tracking state has changed.
|
|
/// </summary>
|
|
void RaiseSourceTrackingStateChanged(IMixedRealityInputSource source, IMixedRealityController controller, TrackingState state);
|
|
|
|
/// <summary>
|
|
/// Raise the event that the Input Source position was changed.
|
|
/// </summary>
|
|
void RaiseSourcePositionChanged(IMixedRealityInputSource source, IMixedRealityController controller, Vector2 position);
|
|
|
|
/// <summary>
|
|
/// Raise the event that the Input Source position was changed.
|
|
/// </summary>
|
|
void RaiseSourcePositionChanged(IMixedRealityInputSource source, IMixedRealityController controller, Vector3 position);
|
|
|
|
/// <summary>
|
|
/// Raise the event that the Input Source position was changed.
|
|
/// </summary>
|
|
void RaiseSourceRotationChanged(IMixedRealityInputSource source, IMixedRealityController controller, Quaternion rotation);
|
|
|
|
/// <summary>
|
|
/// Raise the event that the Input Source position was changed.
|
|
/// </summary>
|
|
void RaiseSourcePoseChanged(IMixedRealityInputSource source, IMixedRealityController controller, MixedRealityPose position);
|
|
|
|
#endregion Input Source Events
|
|
|
|
#region Focus Events
|
|
|
|
/// <summary>
|
|
/// Raise the pre-focus changed event.
|
|
/// </summary>
|
|
/// <remarks>This event is useful for doing logic before the focus changed event.</remarks>
|
|
/// <param name="pointer">The pointer that the focus change event is raised on.</param>
|
|
/// <param name="oldFocusedObject">The old focused object.</param>
|
|
/// <param name="newFocusedObject">The new focused object.</param>
|
|
void RaisePreFocusChanged(IMixedRealityPointer pointer, GameObject oldFocusedObject, GameObject newFocusedObject);
|
|
|
|
/// <summary>
|
|
/// Raise the focus changed event.
|
|
/// </summary>
|
|
/// <param name="pointer">The pointer that the focus change event is raised on.</param>
|
|
/// <param name="oldFocusedObject">The old focused object.</param>
|
|
/// <param name="newFocusedObject">The new focused object.</param>
|
|
void RaiseFocusChanged(IMixedRealityPointer pointer, GameObject oldFocusedObject, GameObject newFocusedObject);
|
|
|
|
/// <summary>
|
|
/// Raise the focus enter event.
|
|
/// </summary>
|
|
/// <param name="pointer">The pointer that has focus.</param>
|
|
/// <param name="focusedObject">The <see href="https://docs.unity3d.com/ScriptReference/GameObject.html">GameObject</see> that the pointer has entered focus on.</param>
|
|
void RaiseFocusEnter(IMixedRealityPointer pointer, GameObject focusedObject);
|
|
|
|
/// <summary>
|
|
/// Raise the focus exit event.
|
|
/// </summary>
|
|
/// <param name="pointer">The pointer that has lost focus.</param>
|
|
/// <param name="unfocusedObject">The <see href="https://docs.unity3d.com/ScriptReference/GameObject.html">GameObject</see> that the pointer has exited focus on.</param>
|
|
void RaiseFocusExit(IMixedRealityPointer pointer, GameObject unfocusedObject);
|
|
|
|
#endregion Focus Events
|
|
|
|
#region Pointers
|
|
|
|
#region Pointer Down
|
|
|
|
/// <summary>
|
|
/// Raise the pointer down event.
|
|
/// </summary>
|
|
/// <param name="pointer">The pointer where the event originates.</param>
|
|
void RaisePointerDown(IMixedRealityPointer pointer, MixedRealityInputAction inputAction, Handedness handedness = Handedness.None, IMixedRealityInputSource inputSource = null);
|
|
|
|
#endregion Pointer Down
|
|
|
|
#region Pointer Dragged
|
|
|
|
/// <summary>
|
|
/// Raise the pointer dragged event.
|
|
/// </summary>
|
|
/// <param name="pointer">The pointer where the event originates.</param>
|
|
void RaisePointerDragged(IMixedRealityPointer pointer, MixedRealityInputAction inputAction, Handedness handedness = Handedness.None, IMixedRealityInputSource inputSource = null);
|
|
|
|
#endregion Pointer Dragged
|
|
|
|
#region Pointer Click
|
|
|
|
/// <summary>
|
|
/// Raise the pointer clicked event.
|
|
/// </summary>
|
|
void RaisePointerClicked(IMixedRealityPointer pointer, MixedRealityInputAction inputAction, int count, Handedness handedness = Handedness.None, IMixedRealityInputSource inputSource = null);
|
|
|
|
#endregion Pointer Click
|
|
|
|
#region Pointer Up
|
|
|
|
/// <summary>
|
|
/// Raise the pointer up event.
|
|
/// </summary>
|
|
void RaisePointerUp(IMixedRealityPointer pointer, MixedRealityInputAction inputAction, Handedness handedness = Handedness.None, IMixedRealityInputSource inputSource = null);
|
|
|
|
#endregion Pointer Up
|
|
|
|
#endregion Pointers
|
|
|
|
#region Generic Input Events
|
|
|
|
#region Input Down
|
|
|
|
/// <summary>
|
|
/// Raise the input down event.
|
|
/// </summary>
|
|
void RaiseOnInputDown(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction);
|
|
|
|
#endregion Input Down
|
|
|
|
#region Input Up
|
|
|
|
/// <summary>
|
|
/// Raise the input up event.
|
|
/// </summary>
|
|
void RaiseOnInputUp(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction);
|
|
|
|
#endregion Input Up
|
|
|
|
#region Float Input Changed
|
|
|
|
/// <summary>
|
|
/// Raise Float Input Changed.
|
|
/// </summary>
|
|
void RaiseFloatInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, float inputValue);
|
|
|
|
#endregion Float Input Changed
|
|
|
|
#region Input Position Changed
|
|
|
|
/// <summary>
|
|
/// Raise the 2 degrees of freedom input event.
|
|
/// </summary>
|
|
void RaisePositionInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, Vector2 position);
|
|
|
|
/// <summary>
|
|
/// Raise the 3 degrees of freedom input event.
|
|
/// </summary>
|
|
void RaisePositionInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, Vector3 position);
|
|
|
|
#endregion Input Position Changed
|
|
|
|
#region Input Rotation Changed
|
|
|
|
/// <summary>
|
|
/// Raise the 3 degrees of freedom input event.
|
|
/// </summary>
|
|
void RaiseRotationInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, Quaternion rotation);
|
|
|
|
#endregion Input Rotation Changed
|
|
|
|
#region Input Pose Changed
|
|
|
|
/// <summary>
|
|
/// Raise the 6 degrees of freedom input event.
|
|
/// </summary>
|
|
void RaisePoseInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, MixedRealityPose inputData);
|
|
|
|
#endregion Input Pose Changed
|
|
|
|
#endregion Generic Input Events
|
|
|
|
#region Generic Gesture Events
|
|
|
|
/// <summary>
|
|
/// Raise the Gesture Started Event.
|
|
/// </summary>
|
|
void RaiseGestureStarted(IMixedRealityController controller, MixedRealityInputAction action);
|
|
|
|
/// <summary>
|
|
/// Raise the Gesture Updated Event.
|
|
/// </summary>
|
|
void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action);
|
|
|
|
/// <summary>
|
|
/// Raise the Gesture Updated Event.
|
|
/// </summary>
|
|
void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action, Vector2 inputData);
|
|
|
|
/// <summary>
|
|
/// Raise the Gesture Updated Event.
|
|
/// </summary>
|
|
void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action, Vector3 inputData);
|
|
|
|
/// <summary>
|
|
/// Raise the Gesture Updated Event.
|
|
/// </summary>
|
|
void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action, Quaternion inputData);
|
|
|
|
/// <summary>
|
|
/// Raise the Gesture Updated Event.
|
|
/// </summary>
|
|
void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action, MixedRealityPose inputData);
|
|
|
|
/// <summary>
|
|
/// Raise the Gesture Completed Event.
|
|
/// </summary>
|
|
void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action);
|
|
|
|
/// <summary>
|
|
/// Raise the Gesture Completed Event.
|
|
/// </summary>
|
|
void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action, Vector2 inputData);
|
|
|
|
/// <summary>
|
|
/// Raise the Gesture Completed Event.
|
|
/// </summary>
|
|
void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action, Vector3 inputData);
|
|
|
|
/// <summary>
|
|
/// Raise the Gesture Completed Event.
|
|
/// </summary>
|
|
void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action, Quaternion inputData);
|
|
|
|
/// <summary>
|
|
/// Raise the Gesture Completed Event.
|
|
/// </summary>
|
|
void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action, MixedRealityPose inputData);
|
|
|
|
/// <summary>
|
|
/// Raise the Gesture Canceled Event.
|
|
/// </summary>
|
|
void RaiseGestureCanceled(IMixedRealityController controller, MixedRealityInputAction action);
|
|
|
|
#endregion
|
|
|
|
#region Speech Keyword Events
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
void RaiseSpeechCommandRecognized(IMixedRealityInputSource source, RecognitionConfidenceLevel confidence, TimeSpan phraseDuration, DateTime phraseStartTime, SpeechCommands command);
|
|
|
|
#endregion Speech Keyword Events
|
|
|
|
#region Dictation Events
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
void RaiseDictationHypothesis(IMixedRealityInputSource source, string dictationHypothesis, AudioClip dictationAudioClip = null);
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
void RaiseDictationResult(IMixedRealityInputSource source, string dictationResult, AudioClip dictationAudioClip = null);
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
void RaiseDictationComplete(IMixedRealityInputSource source, string dictationResult, AudioClip dictationAudioClip);
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
void RaiseDictationError(IMixedRealityInputSource source, string dictationResult, AudioClip dictationAudioClip = null);
|
|
|
|
#endregion Dictation Events
|
|
|
|
#region Hand Events
|
|
|
|
/// <summary>
|
|
/// Notify system that articulated hand joint info has been updated
|
|
/// </summary>
|
|
void RaiseHandJointsUpdated(IMixedRealityInputSource source, Handedness handedness, IDictionary<TrackedHandJoint, MixedRealityPose> jointPoses);
|
|
|
|
/// <summary>
|
|
/// Notify system that articulated hand mesh has been updated
|
|
/// </summary>
|
|
void RaiseHandMeshUpdated(IMixedRealityInputSource source, Handedness handedness, HandMeshInfo handMeshInfo);
|
|
|
|
void RaiseOnTouchStarted(IMixedRealityInputSource source, IMixedRealityController controller, Handedness handedness, Vector3 touchPoint);
|
|
|
|
void RaiseOnTouchUpdated(IMixedRealityInputSource source, IMixedRealityController controller, Handedness handedness, Vector3 touchPoint);
|
|
|
|
void RaiseOnTouchCompleted(IMixedRealityInputSource source, IMixedRealityController controller, Handedness handedness, Vector3 touchPoint);
|
|
|
|
#endregion Hand Events
|
|
|
|
#endregion Input Events
|
|
}
|
|
}
|