public void UpdatePoses(WVR_PoseOriginModel origin, bool isSimulator) { if (!this.Initialized) { return; } Log.gpl.d(LOG_TAG, "UpdatePoses"); #if UNITY_EDITOR if (Application.isEditor) { if (isSimulator) { WaveVR_Utils.WVR_GetSyncPose_S((int)origin, poses, poses.Length); } } else #endif { bool _focusCapturedBySystem = Interop.WVR_IsInputFocusCapturedBySystem(); if (this.FocusCapturedBySystem != _focusCapturedBySystem) { this.FocusCapturedBySystem = _focusCapturedBySystem; WaveVR_Utils.Event.Send(WaveVR_Utils.Event.SYSTEMFOCUS_CHANGED, this.FocusCapturedBySystem); // When getting system focus again, reset button events. if (!this.FocusCapturedBySystem) { Log.i(LOG_TAG, "UpdatePoses() get system focus, reset button events."); ResetButtonEvents(); } else { Log.i(LOG_TAG, "UpdatePoses() lost system focus."); } } Interop.WVR_GetSyncPose(origin, poses, (uint)poses.Length); } for (uint i = 0; i < DeviceTypes.Length; i++) { bool _hasType = false; for (uint j = 0; j < poses.Length; j++) { WVR_DevicePosePair_t _pose = poses[j]; if (_pose.type == DeviceTypes [i]) { _hasType = true; deviceIndexMap[i] = j; if (connected [i] != _pose.pose.IsValidPose) { connected [i] = _pose.pose.IsValidPose; Log.i(LOG_TAG, "device " + DeviceTypes [i] + " is " + (connected [i] ? "connected" : "disconnected")); WaveVR_Utils.Event.Send(WaveVR_Utils.Event.DEVICE_CONNECTED, DeviceTypes [i], connected[i]); } if (connected [i]) { rtPoses[j].update(_pose.pose.PoseMatrix); } break; } } // no such type if (!_hasType) { if (connected [i] == true) { connected [i] = false; Log.i(LOG_TAG, "device " + DeviceTypes [i] + " is disconnected."); WaveVR_Utils.Event.Send(WaveVR_Utils.Event.DEVICE_CONNECTED, DeviceTypes [i], connected[i]); } } } for (int i = 0; i < poses.Length; i++) { WVR_DeviceType _type = poses [i].type; bool _connected = false; #if UNITY_EDITOR if (isSimulator) { _connected = WaveVR_Utils.WVR_IsDeviceConnected_S((int)_type); } else #endif { _connected = Interop.WVR_IsDeviceConnected(_type); } bool _posevalid = poses [i].pose.IsValidPose; Log.gpl.d(LOG_TAG, "Device " + _type + " is " + (_connected ? "connected" : "disconnected") + ", pose is " + (_posevalid ? "valid" : "invalid") + ", pos: {" + rtPoses [i].pos.x + ", " + rtPoses [i].pos.y + ", " + rtPoses [i].pos.z + "}" + ", rot: {" + rtPoses [i].rot.x + ", " + rtPoses [i].rot.y + ", " + rtPoses [i].rot.z + ", " + rtPoses [i].rot.w + "}"); } try { WaveVR_Utils.Event.Send(WaveVR_Utils.Event.NEW_POSES, poses, rtPoses); } catch (Exception ex) { Log.e(LOG_TAG, "Send NEW_POSES Event Exception : " + ex); } Log.gpl.d(LOG_TAG, "after new poses"); try { WaveVR_Utils.Event.Send(WaveVR_Utils.Event.AFTER_NEW_POSES); } catch (Exception ex) { Log.e(LOG_TAG, "Send AFTER_NEW_POSES Event Exception : " + ex); } }
public void OnNewPoses(params object[] args) { if (WaveVR.Instance == null) { return; } var poses = (WVR_DevicePosePair_t[])args[0]; var posesRT = (WaveVR_Utils.RigidTransform[])args[1]; FlushDeviceState(); for (int i = 0, imax = poses.Length; i < imax; ++i) { uint deviceIndex; var deviceType = poses[i].type; if (!TryGetAndTouchDeviceIndexByType(deviceType, out deviceIndex)) { continue; } IVRModuleDeviceState prevState; IVRModuleDeviceStateRW currState; EnsureValidDeviceState(deviceIndex, out prevState, out currState); #if VIU_WAVEVR_2_1_0_OR_NEWER && UNITY_EDITOR var deviceConnected = WaveVR.Instance.isSimulatorOn && WaveVR_Utils.WVR_IsDeviceConnected_S((int)deviceType); #else var deviceConnected = Interop.WVR_IsDeviceConnected(deviceType); #endif if (!deviceConnected) { if (prevState.isConnected) { currState.Reset(); switch (deviceType) { case WVR_DeviceType.WVR_DeviceType_HMD: m_headState = null; break; case WVR_DeviceType.WVR_DeviceType_Controller_Right: m_rightState = null; break; case WVR_DeviceType.WVR_DeviceType_Controller_Left: m_leftState = null; break; } } } else { if (!prevState.isConnected) { currState.isConnected = true; currState.deviceClass = s_type2class[(int)deviceType]; currState.deviceModel = s_type2model[(int)deviceType]; currState.serialNumber = deviceType.ToString(); currState.modelNumber = deviceType.ToString(); currState.renderModelName = deviceType.ToString(); switch (deviceType) { case WVR_DeviceType.WVR_DeviceType_HMD: m_headState = currState; break; case WVR_DeviceType.WVR_DeviceType_Controller_Right: m_rightState = currState; break; case WVR_DeviceType.WVR_DeviceType_Controller_Left: m_leftState = currState; break; } } // update pose var devicePose = poses[i].pose; currState.velocity = new Vector3(devicePose.Velocity.v0, devicePose.Velocity.v1, -devicePose.Velocity.v2); currState.angularVelocity = new Vector3(-devicePose.AngularVelocity.v0, -devicePose.AngularVelocity.v1, devicePose.AngularVelocity.v2); var rigidTransform = posesRT[i]; currState.position = rigidTransform.pos; currState.rotation = rigidTransform.rot; currState.isPoseValid = devicePose.IsValidPose; } } if (m_rightState != null) { ApplyVirtualArmAndSimulateInput(m_rightState, m_headState, RIGHT_ARM_MULTIPLIER); } if (m_leftState != null) { ApplyVirtualArmAndSimulateInput(m_leftState, m_headState, LEFT_ARM_MULTIPLIER); } ResetAndDisconnectUntouchedDevices(); ProcessConnectedDeviceChanged(); ProcessDevicePoseChanged(); }