public void AmmendInfo(FrameSettingsField field, Func <bool> overrideable = null, Func <object> customGetter = null, Action <object> customSetter = null, object overridedDefaultValue = null, Func <bool> customOverrideable = null) { var matchIndex = fields.FindIndex(f => f.field == field); var match = fields[matchIndex]; if (overrideable != null) { match.overrideable = overrideable; } if (customOverrideable != null) { match.customOverrideable = customOverrideable; } if (customGetter != null) { match.customGetter = customGetter; } if (customSetter != null) { match.customSetter = customSetter; } if (overridedDefaultValue != null) { match.overridedDefaultValue = overridedDefaultValue; } fields[matchIndex] = match; }
public void AmmendInfo(FrameSettingsField field, Func <bool> overrideable = null, bool ignoreDependencies = false, Func <object> customGetter = null, Action <object> customSetter = null, object overridedDefaultValue = null, string labelOverride = null, bool hasMixedValues = false) { var matchIndex = fields.FindIndex(f => f.field == field); if (matchIndex == -1) { throw new FrameSettingsNotFoundInGroupException("This FrameSettings' group do not contain this field. Be sure that the group parameter of the FrameSettingsFieldAttribute match this OverridableFrameSettingsArea groupIndex."); } var match = fields[matchIndex]; if (overrideable != null) { match.overrideable = overrideable; } match.ignoreDependencies = ignoreDependencies; if (customGetter != null) { match.customGetter = customGetter; } if (customSetter != null) { match.customSetter = customSetter; } if (overridedDefaultValue != null) { match.overridedDefaultValue = overridedDefaultValue; } if (labelOverride != null) { match.label.text = labelOverride; } match.hasMixedValues = hasMixedValues; fields[matchIndex] = match; }
/// <summary>Attribute contenaing generation info for inspector and DebugMenu</summary> /// <param name="group">Group index contening this element.</param> /// <param name="autoName">[Optional] Helper to name the label as the enum entry given. Alternatively, use displayedName.</param> /// <param name="displayedName">[Optional] Displayed name to use as label. If given, it override autoname.</param> /// <param name="tooltip">[Optional] tooltip to use in inspector.</param> /// <param name="type">[Optional] Requested display for this entry.</param> /// <param name="targetType">[Requested for Enum] Allow to map boolean value to named enum.</param> /// <param name="positiveDependencies">[Optional] Dependencies that must be activated in order to appear activable in Inspector. Indentation is deduced frm this information.</param> /// <param name="customOrderInGroup">[Optional] If order is not the same than the order of value in the FrameSettingsField enum, you can ask to rewrite order from this element. /// Could be asked to use this on another element too to have correct ordering amongst everything. /// (Exemple if the 2nd element must be showed at position 10, add this property with value 10 to in and this parameter with value 3 to the following one (the 3rd).</param> public FrameSettingsFieldAttribute(int group, FrameSettingsField autoName = FrameSettingsField.None, string displayedName = null, string tooltip = null, DisplayType type = DisplayType.BoolAsCheckbox, Type targetType = null, FrameSettingsField[] positiveDependencies = null, FrameSettingsField[] negativeDependencies = null, int customOrderInGroup = -1) { if (string.IsNullOrEmpty(displayedName)) { displayedName = autoName.ToString().CamelToPascalCaseWithSpace(); } // Editor and Runtime debug menu this.group = group; if (customOrderInGroup != -1) { autoOrder = customOrderInGroup; //start again numbering from this value } this.orderInGroup = autoOrder++; this.displayedName = displayedName; this.type = type; this.targetType = targetType; dependencySeparator = positiveDependencies?.Length ?? 0; dependencies = new FrameSettingsField[dependencySeparator + (negativeDependencies?.Length ?? 0)]; positiveDependencies?.CopyTo(dependencies, 0); negativeDependencies?.CopyTo(dependencies, dependencySeparator); indentLevel = dependencies?.Length ?? 0; #if UNITY_EDITOR // Editor only this.tooltip = tooltip; #endif }
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 Type RetrieveEnumTypeByField(FrameSettingsField field) { switch (field) { case FrameSettingsField.LitShaderMode: return(typeof(LitShaderMode)); default: throw new ArgumentException("Unknow enum type for this field"); } }
static bool EvaluateBoolWithOverride(FrameSettingsField field, Field forField, FrameSettings defaultFrameSettings, SerializedFrameSettings serializedFrameSettings, bool negative) { bool value; if (serializedFrameSettings.GetOverrides(field)) { value = serializedFrameSettings.IsEnabled(field) ?? false; } else { value = defaultFrameSettings.IsEnabled(field); } return(value ^ negative); }
// deactivate this test for template package making issue //[Test] public void FrameSettingsAggregation() { for (int i = 0; i < 10; ++i) { //init FrameSettings fs = default; FrameSettingsOverrideMask fso = default; FrameSettingsRenderType defaultFSType = RandomUtilities.RandomEnumValue <FrameSettingsRenderType>(i); FrameSettings defaultFS; FrameSettings result = FrameSettings.NewDefaultCamera(); FrameSettings tester = default; RenderPipelineSettings supportedFeatures = new RenderPipelineSettings(); switch (defaultFSType) { case FrameSettingsRenderType.Camera: defaultFS = FrameSettings.NewDefaultCamera(); break; case FrameSettingsRenderType.CustomOrBakedReflection: defaultFS = FrameSettings.NewDefaultCustomOrBakeReflectionProbe(); break; case FrameSettingsRenderType.RealtimeReflection: defaultFS = FrameSettings.NewDefaultRealtimeReflectionProbe(); break; default: throw new ArgumentException("Unknown FrameSettingsRenderType"); } //change randomly override values for (int j = 0; j < 10; ++j) { FrameSettingsField field = RandomUtilities.RandomEnumValue <FrameSettingsField>((i + 0.5f) * (j + 0.3f)); fs.SetEnabled(field, RandomUtilities.RandomBool((i + 1) * j)); fso.mask[(uint)field] = true; } //create and init gameobjects var go = new GameObject("TestObject"); m_ToClean = go; var cam = go.AddComponent <Camera>(); var add = cam.GetComponent <HDAdditionalCameraData>() ?? cam.gameObject.AddComponent <HDAdditionalCameraData>(); Assert.True(add != null && !add.Equals(null)); add.renderingPathCustomFrameSettings = fs; add.renderingPathCustomFrameSettingsOverrideMask = fso; add.defaultFrameSettings = defaultFSType; add.customRenderingSettings = true; //gather data two different ways FrameSettings.AggregateFrameSettings(ref result, cam, add, ref defaultFS, supportedFeatures); foreach (FrameSettingsField field in Enum.GetValues(typeof(FrameSettingsField))) { tester.SetEnabled(field, fso.mask[(uint)field] ? fs.IsEnabled(field) : defaultFS.IsEnabled(field)); } tester.lodBias = result.lodBias; tester.lodBiasMode = result.lodBiasMode; tester.maximumLODLevel = result.maximumLODLevel; tester.maximumLODLevelMode = result.maximumLODLevelMode; FrameSettings.Sanitize(ref tester, cam, supportedFeatures); //test Assert.AreEqual(result, tester); Object.DestroyImmediate(go); } }
static DebugUI.HistoryEnumField GenerateHistoryEnumField(HDRenderPipelineAsset defaultHdrpAsset, ref FrameSettingsHistory frameSettings, FrameSettingsField field, FrameSettingsFieldAttribute attribute, Type autoEnum) { Camera camera = frameSettings.camera; var renderType = frameSettings.defaultType; string displayIndent = ""; for (int indent = 0; indent < attribute.indentLevel; ++indent) { displayIndent += " "; } return(new DebugUI.HistoryEnumField { displayName = displayIndent + attribute.displayedName, getter = () => frameSettingsHistory[camera].debug.IsEnabled(field) ? 1 : 0, setter = value => { var tmp = frameSettingsHistory[camera]; //indexer with struct will create a copy tmp.debug.SetEnabled(field, value == 1); frameSettingsHistory[camera] = tmp; }, autoEnum = autoEnum, // Contrarily to other enum of DebugMenu, we do not need to stock index as // it can be computed again with data in the dedicated debug section of history getIndex = () => frameSettingsHistory[camera].debug.IsEnabled(field) ? 1 : 0, setIndex = (int a) => { }, historyIndexGetter = new Func <int>[] { () => frameSettingsHistory[camera].sanitazed.IsEnabled(field) ? 1 : 0, () => frameSettingsHistory[camera].overridden.IsEnabled(field) ? 1 : 0, () => defaultHdrpAsset.GetDefaultFrameSettings(renderType).IsEnabled(field) ? 1 : 0 } }); }
static DebugUI.HistoryBoolField GenerateHistoryBoolField(HDRenderPipelineAsset defaultHdrpAsset, ref FrameSettingsHistory frameSettings, FrameSettingsField field, FrameSettingsFieldAttribute attribute) { Camera camera = frameSettings.camera; var renderType = frameSettings.defaultType; string displayIndent = ""; for (int indent = 0; indent < attribute.indentLevel; ++indent) { displayIndent += " "; } return(new DebugUI.HistoryBoolField { displayName = displayIndent + attribute.displayedName, getter = () => frameSettingsHistory[camera].debug.IsEnabled(field), setter = value => { var tmp = frameSettingsHistory[camera]; //indexer with struct will create a copy tmp.debug.SetEnabled(field, value); frameSettingsHistory[camera] = tmp; }, historyGetter = new Func <bool>[] { () => frameSettingsHistory[camera].sanitazed.IsEnabled(field), () => frameSettingsHistory[camera].overridden.IsEnabled(field), () => defaultHdrpAsset.GetDefaultFrameSettings(renderType).IsEnabled(field) } }); }
public bool IsNegativeDependency(FrameSettingsField frameSettingsField) => Array.FindIndex(dependencies, fsf => fsf == frameSettingsField) >= dependencySeparator;
/// <summary>Add an overrideable field to be draw when Draw(bool) will be called.</summary> /// <param name="serializedFrameSettings">The overrideable property to draw in inspector</param> /// <param name="field">The field drawn</param> /// <param name="overrideable">The enabler will be used to check if this field could be overrided. If null or have a return value at true, it will be overrided.</param> /// <param name="overridedDefaultValue">The value to display when the property is not overrided. If null, use the actual value of it.</param> /// <param name="indent">Add this value number of indent when drawing this field.</param> void Add(FrameSettingsField field, Func <bool> overrideable = null, Func <object> customGetter = null, Action <object> customSetter = null, object overridedDefaultValue = null) => fields.Add(new Field { field = field, overrideable = overrideable, overridedDefaultValue = overridedDefaultValue, customGetter = customGetter, customSetter = customSetter });