示例#1
0
            public EVRInputError TryGetOriginData(CVRInput vrInput, ulong originHandle, out OriginData originData)
            {
                if (cache.TryGetValue(originHandle, out originData))
                {
                    return(EVRInputError.None);
                }

                var info  = default(InputOriginInfo_t);
                var error = vrInput.GetOriginTrackedDeviceInfo(originHandle, ref info, originInfoSize);

                if (error == EVRInputError.None)
                {
                    cache.Add(originHandle, originData = new OriginData()
                    {
                        devicePathHandle = info.devicePath,
                        deviceIndex      = info.trackedDeviceIndex,
                    });
                    index2PathHandle[originData.deviceIndex] = originData.devicePathHandle;
                }
                else
                {
                    originData = default(OriginData);
                }

                return(error);
            }
示例#2
0
        private bool TryGetDeviceIndexFromOrigin(CVRInput vrInput, ulong origin, out OriginData originData, out EVRInputError error)
        {
            if (!m_originDataCache.TryGetValue(origin, out originData))
            {
                var originInfo = default(InputOriginInfo_t);
                error = vrInput.GetOriginTrackedDeviceInfo(origin, ref originInfo, m_originInfoSize);
                if (error != EVRInputError.None)
                {
                    originData = new OriginData()
                    {
                        devicePath  = OpenVR.k_ulInvalidInputValueHandle,
                        deviceIndex = OpenVR.k_unTrackedDeviceIndexInvalid,
                    };
                    return(false);
                }
                else
                {
                    originData = new OriginData()
                    {
                        devicePath  = originInfo.devicePath,
                        deviceIndex = originInfo.trackedDeviceIndex,
                    };

                    s_devicePathHandles[originInfo.trackedDeviceIndex] = originInfo.devicePath;
                    //Debug.Log("Set device path " + originInfo.trackedDeviceIndex + " to " + originInfo.devicePath);
                    m_originDataCache.Add(origin, originData);
                    return(true);
                }
            }
            else
            {
                error = EVRInputError.None;
                return(true);
            }
        }
示例#3
0
        //---------------アクション情報取得系-------------------

        //ハンドルから入力元デバイスの情報を取得する
        //また入力ソースハンドルを逆引きしてpathにまで戻す。
        public OriginSource GetOriginSourceFromInternalHandle(ulong Handle)
        {
            ReadyCheck(); //実行可能な状態かチェック

            EVRInputError inputError = EVRInputError.None;

            //デバイス情報を取得
            InputOriginInfo_t originInfo = new InputOriginInfo_t();
            var size = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(InputOriginInfo_t));

            inputError = vrinput.GetOriginTrackedDeviceInfo(Handle, ref originInfo, size);
            if (inputError != EVRInputError.None)
            {
                return(null); //情報なし
            }

            //デバイス情報を作成
            OriginSource origin = new OriginSource(originInfo, Handle);

            //デバイスハンドルから探索して見つかれば格納
            foreach (KeyValuePair <string, ulong> p in InputSourceHandles)
            {
                if (p.Value == originInfo.devicePath)
                {
                    origin.DevicePath = p.Key;
                }
            }

            return(origin);
        }