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