Skip to content

Commit

Permalink
Add edit all presets menu
Browse files Browse the repository at this point in the history
  • Loading branch information
JasonMa0012 committed Mar 15, 2024
1 parent d3f274d commit e87738e
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 23 deletions.
32 changes: 19 additions & 13 deletions Editor/Helper/Helper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -776,22 +776,25 @@ public static bool DrawSearchField(Rect rect, LWGUIMetaDatas metaDatas)

#region Context Menu

private static void EditPresetEvent(string mode, ShaderPropertyPreset presetAsset, ShaderPropertyPreset.Preset activePreset, MaterialProperty prop, LWGUIMetaDatas metaDatas)
private static void EditPresetEvent(string mode, ShaderPropertyPreset presetAsset, List<ShaderPropertyPreset.Preset> targetPresets, MaterialProperty prop, LWGUIMetaDatas metaDatas)
{
if (!VersionControlHelper.Checkout(presetAsset))
{
Debug.LogError("Can not edit the preset: " + presetAsset);
return;
}
switch (mode)
foreach (var targetPreset in targetPresets)
{
case "Add":
case "Update":
activePreset.AddOrUpdateIncludeExtraProperties(metaDatas, prop);
break;
case "Remove":
activePreset.RemoveIncludeExtraProperties(metaDatas, prop.name);
break;
switch (mode)
{
case "Add":
case "Update":
targetPreset.AddOrUpdateIncludeExtraProperties(metaDatas, prop);
break;
case "Remove":
targetPreset.RemoveIncludeExtraProperties(metaDatas, prop.name);
break;
}
}
EditorUtility.SetDirty(presetAsset);
MetaDataHelper.ForceUpdateMaterialMetadataCache(metaDatas.GetMaterial());
Expand Down Expand Up @@ -930,7 +933,7 @@ public static void DoPropertyContextMenus(Rect rect, MaterialProperty prop, LWGU
if (GUI.enabled)
{
menus.AddSeparator("");
foreach (var activePresetData in perMaterialData.activePresets)
foreach (var activePresetData in perMaterialData.activePresetDatas)
{
if (activePresetData.property == prop) continue;

Expand All @@ -940,12 +943,15 @@ public static void DoPropertyContextMenus(Rect rect, MaterialProperty prop, LWGU

if (activePreset.GetPropertyValue(prop.name) != null)
{
menus.AddItem(new GUIContent("Update to Preset/" + presetPropDisplayName + "/" + activePreset.presetName), false, () => EditPresetEvent("Update", presetAsset, activePreset, prop, metaDatas));
menus.AddItem(new GUIContent("Remove from Preset/" + presetPropDisplayName + "/" + activePreset.presetName), false, () => EditPresetEvent("Remove", presetAsset, activePreset, prop, metaDatas));
menus.AddItem(new GUIContent("Update to Preset/" + presetPropDisplayName + "/" + "All"), false, () => EditPresetEvent("Update", presetAsset, presetAsset.presets, prop, metaDatas));
menus.AddItem(new GUIContent("Update to Preset/" + presetPropDisplayName + "/" + activePreset.presetName), false, () => EditPresetEvent("Update", presetAsset, new List<ShaderPropertyPreset.Preset>(){activePreset}, prop, metaDatas));
menus.AddItem(new GUIContent("Remove from Preset/" + presetPropDisplayName + "/" + "All"), false, () => EditPresetEvent("Remove", presetAsset, presetAsset.presets, prop, metaDatas));
menus.AddItem(new GUIContent("Remove from Preset/" + presetPropDisplayName + "/" + activePreset.presetName), false, () => EditPresetEvent("Remove", presetAsset, new List<ShaderPropertyPreset.Preset>(){activePreset}, prop, metaDatas));
}
else
{
menus.AddItem(new GUIContent("Add to Preset/" + presetPropDisplayName + "/" + activePreset.presetName), false, () => EditPresetEvent("Add", presetAsset, activePreset, prop, metaDatas));
menus.AddItem(new GUIContent("Add to Preset/" + presetPropDisplayName + "/" + "All"), false, () => EditPresetEvent("Add", presetAsset, presetAsset.presets, prop, metaDatas));
menus.AddItem(new GUIContent("Add to Preset/" + presetPropDisplayName + "/" + activePreset.presetName), false, () => EditPresetEvent("Add", presetAsset, new List<ShaderPropertyPreset.Preset>(){activePreset}, prop, metaDatas));
}
}
}
Expand Down
20 changes: 10 additions & 10 deletions Editor/MetaData/PerMaterialData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ public class PropertyDynamicData
/// </summary>
public class PerMaterialData
{
public Dictionary<string, PropertyDynamicData> propDynamicDatas = new Dictionary<string, PropertyDynamicData>();
public MaterialProperty[] props = null;
public Material material = null;
public List<PersetDynamicData> activePresets = new List<PersetDynamicData>();
public int modifiedCount = 0;
public bool forceUpdate = true;
public Dictionary<string, PropertyDynamicData> propDynamicDatas = new Dictionary<string, PropertyDynamicData>();
public MaterialProperty[] props = null;
public Material material = null;
public List<PersetDynamicData> activePresetDatas = new List<PersetDynamicData>();
public int modifiedCount = 0;
public bool forceUpdate = true;

public PerMaterialData(Shader shader, Material material, MaterialProperty[] props, PerShaderData perShaderData)
{
Expand All @@ -58,7 +58,7 @@ public void Update(Shader shader, Material material, MaterialProperty[] props, P
// Reset Datas
this.props = props;
this.material = material;
activePresets.Clear();
activePresetDatas.Clear();
propDynamicDatas.Clear();
modifiedCount = 0;
forceUpdate = false;
Expand All @@ -67,7 +67,7 @@ public void Update(Shader shader, Material material, MaterialProperty[] props, P
foreach (var prop in props)
{
var activePreset = perShaderData.propStaticDatas[prop.name].presetDrawer?.GetActivePreset(prop, perShaderData.propStaticDatas[prop.name].propertyPresetAsset);
if (activePreset != null) activePresets.Add(new PersetDynamicData(activePreset, prop));
if (activePreset != null) activePresetDatas.Add(new PersetDynamicData(activePreset, prop));
}

{
Expand All @@ -79,8 +79,8 @@ public void Update(Shader shader, Material material, MaterialProperty[] props, P
perShaderData.defaultMaterial
);

foreach (var activePreset in activePresets)
activePreset.preset.ApplyToDefaultMaterial(defaultMaterial);
foreach (var activePresetData in activePresetDatas)
activePresetData.preset.ApplyToDefaultMaterial(defaultMaterial);

var defaultProperties = MaterialEditor.GetMaterialProperties(new[] { defaultMaterial });
Debug.Assert(defaultProperties.Length == props.Length);
Expand Down

0 comments on commit e87738e

Please sign in to comment.