Create a gist now

Instantly share code, notes, and snippets.

/*copied from complete version in sample project of "https://developer.microsoft.com/en-us/windows/holographic/holograms_211"*/
using UnityEngine;
using UnityEngine.VR.WSA.Input;
namespace Academy.HoloToolkit.Unity
{
public class GestureManager : Singleton<GestureManager>
{
// Tap and Navigation gesture recognizer.
public GestureRecognizer NavigationRecognizer { get; private set; }
// Manipulation gesture recognizer.
public GestureRecognizer ManipulationRecognizer { get; private set; }
// Currently active gesture recognizer.
public GestureRecognizer ActiveRecognizer { get; private set; }
public bool IsNavigating { get; private set; }
public Vector3 NavigationPosition { get; private set; }
public bool IsManipulating { get; private set; }
public Vector3 ManipulationPosition { get; private set; }
void Awake()
{
/* TODO: DEVELOPER CODING EXERCISE 2.b */
// 2.b: Instantiate the NavigationRecognizer.
NavigationRecognizer = new GestureRecognizer();
// 2.b: Add Tap and NavigationX GestureSettings to the NavigationRecognizer's RecognizableGestures.
NavigationRecognizer.SetRecognizableGestures(
GestureSettings.Tap |
GestureSettings.NavigationX);
// 2.b: Register for the TappedEvent with the NavigationRecognizer_TappedEvent function.
NavigationRecognizer.TappedEvent += NavigationRecognizer_TappedEvent;
// 2.b: Register for the NavigationStartedEvent with the NavigationRecognizer_NavigationStartedEvent function.
NavigationRecognizer.NavigationStartedEvent += NavigationRecognizer_NavigationStartedEvent;
// 2.b: Register for the NavigationUpdatedEvent with the NavigationRecognizer_NavigationUpdatedEvent function.
NavigationRecognizer.NavigationUpdatedEvent += NavigationRecognizer_NavigationUpdatedEvent;
// 2.b: Register for the NavigationCompletedEvent with the NavigationRecognizer_NavigationCompletedEvent function.
NavigationRecognizer.NavigationCompletedEvent += NavigationRecognizer_NavigationCompletedEvent;
// 2.b: Register for the NavigationCanceledEvent with the NavigationRecognizer_NavigationCanceledEvent function.
NavigationRecognizer.NavigationCanceledEvent += NavigationRecognizer_NavigationCanceledEvent;
// Instantiate the ManipulationRecognizer.
ManipulationRecognizer = new GestureRecognizer();
// Add the ManipulationTranslate GestureSetting to the ManipulationRecognizer's RecognizableGestures.
ManipulationRecognizer.SetRecognizableGestures(
GestureSettings.ManipulationTranslate);
// Register for the Manipulation events on the ManipulationRecognizer.
ManipulationRecognizer.ManipulationStartedEvent += ManipulationRecognizer_ManipulationStartedEvent;
ManipulationRecognizer.ManipulationUpdatedEvent += ManipulationRecognizer_ManipulationUpdatedEvent;
ManipulationRecognizer.ManipulationCompletedEvent += ManipulationRecognizer_ManipulationCompletedEvent;
ManipulationRecognizer.ManipulationCanceledEvent += ManipulationRecognizer_ManipulationCanceledEvent;
ResetGestureRecognizers();
}
void OnDestroy()
{
// 2.b: Unregister the Tapped and Navigation events on the NavigationRecognizer.
NavigationRecognizer.TappedEvent -= NavigationRecognizer_TappedEvent;
NavigationRecognizer.NavigationStartedEvent -= NavigationRecognizer_NavigationStartedEvent;
NavigationRecognizer.NavigationUpdatedEvent -= NavigationRecognizer_NavigationUpdatedEvent;
NavigationRecognizer.NavigationCompletedEvent -= NavigationRecognizer_NavigationCompletedEvent;
NavigationRecognizer.NavigationCanceledEvent -= NavigationRecognizer_NavigationCanceledEvent;
// Unregister the Manipulation events on the ManipulationRecognizer.
ManipulationRecognizer.ManipulationStartedEvent -= ManipulationRecognizer_ManipulationStartedEvent;
ManipulationRecognizer.ManipulationUpdatedEvent -= ManipulationRecognizer_ManipulationUpdatedEvent;
ManipulationRecognizer.ManipulationCompletedEvent -= ManipulationRecognizer_ManipulationCompletedEvent;
ManipulationRecognizer.ManipulationCanceledEvent -= ManipulationRecognizer_ManipulationCanceledEvent;
}
/// <summary>
/// Revert back to the default GestureRecognizer.
/// </summary>
public void ResetGestureRecognizers()
{
// Default to the navigation gestures.
Transition(NavigationRecognizer);
}
/// <summary>
/// Transition to a new GestureRecognizer.
/// </summary>
/// <param name="newRecognizer">The GestureRecognizer to transition to.</param>
public void Transition(GestureRecognizer newRecognizer)
{
if (newRecognizer == null)
{
return;
}
if (ActiveRecognizer != null)
{
if (ActiveRecognizer == newRecognizer)
{
return;
}
ActiveRecognizer.CancelGestures();
ActiveRecognizer.StopCapturingGestures();
}
newRecognizer.StartCapturingGestures();
ActiveRecognizer = newRecognizer;
}
private void NavigationRecognizer_NavigationStartedEvent(InteractionSourceKind source, Vector3 relativePosition, Ray ray)
{
// 2.b: Set IsNavigating to be true.
IsNavigating = true;
// 2.b: Set NavigationPosition to be relativePosition.
NavigationPosition = relativePosition;
}
private void NavigationRecognizer_NavigationUpdatedEvent(InteractionSourceKind source, Vector3 relativePosition, Ray ray)
{
// 2.b: Set IsNavigating to be true.
IsNavigating = true;
// 2.b: Set NavigationPosition to be relativePosition.
NavigationPosition = relativePosition;
}
private void NavigationRecognizer_NavigationCompletedEvent(InteractionSourceKind source, Vector3 relativePosition, Ray ray)
{
// 2.b: Set IsNavigating to be false.
IsNavigating = false;
}
private void NavigationRecognizer_NavigationCanceledEvent(InteractionSourceKind source, Vector3 relativePosition, Ray ray)
{
// 2.b: Set IsNavigating to be false.
IsNavigating = false;
}
private void ManipulationRecognizer_ManipulationStartedEvent(InteractionSourceKind source, Vector3 position, Ray ray)
{
if (HandsManager.Instance.FocusedGameObject != null)
{
IsManipulating = true;
ManipulationPosition = position;
HandsManager.Instance.FocusedGameObject.SendMessageUpwards("PerformManipulationStart", position);
}
}
private void ManipulationRecognizer_ManipulationUpdatedEvent(InteractionSourceKind source, Vector3 position, Ray ray)
{
if (HandsManager.Instance.FocusedGameObject != null)
{
IsManipulating = true;
ManipulationPosition = position;
HandsManager.Instance.FocusedGameObject.SendMessageUpwards("PerformManipulationUpdate", position);
}
}
private void ManipulationRecognizer_ManipulationCompletedEvent(InteractionSourceKind source, Vector3 position, Ray ray)
{
IsManipulating = false;
}
private void ManipulationRecognizer_ManipulationCanceledEvent(InteractionSourceKind source, Vector3 position, Ray ray)
{
IsManipulating = false;
}
private void NavigationRecognizer_TappedEvent(InteractionSourceKind source, int tapCount, Ray ray)
{
GameObject focusedObject = InteractibleManager.Instance.FocusedGameObject;
if (focusedObject != null)
{
focusedObject.SendMessageUpwards("OnSelect");
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment