using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.Interaction.Toolkit; //this script does block rotation and movement if a object is grabbed (BUGGY) public class BlockRotAndMove : MonoBehaviour { private ActionBasedContinuousMoveProvider moveProvider; private ActionBasedContinuousTurnProvider turnProvider; private XRGrabInteractable grabInteractable; //variable that ensures, that the move and turn provider must not be searched every time an object is grabbed private bool moveProviderFound = false; //block rotation and movement if an object is grabed private void OnGrab(XRBaseInteractor interactor) { if (!moveProviderFound) { FindMoveProvider(); moveProviderFound = true; } moveProvider.enabled = false; turnProvider.enabled = false; } private void OnRelease(XRBaseInteractor interactor) { if (!moveProviderFound) { FindMoveProvider(); moveProviderFound = true; } moveProvider.enabled = true; turnProvider.enabled = true; } //find the move provider of the current player, currently: get the move provider of the first player found //TODO: fix to only get move provider of current player private void FindMoveProvider() { moveProvider = GameObject.Find("Move").GetComponent(); turnProvider = GameObject.Find("Turn").GetComponent(); } private void Start() { try { FindMoveProvider(); moveProviderFound = true; } catch { moveProviderFound = false; } //add listener functions to the object the script is attached to grabInteractable = GetComponent(); grabInteractable.onSelectEntered.AddListener(OnGrab); grabInteractable.onSelectExited.AddListener(OnRelease); grabInteractable.onSelectCanceled.AddListener(OnRelease); } }