Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

114 lines
3.5 KiB

namespace VRTK
{
using UnityEngine;
public abstract class VRTK_SDKControllerReady : MonoBehaviour
{
protected SDK_BaseController previousControllerSDK;
protected virtual void OnEnable()
{
VRTK_SDKManager.SubscribeLoadedSetupChanged(LoadedSetupChanged);
CheckControllersReady();
}
protected virtual void OnDisable()
{
if (VRTK_SDKManager.UnsubscribeLoadedSetupChanged(LoadedSetupChanged))
{
UnregisterPreviousLeftController();
UnregisterPreviousRightController();
}
}
protected virtual void LoadedSetupChanged(VRTK_SDKManager sender, VRTK_SDKManager.LoadedSetupChangeEventArgs e)
{
CheckControllersReady();
previousControllerSDK = VRTK_SDK_Bridge.GetControllerSDK();
}
protected virtual void CheckControllersReady()
{
RegisterLeftControllerReady();
RegisterRightControllerReady();
VRTK_ControllerReference leftRef = VRTK_DeviceFinder.GetControllerReferenceLeftHand();
VRTK_ControllerReference rightRef = VRTK_DeviceFinder.GetControllerReferenceRightHand();
if (VRTK_ControllerReference.IsValid(leftRef))
{
ControllerReady(leftRef);
}
if (VRTK_ControllerReference.IsValid(rightRef))
{
ControllerReady(rightRef);
}
}
protected virtual void UnregisterPreviousLeftController()
{
try
{
previousControllerSDK.LeftControllerReady -= LeftControllerReady;
}
catch (System.Exception)
{
}
}
protected virtual void UnregisterPreviousRightController()
{
try
{
previousControllerSDK.RightControllerReady -= RightControllerReady;
}
catch (System.Exception)
{
}
}
protected virtual void RegisterLeftControllerReady()
{
UnregisterPreviousLeftController();
try
{
VRTK_SDK_Bridge.GetControllerSDK().LeftControllerReady -= LeftControllerReady;
VRTK_SDK_Bridge.GetControllerSDK().LeftControllerReady += LeftControllerReady;
}
catch (System.Exception)
{
VRTK_SDK_Bridge.GetControllerSDK().LeftControllerReady += LeftControllerReady;
}
}
protected virtual void RegisterRightControllerReady()
{
UnregisterPreviousRightController();
try
{
VRTK_SDK_Bridge.GetControllerSDK().RightControllerReady -= RightControllerReady;
VRTK_SDK_Bridge.GetControllerSDK().RightControllerReady += RightControllerReady;
}
catch (System.Exception)
{
VRTK_SDK_Bridge.GetControllerSDK().RightControllerReady += RightControllerReady;
}
}
protected virtual void RightControllerReady(object sender, VRTKSDKBaseControllerEventArgs e)
{
ControllerReady(e.controllerReference);
}
protected virtual void LeftControllerReady(object sender, VRTKSDKBaseControllerEventArgs e)
{
ControllerReady(e.controllerReference);
}
protected virtual void ControllerReady(VRTK_ControllerReference controllerReference)
{
}
}
}