private void UpdateControllerState(int index) { m_NativeController.UpdateState(index); states[index].controllerType = m_NativeController.GetControllerType(index); #if UNITY_EDITOR if (NRInput.EmulateVirtualDisplayInEditor) { states[index].controllerType = ControllerType.CONTROLLER_TYPE_PHONE; } #endif states[index].availableFeature = (ControllerAvailableFeature)m_NativeController.GetAvailableFeatures(index); states[index].connectionState = m_NativeController.GetConnectionState(index); states[index].rotation = m_NativeController.GetPose(index).rotation; states[index].position = m_NativeController.GetPose(index).position; states[index].gyro = m_NativeController.GetGyro(index); states[index].accel = m_NativeController.GetAccel(index); states[index].mag = m_NativeController.GetMag(index); states[index].touchPos = m_NativeController.GetTouch(index); states[index].isTouching = m_NativeController.IsTouching(index); states[index].recentered = false; states[index].isCharging = m_NativeController.IsCharging(index); states[index].batteryLevel = m_NativeController.GetBatteryLevel(index); states[index].buttonsState = (ControllerButton)m_NativeController.GetButtonState(index); states[index].buttonsDown = (ControllerButton)m_NativeController.GetButtonDown(index); states[index].buttonsUp = (ControllerButton)m_NativeController.GetButtonUp(index); IControllerStateParser stateParser = ControllerStateParseUtility.GetControllerStateParser(states[index].controllerType, index); if (stateParser != null) { stateParser.ParserControllerState(states[index]); } CheckRecenter(index); }
private void UpdateControllerState(int index) { m_NativeController.UpdateState(index); states[index].controllerType = m_NativeController.GetControllerType(index); states[index].availableFeature = (ControllerAvailableFeature)m_NativeController.GetAvailableFeatures(index); states[index].connectionState = m_NativeController.GetConnectionState(index); states[index].rotation = m_NativeController.GetPose(index).rotation; states[index].position = m_NativeController.GetPose(index).position; states[index].gyro = m_NativeController.GetGyro(index); states[index].accel = m_NativeController.GetAccel(index); states[index].mag = m_NativeController.GetMag(index); states[index].touchPos = m_NativeController.GetTouch(index); states[index].isTouching = m_NativeController.IsTouching(index); states[index].recentered = false; states[index].isCharging = m_NativeController.IsCharging(index); states[index].batteryLevel = m_NativeController.GetBatteryLevel(index); states[index].buttonsState = (ControllerButton)m_NativeController.GetButtonState(index); states[index].buttonsDown = (ControllerButton)m_NativeController.GetButtonDown(index); states[index].buttonsUp = (ControllerButton)m_NativeController.GetButtonUp(index); IControllerStateParser stateParser = ControllerStateParseUtility.GetControllerStateParser(states[index].controllerType, index); if (stateParser != null) { stateParser.ParserControllerState(states[index]); } CheckRecenter(index); }
private void UpdateControllerState(int index) { if (!Inited || _dataBytes == null) { return; } _isPhone = _dataBytes[26] > 0; try { r_x = BitConverter.ToSingle(new byte[] { _dataBytes[4], _dataBytes[5], _dataBytes[6], _dataBytes[7] }, 0); r_y = BitConverter.ToSingle(new byte[] { _dataBytes[8], _dataBytes[9], _dataBytes[10], _dataBytes[11] }, 0); r_z = BitConverter.ToSingle(new byte[] { _dataBytes[12], _dataBytes[13], _dataBytes[14], _dataBytes[15] }, 0); r_w = r_x * r_x + r_y * r_y + r_z * r_z; r_w = (float)Math.Sqrt(1 - r_w); _rotation = new Quaternion(r_x, r_y, r_z, r_w); device_touch_x = (short)(((_dataBytes[16] << 4) & 0x0FF0) | ((_dataBytes[17] >> 4) & 0x0F)); device_touch_y = (short)((_dataBytes[17] & 0x0F) << 8 | _dataBytes[18] & 0xFF); if (device_touch_x == 0 && device_touch_y == 0) { _touch.x = 0f; _touch.y = 0f; } else { _touch_resolution_x = _isPhone ? 1000f : 3840f; _touch_resolution_y = _isPhone ? 1000f : 1080f; _touch.x = (device_touch_x / _touch_resolution_x - 0.5f) * 2f; _touch.y = -(device_touch_y / _touch_resolution_y - 0.5f) * 2f; } _physical_button = (_dataBytes[19] & 0x1) > 0; } catch (Exception) { Debug.LogError("Controller Data Error"); } states[index].controllerType = _isPhone ? ControllerType.CONTROLLER_TYPE_PHONE : ControllerType.CONTROLLER_TYPE_NREALLIGHT; states[index].availableFeature = ControllerAvailableFeature.CONTROLLER_AVAILABLE_FEATURE_ROTATION; states[index].connectionState = ControllerConnectionState.CONTROLLER_CONNECTION_STATE_CONNECTED; states[index].rotation = _rotation; states[index].touchPos = _touch; states[index].isTouching = false; states[index].recentered = false; states[index].isCharging = false; states[index].buttonsState = _physical_button ? ControllerButton.TRIGGER : 0; states[index].buttonsDown = 0; states[index].buttonsUp = 0; IControllerStateParser stateParser = ControllerStateParseUtility.GetControllerStateParser(states[index].controllerType, index); if (stateParser != null) { stateParser.ParserControllerState(states[index]); } CheckRecenter(index); }