// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using UnityEngine;
namespace Microsoft.MixedReality.Toolkit.Input
{
///
/// Implements the Gaze Provider for an Input Source.
///
public interface IMixedRealityGazeProvider
{
///
/// Enable or disable the Component attached to the
///
bool Enabled { get; set; }
///
/// The Gaze Input Source for the provider.
///
IMixedRealityInputSource GazeInputSource { get; }
///
/// The Gaze Pointer for the provider.
///
IMixedRealityPointer GazePointer { get; }
///
/// The prefab to be instantiated as the gaze cursor.
///
GameObject GazeCursorPrefab { set; }
///
/// The Gaze Cursor for the provider.
///
IMixedRealityCursor GazeCursor { get; }
///
/// The game object that is currently being gazed at, if any.
///
GameObject GazeTarget { get; }
///
/// HitInfo property gives access to information at the object being gazed at, if any.
///
MixedRealityRaycastHit HitInfo { get; }
///
/// Position at which the gaze manager hit an object.
/// If no object is currently being hit, this will use the last hit distance.
///
Vector3 HitPosition { get; }
///
/// Normal of the point at which the gaze manager hit an object.
/// If no object is currently being hit, this will return the previous normal.
///
Vector3 HitNormal { get; }
///
/// Origin of the gaze.
///
Vector3 GazeOrigin { get; }
///
/// Normal of the gaze.
///
Vector3 GazeDirection { get; }
///
/// The current head velocity.
///
Vector3 HeadVelocity { get; }
///
/// The current head movement direction.
///
Vector3 HeadMovementDirection { get; }
///
/// Get the GameObject reference for this Gaze Provider.
///
GameObject GameObjectReference { get; }
///
/// Notifies this gaze provider of its new hit details.
///
///
/// For components that care where the user's looking, we need
/// to separately update the gaze info even if gaze isn't used for focus.
///
void UpdateGazeInfoFromHit(MixedRealityRaycastHit raycastHit);
}
}