Esempio n. 1
0
            public void ResetOrigins(CVRInput vrInput)
            {
                if (CurrentHandle == OpenVR.k_ulInvalidActionHandle)
                {
                    m_originIterator = -1;
                    return;
                }

                m_originIterator = 0;
                var error = vrInput.GetActionOrigins(s_actionSetHandle, CurrentHandle, s_actionOrigins);

                if (error != EVRInputError.None)
                {
                    Debug.LogError("GetActionOrigins failed! action=" + CurrentPath + " error=" + error);
                }
            }
Esempio n. 2
0
        //ActionセットとActionを指定すると、それが取得できる元のパスのListを返す
        public List <OriginSource> GetActionOriginsList(string ActionSetPath, string ActionPath)
        {
            ReadyCheck(); //実行可能な状態かチェック

            EVRInputError inputError = EVRInputError.None;
            ulong         sethandle  = GetActionSetHandle(ActionSetPath); //無効なハンドルならthrowされる
            ulong         handle     = GetActionHandle(ActionPath);       //無効なハンドルならthrowされる

            //取得処理
            ulong[] origins = new ulong[1024];
            inputError = vrinput.GetActionOrigins(sethandle, handle, origins);
            if (inputError == EVRInputError.WrongType)
            {
                //姿勢ではない
                throw new ArgumentException(inputError.ToString());
            }
            if (inputError != EVRInputError.None)
            {
                //致命的エラー
                throw new IOException(inputError.ToString());
            }

            List <OriginSource> list = new List <OriginSource>();

            for (int i = 0; i < 1024; i++)
            {
                if (origins[i] == OpenVR.k_ulInvalidInputValueHandle)
                {
                    break;
                }
                OriginSource origin = GetOriginSourceFromInternalHandle(origins[i]);
                if (origin != null)
                {
                    list.Add(origin);
                }
            }

            return(list);
        }
Esempio n. 3
0
        private IEnumerator <ActionCollection <T> .EnumData> AllActionDevicePathEnumerator <T>(CVRInput vrInput, ActionCollection <T> actionCollection)
#if CSHARP_7_OR_LATER
            where T : Enum
#endif
        {
            IVRModuleDeviceState   prevState;
            IVRModuleDeviceStateRW currState;
            EVRInputError          error;
            var current = default(ActionCollection <T> .EnumData);

            foreach (var p in actionCollection.ActionHandles.EnumValues)
            {
                current.inputKey     = p.Key;
                current.actionHandle = p.Value;
                if (current.actionHandle == OpenVR.k_ulInvalidActionHandle)
                {
                    continue;
                }

                Array.Clear(outActionOrigins, 0, outActionOrigins.Length);
                error = vrInput.GetActionOrigins(s_actionSetHandle, current.actionHandle, outActionOrigins);

                while (error == EVRInputError.BufferTooSmall && outActionOrigins.Length <= 4096)
                {
                    Array.Resize(ref outActionOrigins, outActionOrigins.Length * 2);
                    Debug.LogWarning("Expanding outActionOrigins size to " + outActionOrigins.Length);
                    error = vrInput.GetActionOrigins(s_actionSetHandle, current.actionHandle, outActionOrigins);
                }

                if (error != EVRInputError.None)
                {
                    Debug.LogError("[SteamVRv2Module] CVRInput.GetActionOrigins fail. input=" + p.Key + " action=" + actionCollection.ActionPaths[p.Key] + " error=" + error);
                    continue;
                }

                foreach (var originHandle in outActionOrigins)
                {
                    if (originHandle == 0ul)
                    {
                        break;
                    }

                    OriginData data;
                    error = m_originDataCache.TryGetOriginData(vrInput, originHandle, out data);
                    if (error != EVRInputError.None)
                    {
                        Debug.LogError("[SteamVRv2Module] CVRInput.GetOriginTrackedDeviceInfo fail. input=" + p.Key + " action=" + actionCollection.ActionPaths[p.Key] + " originHandle=" + originHandle + " error=" + error);
                        continue;
                    }

                    current.devicePathHandle = data.devicePathHandle;
                    uint moduleIndex;
                    if (!m_indexMap.TryGetModuleIndex(data.deviceIndex, out moduleIndex))
                    {
                        continue;
                    }
                    if (!TryGetValidDeviceState(moduleIndex, out prevState, out currState))
                    {
                        continue;
                    }

                    current.currState = currState;
                    yield return(current);
                }
            }
        }