mixedreality/com.microsoft.mixedreality..../Core/Interfaces/InputSystem/IMixedRealityInputSystem.cs

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