Ejemplo n.º 1
0
        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
        }
Ejemplo n.º 4
0
            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);
            }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 7
0
        // 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);
            }
        }
Ejemplo n.º 8
0
        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
                }
            });
        }
Ejemplo n.º 9
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;
Ejemplo n.º 11
0
 /// <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
 });