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)
|
|
{
|
|
}
|
|
}
|
|
}
|