public bool Orient(PSMoveBool enable) { bool oriented = false; PsMoveApi.psmove_enable_orientation(_motionController.Handle, enable); if (enable == PSMoveBool.True) { PsMoveApi.psmove_reset_orientation(_motionController.Handle); oriented = PsMoveApi.psmove_has_orientation(_motionController.Handle) == PSMoveBool.True; if (oriented) { float qw = 0.0f, qx = 0.0f, qy = 0.0f, qz = 0.0f; PsMoveApi.psmove_get_orientation(_motionController.Handle, out qw, out qx, out qy, out qz); m_orientationFix = new Quaternion(-qx, -qy, -qz, qw); } } return(oriented); }
/// <summary> /// Process all the raw data on the Playstation Move controller /// </summary> protected virtual void ProcessData() { UpdateButtons(); { int x = 0, y = 0, z = 0; PsMoveApi.psmove_get_accelerometer(_motionController.Handle, out x, out y, out z); _motionController.RawAccelerometer = new Vector3(x, y, z); } { float x = 0, y = 0, z = 0; PsMoveApi.psmove_get_accelerometer_frame(_motionController.Handle, PSMoveFrame.SecondHalf, out x, out y, out z); _motionController.Accelerometer = new Vector3(x, y, z); } { int x = 0, y = 0, z = 0; PsMoveApi.psmove_get_gyroscope(_motionController.Handle, out x, out y, out z); _motionController.RawGyroscope = new Vector3(x, y, z); } { float x = 0, y = 0, z = 0; PsMoveApi.psmove_get_gyroscope_frame(_motionController.Handle, PSMoveFrame.SecondHalf, out x, out y, out z); _motionController.Gyroscope = new Vector3(x, y, z); } if (PsMoveApi.psmove_has_orientation(_motionController.Handle) == PSMoveBool.True) { float w = 0.0f, x = 0.0f, y = 0.0f, z = 0.0f; PsMoveApi.psmove_get_orientation(_motionController.Handle, out w, out x, out y, out z); Quaternion rot = new Quaternion(x, y, z, w); rot = rot * m_orientationFix; #if YISUP Vector3 euler = rot.eulerAngles; rot = Quaternion.Euler(-euler.x, -euler.y, euler.z); #endif m_orientation = rot; _motionController.Orientation = rot; } else { m_orientation = Quaternion.identity; } { int x = 0, y = 0, z = 0; PsMoveApi.psmove_get_magnetometer(_motionController.Handle, out x, out y, out z); // TODO: Should these values be converted into a more human-understandable range? _motionController.Magnetometer = new Vector3(x, y, z); } _motionController.BatteryLevel = PsMoveApi.psmove_get_battery(_motionController.Handle); _motionController.Temperature = PsMoveApi.psmove_get_temperature_in_celsius(_motionController.Handle); PsMoveApi.psmove_set_rumble(_motionController.Handle, (byte)(_motionController.Rumble / 255f)); }