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); } } } } }
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); } }