private static void UpdateFieldString <TEnum>(ref ulong prev, ulong curr, List <string> setNames)
#if CSHARP_7_OR_LATER
            where TEnum : Enum
#endif
        {
            if (curr != prev)
            {
                var enumInfo = EnumUtils.GetDisplayInfo(typeof(TEnum));
                for (int i = EnumArrayBase <TEnum> .StaticMinInt, imax = EnumArrayBase <TEnum> .StaticMaxInt; i <= imax; ++i)
                {
                    if (EnumArrayBase <TEnum> .StaticIsValidIndex(i))
                    {
                        var mask   = 1ul << i;
                        var wasSet = (prev & mask) > 0ul;
                        var nowSet = (curr & mask) > 0ul;
                        if (!wasSet)
                        {
                            if (nowSet)
                            {
                                setNames.Add(GetDisplayName <TEnum>(enumInfo, i));
                            }
                        }
                        else
                        {
                            if (!nowSet)
                            {
                                setNames.Remove(GetDisplayName <TEnum>(enumInfo, i));
                            }
                        }
                    }
                }

                prev = curr;
            }
        }
Ejemplo n.º 2
0
        public bool TryGetValidTooltipRig(ControllerButton button, out TooltipRig rig)
        {
            rig = default(TooltipRig);
            if (!EnumArrayBase <ControllerButton> .StaticIsValidIndex((int)button))
            {
                return(false);
            }

            var model       = VRModule.GetDeviceState(m_viveRole.GetDeviceIndex()).deviceModel;
            var rigSetAsset = (TooltipRigAsset)null;

            if (m_customTooltipRigSet != null)
            {
                rigSetAsset = m_customTooltipRigSet[(int)model];
            }

            if (rigSetAsset != null || TooltipRigAsset.TryGetDefaultAsset(model, out rigSetAsset))
            {
                var entries = rigSetAsset.rigEntries;
                if (entries != null && entries.Count > 0)
                {
                    for (int i = 0, imax = entries.Count; i < imax; ++i)
                    {
                        var entry = entries[i];
                        if (entry.button == button)
                        {
                            rig = entry.tooltipRig;
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }
        private static string GetDisplayName <TEnum>(EnumUtils.EnumDisplayInfo info, int i)
#if CSHARP_7_OR_LATER
            where TEnum : Enum
#endif
        {
            int displayIndex;

            if (info.value2displayedIndex.TryGetValue(i, out displayIndex))
            {
                return(info.displayedNames[displayIndex]);
            }
            else
            {
                return(EnumArrayBase <TEnum> .I2E(i).ToString());
            }
        }
        private void UpdateFingerJoints(JointEnumArray.IReadOnly roomSpaceJoints, Transform parentTransform, RigidPose roomSpaceParentPoseInverse, HandJointName startJoint, HandJointName endJoint)
        {
            foreach (var index in EnumArrayBase <HandJointName> .StaticEnumsFrom(startJoint, endJoint))
            {
                var jointTrans = m_modelJoints[index];
                if (jointTrans == null)
                {
                    continue;
                }

                var data = roomSpaceJoints[index];
                if (!data.isValid)
                {
                    continue;
                }

                var parentSpaceJointPose = roomSpaceParentPoseInverse * data.pose;
                UpdateJointTransformLocal(parentTransform, jointTrans, parentSpaceJointPose);
                parentTransform            = jointTrans;
                roomSpaceParentPoseInverse = data.pose.GetInverse();
            }
        }
        public static bool TryGetDefaultAsset(VRModuleDeviceModel model, out TooltipRigAsset rigAsset)
        {
            if (!EnumArrayBase <VRModuleDeviceModel> .StaticIsValidIndex((int)model))
            {
                rigAsset = null; return(false);
            }

            if (s_defaultTooltipRigSets == null)
            {
                s_defaultTooltipRigSets = new EnumArray <VRModuleDeviceModel, LoadedRigSet>();
            }

            var loadedRigSet = s_defaultTooltipRigSets[(int)model];

            if (!loadedRigSet.haveLoaded)
            {
                TooltipRigAsset asset = null;
                int             modelNameIndex;
                var             info = EnumUtils.GetDisplayInfo(typeof(VRModuleDeviceModel));
                if (info.value2displayedIndex.TryGetValue((int)model, out modelNameIndex))
                {
                    asset = Resources.Load <TooltipRigAsset>("TooltipRig/VIUTooltipRig" + info.displayedNames[modelNameIndex]);
                }

                s_defaultTooltipRigSets[(int)model] = loadedRigSet = new LoadedRigSet()
                {
                    haveLoaded = true,
                    asset      = asset,
                };
            }

            if (loadedRigSet.asset == null)
            {
                rigAsset = null; return(false);
            }

            rigAsset = loadedRigSet.asset;
            return(rigAsset != null);
        }