Esempio n. 1
0
        //アナログ軸の状態を取得する(生データ)
        private void GetAnalogActionDataRaw(string ActionPath, out InputAnalogActionData_t data, string RestrictToDevicePath = "")
        {
            ReadyCheck(); //実行可能な状態かチェック

            EVRInputError inputError = EVRInputError.None;

            data = new InputAnalogActionData_t();

            var   size   = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(InputAnalogActionData_t));
            ulong handle = GetActionHandle(ActionPath); //無効なハンドルならthrowされる

            //制約デバイス指定されていれば適用
            ulong DeviceHandle = OpenVR.k_ulInvalidInputValueHandle;

            if (RestrictToDevicePath != "")
            {
                DeviceHandle = GetInputSourceHandle(RestrictToDevicePath); //無効なハンドルならthrowされる
            }

            //取得処理
            inputError = vrinput.GetAnalogActionData(handle, ref data, size, DeviceHandle);
            if (inputError == EVRInputError.WrongType)
            {
                //アナログ軸ではない
                throw new ArgumentException(inputError.ToString());
            }
            if (inputError != EVRInputError.None)
            {
                //致命的エラー
                throw new IOException(inputError.ToString());
            }

            return;
        }
Esempio n. 2
0
        private EVRInputError TryGetAnalogValue(CVRInput vrInput, ulong actionHandle, ulong devicePathHandle, out Vector3 value)
        {
            var data  = default(InputAnalogActionData_t);
            var error = vrInput.GetAnalogActionData(actionHandle, ref data, m_analogDataSize, devicePathHandle);

            value.x = data.x;
            value.y = data.y;
            value.z = data.z;
            return(error);
        }
Esempio n. 3
0
        private Vector3 GetAnalogState(ulong handle, ulong hand)
        {
            var dataSize = Marshal.SizeOf <InputAnalogActionData_t>();
            var data     = new InputAnalogActionData_t();
            var error    = input.GetAnalogActionData(handle, ref data, (uint)dataSize, hand);

            #if UNITY_EDITOR
            if (error != EVRInputError.None && error != EVRInputError.NoData)
            {
                Debug.LogError("GetAnalogActionData: " + error.ToString());
                return(Vector3.zero);
            }
            #endif
            return(new Vector3(data.x, data.y, data.z));
        }
Esempio n. 4
0
            public bool TryGetCurrentAnalogData(CVRInput vrInput, out IVRModuleDeviceState prevState, out IVRModuleDeviceStateRW currState, ref InputAnalogActionData_t data)
            {
                ulong originDevicePath;

                if (!TryGetCurrentOriginDataAndDeviceState(vrInput, out prevState, out currState, out originDevicePath))
                {
                    return(false);
                }

                var error = vrInput.GetAnalogActionData(CurrentHandle, ref data, s_moduleInstance.m_analogDataSize, originDevicePath);

                if (error != EVRInputError.None)
                {
                    Debug.LogError("GetAnalogActionData failed! action=" + CurrentPath + " error=" + error);
                    return(false);
                }

                return(true);
            }