/****************************************************************************
* Copyright 2019 Nreal Techonology Limited. All rights reserved.
*
* This file is part of NRSDK.
*
* https://www.nreal.ai/
*
*****************************************************************************/
namespace NRKernal
{
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// A hand pointer.
public class NRHandPointer : MonoBehaviour
{
/// The handEnum.
public HandEnum handEnum;
/// The raycaster.
public NRPointerRaycaster raycaster;
/// The default hand enum.
private ControllerHandEnum m_controllerHandEnum;
/// True if is enabled, false if not.
private bool m_PointerEnabled;
/// Awakes this object.
private void Awake()
{
m_controllerHandEnum = handEnum == HandEnum.RightHand ? ControllerHandEnum.Right : ControllerHandEnum.Left;
raycaster.RelatedHand = m_controllerHandEnum;
}
/// Executes the 'enable' action.
private void OnEnable()
{
NRInput.OnControllerRecentering += OnRecentering;
NRInput.OnControllerStatesUpdated += OnControllerStatesUpdated;
}
/// Executes the 'disable' action.
private void OnDisable()
{
NRInput.OnControllerRecentering -= OnRecentering;
NRInput.OnControllerStatesUpdated -= OnControllerStatesUpdated;
}
/// Executes the 'controller states updated' action.
private void OnControllerStatesUpdated()
{
UpdateTracker();
}
/// Updates the tracker.
private void UpdateTracker()
{
var handState = NRInput.Hands.GetHandState(handEnum);
m_PointerEnabled = NRInput.RaycastersActive && NRInput.RaycastMode == RaycastModeEnum.Laser && NRInput.Hands.IsRunning && handState.pointerPoseValid;
raycaster.gameObject.SetActive(m_PointerEnabled);
if (m_PointerEnabled)
{
TrackPose();
}
}
/// Track pose.
private void TrackPose()
{
transform.position = NRInput.GetPosition(m_controllerHandEnum);
transform.localRotation = NRInput.GetRotation(m_controllerHandEnum);
}
/// Executes the 'recentering' action.
private void OnRecentering() { }
}
}