internal static void InitializeFeatureSets(bool addTestFeatureSet)
        {
            if (s_AllFeatureSets == null)
            {
                s_AllFeatureSets = new Dictionary <BuildTargetGroup, List <FeatureSetInfo> >();
            }

            s_AllFeatureSets.Clear();

            FillKnownFeatureSets(addTestFeatureSet);

            var types = TypeCache.GetTypesWithAttribute <OpenXRFeatureSetAttribute>();

            foreach (var t in types)
            {
                var attrs = Attribute.GetCustomAttributes(t);
                foreach (var attr in attrs)
                {
                    var featureSetAttr = attr as OpenXRFeatureSetAttribute;
                    if (featureSetAttr == null)
                    {
                        continue;
                    }

                    if (!addTestFeatureSet && featureSetAttr.FeatureSetId.Contains("com.unity.xr.test.featureset"))
                    {
                        continue;
                    }

                    foreach (var buildTargetGroup in featureSetAttr.SupportedBuildTargets)
                    {
                        var key = buildTargetGroup;
                        if (!s_AllFeatureSets.ContainsKey(key))
                        {
                            s_AllFeatureSets.Add(key, new List <FeatureSetInfo>());
                        }

                        var newFeatureSet = new FeatureSetInfo()
                        {
                            isEnabled     = false,
                            name          = featureSetAttr.UiName,
                            description   = featureSetAttr.Description,
                            featureSetId  = featureSetAttr.FeatureSetId,
                            downloadText  = "",
                            downloadLink  = "",
                            featureIds    = featureSetAttr.FeatureIds,
                            isInstalled   = true,
                            uiName        = new GUIContent(featureSetAttr.UiName),
                            uiLongName    = new GUIContent($"{featureSetAttr.UiName} feature set"),
                            uiDescription = new GUIContent(featureSetAttr.Description),
                            helpIcon      = String.IsNullOrEmpty(featureSetAttr.Description) ? null : new GUIContent("", CommonContent.k_HelpIcon.image, featureSetAttr.Description),
                        };

                        bool foundFeatureSet = false;
                        var  featureSets     = s_AllFeatureSets[key];
                        for (int i = 0; i < featureSets.Count; i++)
                        {
                            if (String.Compare(featureSets[i].featureSetId, newFeatureSet.featureSetId, true) == 0)
                            {
                                foundFeatureSet = true;
                                featureSets[i]  = newFeatureSet;
                                break;
                            }
                        }
                        if (!foundFeatureSet)
                        {
                            featureSets.Add(newFeatureSet);
                        }
                    }
                }
            }
        }
Example #2
0
 public static bool FeatureIsOptional(FeatureSetInfo featureSet, FeatureHelpersInternal.FeatureInfo feature)
 {
     return(Array.IndexOf(featureSet.featureIds, feature.Attribute.FeatureId) > -1 &&
            (featureSet.requiredFeatureIds == null || Array.IndexOf(featureSet.requiredFeatureIds, feature.Attribute.FeatureId) == -1) &&
            (featureSet.defaultFeatureIds == null || Array.IndexOf(featureSet.defaultFeatureIds, feature.Attribute.FeatureId) == -1));
 }
        internal static void InitializeFeatureSets(bool addTestFeatureSet)
        {
            if (s_AllFeatureSets == null)
            {
                s_AllFeatureSets = new Dictionary <BuildTargetGroup, List <FeatureSetInfo> >();
            }

            s_AllFeatureSets.Clear();

            FillKnownFeatureSets(addTestFeatureSet);

            var types = TypeCache.GetTypesWithAttribute <OpenXRFeatureSetAttribute>();

            foreach (var t in types)
            {
                var attrs = Attribute.GetCustomAttributes(t);
                foreach (var attr in attrs)
                {
                    var featureSetAttr = attr as OpenXRFeatureSetAttribute;
                    if (featureSetAttr == null)
                    {
                        continue;
                    }

                    if (!addTestFeatureSet && featureSetAttr.FeatureSetId.Contains("com.unity.xr.test.featureset"))
                    {
                        continue;
                    }

                    foreach (var buildTargetGroup in featureSetAttr.SupportedBuildTargets)
                    {
                        var key = buildTargetGroup;
                        if (!s_AllFeatureSets.ContainsKey(key))
                        {
                            s_AllFeatureSets.Add(key, new List <FeatureSetInfo>());
                        }

                        var isEnabled     = OpenXREditorSettings.Instance.IsFeatureSetSelected(buildTargetGroup, featureSetAttr.FeatureSetId);
                        var newFeatureSet = new FeatureSetInfo()
                        {
                            isEnabled          = isEnabled,
                            wasEnabled         = isEnabled,
                            name               = featureSetAttr.UiName,
                            description        = featureSetAttr.Description,
                            featureSetId       = featureSetAttr.FeatureSetId,
                            downloadText       = "",
                            downloadLink       = "",
                            featureIds         = featureSetAttr.FeatureIds,
                            requiredFeatureIds = featureSetAttr.RequiredFeatureIds,
                            defaultFeatureIds  = featureSetAttr.DefaultFeatureIds,
                            isInstalled        = true,
                            uiName             = new GUIContent(featureSetAttr.UiName),
                            uiLongName         = new GUIContent($"{featureSetAttr.UiName} feature group"),
                            uiDescription      = new GUIContent(featureSetAttr.Description),
                            helpIcon           = String.IsNullOrEmpty(featureSetAttr.Description) ? null : new GUIContent("", CommonContent.k_HelpIcon.image, featureSetAttr.Description),
                        };

                        bool foundFeatureSet = false;
                        var  featureSets     = s_AllFeatureSets[key];
                        for (int i = 0; i < featureSets.Count; i++)
                        {
                            if (String.Compare(featureSets[i].featureSetId, newFeatureSet.featureSetId, true) == 0)
                            {
                                foundFeatureSet = true;
                                featureSets[i]  = newFeatureSet;
                                break;
                            }
                        }

                        if (!foundFeatureSet)
                        {
                            featureSets.Add(newFeatureSet);
                        }
                    }
                }
            }


            var buildTargetGroups = Enum.GetValues(typeof(BuildTargetGroup));

            foreach (BuildTargetGroup buildTargetGroup in buildTargetGroups)
            {
                FeatureSetState fsi;
                if (!s_FeatureSetState.TryGetValue(buildTargetGroup, out fsi))
                {
                    fsi = new FeatureSetState();
                    fsi.featureSetFeatureIds         = new HashSet <string>();
                    fsi.requiredToEnabledFeatureIds  = new HashSet <string>();
                    fsi.requiredToDisabledFeatureIds = new HashSet <string>();
                    fsi.defaultToEnabledFeatureIds   = new HashSet <string>();

                    s_FeatureSetState.Add(buildTargetGroup, fsi);
                }

                SetFeaturesFromEnabledFeatureSets(buildTargetGroup);
            }
        }