diff --git a/Source/Editor/Windows/Assets/MaterialInstanceWindow.cs b/Source/Editor/Windows/Assets/MaterialInstanceWindow.cs
index ac1b9dc09..55ee8a4f3 100644
--- a/Source/Editor/Windows/Assets/MaterialInstanceWindow.cs
+++ b/Source/Editor/Windows/Assets/MaterialInstanceWindow.cs
@@ -218,6 +218,8 @@ namespace FlaxEditor.Windows.Assets
///
public class ParametersEditor : GenericEditor
{
+ private SurfaceUtils.GraphParameterData[] _graphParameters;
+
///
public override void Initialize(LayoutElementsContainer layout)
{
@@ -240,6 +242,21 @@ namespace FlaxEditor.Windows.Assets
if (parameters.Length == 0)
return;
+
+ // Utility buttons
+ {
+ var buttons = layout.CustomContainer();
+ var gridControl = buttons.CustomControl;
+ gridControl.ClipChildren = false;
+ gridControl.Height = Button.DefaultHeight;
+ gridControl.SlotsHorizontally = 2;
+ gridControl.SlotsVertically = 1;
+ var rebuildButton = buttons.Button("Remove overrides", "Unchecks all overrides for parameters.").Button;
+ rebuildButton.Clicked += OnRemoveOverrides;
+ var removeButton = buttons.Button("Override all", "Checks all parameters overrides.").Button;
+ removeButton.Clicked += OnOverrideAll;
+ }
+
var parametersGroup = layout.Group("Parameters");
var baseMaterial = materialInstance.BaseMaterial;
var material = baseMaterial;
@@ -249,8 +266,8 @@ namespace FlaxEditor.Windows.Assets
material = instance.BaseMaterial;
}
- var data = SurfaceUtils.InitGraphParameters(parameters, (Material)material);
- SurfaceUtils.DisplayGraphParameters(parametersGroup, data,
+ _graphParameters = SurfaceUtils.InitGraphParameters(parameters, (Material)material);
+ SurfaceUtils.DisplayGraphParameters(parametersGroup, _graphParameters,
(instance, parameter, tag) =>
{
// Get material parameter
@@ -302,6 +319,38 @@ namespace FlaxEditor.Windows.Assets
itemLayout.Property(label, valueContainer, null, e.Tooltip?.Text);
});
}
+
+ private void OnRemoveOverrides()
+ {
+ OnSetOverrides(false);
+ }
+
+ private void OnOverrideAll()
+ {
+ OnSetOverrides(true);
+ }
+
+ private void OnSetOverrides(bool isOverride)
+ {
+ var proxy = (PropertiesProxy)Values[0];
+ var undoActions = new List();
+ foreach (var graphParameter in _graphParameters)
+ {
+ var p = (MaterialParameter)graphParameter.Tag;
+ if (!p.IsPublic || p.IsOverride == isOverride)
+ continue;
+ p.IsOverride = isOverride;
+ undoActions.Add(new EditParamOverrideAction
+ {
+ Window = proxy.Window,
+ Name = p.Name,
+ Before = !isOverride,
+ });
+ }
+ proxy.Window._undo.AddAction(new MultiUndoAction(undoActions));
+ proxy.Window.MarkAsEdited();
+ Presenter.BuildLayoutOnUpdate();
+ }
}
private readonly SplitPanel _split;