示例#1
0
        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);
        }
示例#2
0
        /// <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));
        }