private void PoseUpdateEvent_ControllerStateUpdate(params Valve.VR.TrackedDevicePose_t[] args)
 {
     for (int i = 0; i < args.Length; i++)
     {
         for (int j = 0; j < 2; j++)
         {
             if (GameplayReferences.GetControllerInfo(j, out tempControllerInfo))
             {
                 if (tempControllerInfo.id == i)
                 {
                     tempControllerInfo.connected = args[i].bDeviceIsConnected;
                     tempControllerInfo.visible   = args[i].bPoseIsValid;
                 }
             }
         }
     }
 }
        void Update()
        {
            if (initResponse != Error.None)
            {
                return;
            }

            Core.InvokeUpdateEvent(Time.deltaTime);
            UpdateSendHotkeyCheck();

#if CVR_STEAMVR || CVR_STEAMVR2
            var system = Valve.VR.OpenVR.System;
            if (system != null)
            {
                var vrEvent = new Valve.VR.VREvent_t();
                var size    = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(Valve.VR.VREvent_t));
                for (int i = 0; i < 64; i++)
                {
                    if (!system.PollNextEvent(ref vrEvent, size))
                    {
                        break;
                    }
                    OnPoseEvent((Valve.VR.EVREventType)vrEvent.eventType);
                }
            }
#endif

#if CVR_OCULUS
            if (GameplayReferences.GetControllerInfo(false, out tempControllerInfo))
            {
                tempControllerInfo.connected = OVRInput.IsControllerConnected(OVRInput.Controller.LTouch);
                tempControllerInfo.visible   = OVRInput.GetControllerPositionTracked(OVRInput.Controller.LTouch);
            }

            if (GameplayReferences.GetControllerInfo(true, out tempControllerInfo))
            {
                tempControllerInfo.connected = OVRInput.IsControllerConnected(OVRInput.Controller.RTouch);
                tempControllerInfo.visible   = OVRInput.GetControllerPositionTracked(OVRInput.Controller.RTouch);
            }
#endif
        }
        public void BeginExitPoll(ExitPollParameters parameters)
        {
            myparameters = parameters;

            //spawn pointers if override isn't set
            if (parameters.PointerType == ExitPoll.PointerType.SceneObject)
            {
                //spawn nothing. something in the scene is already set
                pointerInstance = parameters.PointerOverride;
            }
            else if (parameters.PointerType == ExitPoll.PointerType.HMDPointer)
            {
                GameObject prefab = Resources.Load <GameObject>("HMDPointer");
                if (prefab != null)
                {
                    pointerInstance = GameObject.Instantiate(prefab);
                }
                else
                {
                    Debug.LogError("Spawning Exitpoll HMD Pointer, but cannot find prefab \"HMDPointer\" in Resources!");
                }
            }
            else if (parameters.PointerType == ExitPoll.PointerType.ControllerPointer)
            {
                GameObject prefab = Resources.Load <GameObject>("ControllerPointer");
                if (prefab != null)
                {
                    pointerInstance = GameObject.Instantiate(prefab);
                }
                else
                {
                    Debug.LogError("Spawning Exitpoll Controller Pointer, but cannot find prefab \"ControllerPointer\" in Resources!");
                }
            }
            else if (parameters.PointerType == ExitPoll.PointerType.CustomPointer)
            {
                if (parameters.PointerOverride != null)
                {
                    pointerInstance = GameObject.Instantiate(parameters.PointerOverride);
                }
                else
                {
                    Debug.LogError("Spawning Exitpoll Pointer, but cannot pointer override prefab is null!");
                }
            }

            if (pointerInstance != null)
            {
                if (parameters.PointerParent == ExitPoll.PointerSource.HMD)
                {
                    //parent to hmd and zero position
                    pointerInstance.transform.SetParent(GameplayReferences.HMD);
                    pointerInstance.transform.localPosition = Vector3.zero;
                    pointerInstance.transform.localRotation = Quaternion.identity;
                }
                else if (parameters.PointerParent == ExitPoll.PointerSource.RightHand)
                {
                    Transform t = null;
                    if (GameplayReferences.GetController(true, out t))
                    {
                        pointerInstance.transform.SetParent(t);
                        pointerInstance.transform.localPosition = Vector3.zero;
                        pointerInstance.transform.localRotation = Quaternion.identity;
                    }
                }
                else if (parameters.PointerParent == ExitPoll.PointerSource.LeftHand)
                {
                    Transform t = null;
                    if (GameplayReferences.GetController(false, out t))
                    {
                        pointerInstance.transform.SetParent(t);
                        pointerInstance.transform.localPosition = Vector3.zero;
                        pointerInstance.transform.localRotation = Quaternion.identity;
                    }
                }
                else if (parameters.PointerParent == ExitPoll.PointerSource.Other)
                {
                    if (parameters.PointerParentOverride != null)
                    {
                        pointerInstance.transform.SetParent(parameters.PointerParentOverride);
                        pointerInstance.transform.localPosition = Vector3.zero;
                        pointerInstance.transform.localRotation = Quaternion.identity;
                    }
                }
            }

            //this should take all previously set variables (from functions) and create an exitpoll parameters object

            currentPanelIndex = 0;
            if (string.IsNullOrEmpty(myparameters.Hook))
            {
                Cleanup(false);
                Util.logDebug("CognitiveVR Exit Poll. You haven't specified a question hook to request!");
                return;
            }

            if (CognitiveVR_Manager.Instance != null)
            {
                CognitiveVR.NetworkManager.GetExitPollQuestions(myparameters.Hook, QuestionSetResponse, 3);
            }
            else
            {
                Util.logDebug("Cannot display exitpoll. cognitiveVRManager not present in scene");
                Cleanup(false);
            }
        }