Files
virtualclassroomdhbw/Assets/Scripts/Classroom/BlockRotAndMove.cs
T
2024-10-29 17:16:17 +01:00

68 lines
2.1 KiB
C#

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<ActionBasedContinuousMoveProvider>();
turnProvider = GameObject.Find("Turn").GetComponent<ActionBasedContinuousTurnProvider>();
}
private void Start()
{
try
{
FindMoveProvider();
moveProviderFound = true;
}
catch
{
moveProviderFound = false;
}
//add listener functions to the object the script is attached to
grabInteractable = GetComponent<XRGrabInteractable>();
grabInteractable.onSelectEntered.AddListener(OnGrab);
grabInteractable.onSelectExited.AddListener(OnRelease);
grabInteractable.onSelectCanceled.AddListener(OnRelease);
}
}