public void CopyFrom(DpnDaydreamControllerState other) { connectionState = other.connectionState; apiStatus = other.apiStatus; orientation = other.orientation; gyro = other.gyro; accel = other.accel; isTouching = other.isTouching; touchPos = other.touchPos; touchDown = other.touchDown; touchUp = other.touchUp; recentering = other.recentering; recentered = other.recentered; clickButtonState = other.clickButtonState; clickButtonDown = other.clickButtonDown; clickButtonUp = other.clickButtonUp; appButtonState = other.appButtonState; appButtonDown = other.appButtonDown; appButtonUp = other.appButtonUp; triggerButtonState = other.triggerButtonState; triggerButtonDown = other.triggerButtonDown; triggerButtonUp = other.triggerButtonUp; volumeUpButtonState = other.volumeUpButtonState; volumeUpButtonDown = other.volumeUpButtonDown; volumeUpButtonUp = other.volumeUpButtonUp; volumeDownButtonState = other.volumeDownButtonState; volumeDownButtonDown = other.volumeDownButtonDown; volumeDownButtonUp = other.volumeDownButtonUp; errorDetails = other.errorDetails; headsetRecenterRequested = other.headsetRecenterRequested; }
void ReadState(DpnDaydreamControllerState outState, DpnDaydreamControllerState lastState) { outState.connectionState = (DpnConnectionState)DpnpGetDeviceCurrentStatus().device_status; outState.apiStatus = DpnControllerApiStatus.Ok; float[] pose = DpnpGetDeviceCurrentStatus().pose_state[0]; dpnQuarterion rawOri = new dpnQuarterion { s = pose[0], i = pose[1], j = pose[2], k = pose[3] }; dpnVector3 rawAccel = new dpnVector3 { x = pose[7], y = pose[8], z = pose[9] }; dpnVector3 rawGyro = new dpnVector3 { x = pose[4], y = pose[5], z = pose[6] }; outState.orientation = rawOri.ToQuaternion(); //outState.orientation = new Quaternion(pose[1], pose[2], pose[3], pose[0]); outState.accel = new Vector3(rawAccel.x, rawAccel.y, -rawAccel.z); outState.gyro = new Vector3(-rawGyro.x, -rawGyro.y, rawGyro.z); switch (DpnManager.peripheral) { case DPVRPeripheral.Flip: { float touchPos_x = DpnpGetDeviceCurrentStatus().axis_state[(int)DPNP_DAYDREAM_AXES.DPNP_DAYDREAM_AXIS_X][0]; float touchPos_y = DpnpGetDeviceCurrentStatus().axis_state[(int)DPNP_DAYDREAM_AXES.DPNP_DAYDREAM_AXIS_Y][0]; outState.touchPos = new Vector2(touchPos_x, touchPos_y); outState.isTouching = 0 != DpnpGetDeviceCurrentStatus().button_state[(int)DPNP_FLIP_BUTTONS.DPNP_FLIP_BUTTON_TOUCH][0]; outState.touchDown = !lastState.isTouching && outState.isTouching; outState.touchUp = lastState.isTouching && !outState.isTouching; outState.appButtonState = 0 != DpnpGetDeviceCurrentStatus().button_state[(int)DPNP_FLIP_BUTTONS.DPNP_FLIP_BUTTON_APP][0]; outState.appButtonDown = !lastState.appButtonState && outState.appButtonState; outState.appButtonUp = lastState.appButtonState && !outState.appButtonState; outState.clickButtonState = 0 != DpnpGetDeviceCurrentStatus().button_state[(int)DPNP_FLIP_BUTTONS.DPNP_FLIP_BUTTON_CLICK][0]; outState.clickButtonDown = !lastState.clickButtonState && outState.clickButtonState; outState.clickButtonUp = lastState.clickButtonState && !outState.clickButtonState; outState.triggerButtonState = 0 != DpnpGetDeviceCurrentStatus().button_state[(int)DPNP_FLIP_BUTTONS.DPNP_FLIP_BUTTON_TRIGGGER][0]; outState.triggerButtonDown = !lastState.triggerButtonState && outState.triggerButtonState; outState.triggerButtonUp = lastState.triggerButtonState && !outState.triggerButtonState; outState.volumeUpButtonState = false; outState.volumeUpButtonDown = false; outState.volumeUpButtonUp = false; outState.volumeDownButtonState = false; outState.volumeDownButtonDown = false; outState.volumeDownButtonUp = false; outState.recentering = 0 != DpnpGetDeviceCurrentStatus().button_state[(int)DPNP_FLIP_BUTTONS.DPNP_FLIP_BUTTON_RECENTERING][0]; outState.recentered = 0 != DpnpGetDeviceCurrentStatus().button_state[(int)DPNP_FLIP_BUTTONS.DPNP_FLIP_BUTTON_RECENTERED][0]; //Debug.Log(" DpnDaydreamControllerState GetData:" + "connectionState = " + outState.connectionState //+ " outState.accX = " + outState.accel.x + " outState.accY = " + outState.accel.y + " outState.accZ = " + outState.accel.z //+ " outState.gyroX = " + outState.gyro.x + " outState.gyroY = " + outState.gyro.y + " outState.gyroZ = " + outState.gyro.z //+ " outState.oriX = " + outState.orientation.x + " outState.oriY = " + outState.orientation.y + " outState.oriZ = " + outState.orientation.z //+ " outState.touchX = " + outState.touchPos.x + " outState.touchY = " + outState.touchPos.y //+ " outState.btnAPP = " + outState.appButtonState + " outState.btnHome = " + outState.recentering + " outState.btnClick = " + outState.clickButtonState //+ " outState.btnvolumeUp = " + outState.volumeUpButtonState + " outState.btnvolumeDown = " + outState.volumeDownButtonState); // If the controller was recentered, we may also need to request that the headset be // recentered. We should do that only if VrCore does NOT implement recentering. outState.headsetRecenterRequested = outState.recentered; if (outState.touchUp) { _touchUpPos = lastcontrollerState.touchPos; } break; } default: { float touchPos_x = DpnpGetDeviceCurrentStatus().axis_state[(int)DPNP_DAYDREAM_AXES.DPNP_DAYDREAM_AXIS_X][0]; float touchPos_y = DpnpGetDeviceCurrentStatus().axis_state[(int)DPNP_DAYDREAM_AXES.DPNP_DAYDREAM_AXIS_Y][0]; outState.touchPos = new Vector2(touchPos_x, touchPos_y); outState.isTouching = (0 != touchPos_x) && (0 != touchPos_y); outState.touchDown = !lastState.isTouching && outState.isTouching; outState.touchUp = lastState.isTouching && !outState.isTouching; outState.appButtonState = 0 != DpnpGetDeviceCurrentStatus().button_state[(int)DPNP_DAYDREAM_BUTTONS.DPNP_DAYDREAM_BUTTON_APP][0]; outState.appButtonDown = !lastState.appButtonState && outState.appButtonState; outState.appButtonUp = lastState.appButtonState && !outState.appButtonState; outState.clickButtonState = 0 != DpnpGetDeviceCurrentStatus().button_state[(int)DPNP_DAYDREAM_BUTTONS.DPNP_DAYDREAM_BUTTON_CLICK][0]; outState.clickButtonDown = !lastState.clickButtonState && outState.clickButtonState; outState.clickButtonUp = lastState.clickButtonState && !outState.clickButtonState; outState.triggerButtonState = false; outState.triggerButtonDown = false; outState.triggerButtonUp = false; outState.volumeUpButtonState = 0 != DpnpGetDeviceCurrentStatus().button_state[(int)DPNP_DAYDREAM_BUTTONS.DPNP_DAYDREAM_BUTTON_VOLUMEUP][0]; outState.volumeUpButtonDown = !lastState.volumeUpButtonState && outState.volumeUpButtonState; outState.volumeUpButtonUp = lastState.volumeUpButtonState && !outState.volumeUpButtonState; outState.volumeDownButtonState = 0 != DpnpGetDeviceCurrentStatus().button_state[(int)DPNP_DAYDREAM_BUTTONS.DPNP_DAYDREAM_BUTTON_VOLUMEDOWN][0]; outState.volumeDownButtonDown = !lastState.volumeDownButtonState && outState.volumeDownButtonState; outState.volumeDownButtonUp = lastState.volumeDownButtonState && !outState.volumeDownButtonState; outState.recentering = 0 != DpnpGetDeviceCurrentStatus().button_state[(int)DPNP_DAYDREAM_BUTTONS.DPNP_DAYDREAM_BUTTON_HOME][0]; outState.recentered = lastState.recentering && !outState.recentering; //Debug.Log(" DpnDaydreamControllerState GetData:" + "connectionState = " + outState.connectionState //+ " outState.accX = " + outState.accel.x + " outState.accY = " + outState.accel.y + " outState.accZ = " + outState.accel.z //+ " outState.gyroX = " + outState.gyro.x + " outState.gyroY = " + outState.gyro.y + " outState.gyroZ = " + outState.gyro.z //+ " outState.oriX = " + outState.orientation.x + " outState.oriY = " + outState.orientation.y + " outState.oriZ = " + outState.orientation.z //+ " outState.touchX = " + outState.touchPos.x + " outState.touchY = " + outState.touchPos.y //+ " outState.btnAPP = " + outState.appButtonState + " outState.btnHome = " + outState.recentering + " outState.btnClick = " + outState.clickButtonState //+ " outState.btnvolumeUp = " + outState.volumeUpButtonState + " outState.btnvolumeDown = " + outState.volumeDownButtonState); // If the controller was recentered, we may also need to request that the headset be // recentered. We should do that only if VrCore does NOT implement recentering. outState.headsetRecenterRequested = outState.recentered; if (outState.touchUp) { _touchUpPos = lastcontrollerState.touchPos; } break; } } }