public bool IsOverrideableWithDependencies(SerializedFrameSettings serialized, FrameSettings?defaultFrameSettings) { FrameSettingsFieldAttribute attribute = attributes[field]; bool locallyOverrideable = overrideable == null || overrideable(); FrameSettingsField[] dependencies = attribute.dependencies; if (dependencies == null || ignoreDependencies || !locallyOverrideable) { return(locallyOverrideable); } if (!defaultFrameSettings.HasValue) { return(true); } bool dependenciesOverrideable = true; for (int index = dependencies.Length - 1; index >= 0 && dependenciesOverrideable; --index) { FrameSettingsField depency = dependencies[index]; dependenciesOverrideable &= EvaluateBoolWithOverride(depency, this, defaultFrameSettings, serialized, attribute.IsNegativeDependency(depency)); } return(dependenciesOverrideable); }
static OverridableFrameSettingsArea() { attributes = new Dictionary <FrameSettingsField, FrameSettingsFieldAttribute>(); attributesGroup = new Dictionary <int, IOrderedEnumerable <KeyValuePair <FrameSettingsField, FrameSettingsFieldAttribute> > >(); Dictionary <FrameSettingsField, string> frameSettingsEnumNameMap = FrameSettingsFieldAttribute.GetEnumNameMap(); Type type = typeof(FrameSettingsField); foreach (FrameSettingsField enumVal in frameSettingsEnumNameMap.Keys) { attributes[enumVal] = type.GetField(frameSettingsEnumNameMap[enumVal]).GetCustomAttribute <FrameSettingsFieldAttribute>(); } frameSettingsKeywords = attributes .Values.Where(v => !string.IsNullOrEmpty(v?.displayedName)) .Select(v => v.displayedName?.ToLowerInvariant()).ToArray(); }