/**************************************************************************** * 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() { } } }