diff --git a/Glamourer/Designs/DesignManager.cs b/Glamourer/Designs/DesignManager.cs
index f931489..f9429ad 100644
--- a/Glamourer/Designs/DesignManager.cs
+++ b/Glamourer/Designs/DesignManager.cs
@@ -3,6 +3,7 @@ using Glamourer.Designs.History;
using Glamourer.Designs.Links;
using Glamourer.Events;
using Glamourer.GameData;
+using Glamourer.Interop.Material;
using Glamourer.Interop.Penumbra;
using Glamourer.Services;
using Newtonsoft.Json;
@@ -448,6 +449,39 @@ public sealed class DesignManager : DesignEditor
DesignChanged.Invoke(DesignChanged.Type.ApplyParameter, design, new ApplicationTransaction(flag, !value, value));
}
+ /// Change multiple application values at once.
+ public void ChangeApplyMulti(Design design, bool? equipment, bool? customization, bool? bonus, bool? parameters, bool? meta, bool? stains,
+ bool? materials, bool? crest)
+ {
+ if (equipment is { } e)
+ foreach (var f in EquipSlotExtensions.FullSlots)
+ ChangeApplyItem(design, f, e);
+ if (stains is { } s)
+ foreach (var f in EquipSlotExtensions.FullSlots)
+ ChangeApplyStains(design, f, s);
+ if (customization is { } c)
+ foreach (var f in CustomizationExtensions.All.Where(design.CustomizeSet.IsAvailable).Prepend(CustomizeIndex.Clan)
+ .Prepend(CustomizeIndex.Gender))
+ ChangeApplyCustomize(design, f, c);
+ if (bonus is { } b)
+ foreach (var f in BonusExtensions.AllFlags)
+ ChangeApplyBonusItem(design, f, b);
+ if (meta is { } m)
+ foreach (var f in MetaExtensions.AllRelevant)
+ ChangeApplyMeta(design, f, m);
+ if (crest is { } cr)
+ foreach (var f in CrestExtensions.AllRelevantSet)
+ ChangeApplyCrest(design, f, cr);
+
+ if (parameters is { } p)
+ foreach (var f in CustomizeParameterExtensions.AllFlags)
+ ChangeApplyParameter(design, f, p);
+
+ if (materials is { } ma)
+ foreach (var (key, _) in design.GetMaterialData())
+ ChangeApplyMaterialValue(design, MaterialValueIndex.FromKey(key), ma);
+ }
+
#endregion
public void UndoDesignChange(Design design)
diff --git a/Glamourer/Gui/Materials/MaterialDrawer.cs b/Glamourer/Gui/Materials/MaterialDrawer.cs
index 1b5e65a..5b3af31 100644
--- a/Glamourer/Gui/Materials/MaterialDrawer.cs
+++ b/Glamourer/Gui/Materials/MaterialDrawer.cs
@@ -44,7 +44,7 @@ public class MaterialDrawer(DesignManager _designManager, Configuration _config)
private void DrawName(MaterialValueIndex index)
{
- using var style = ImRaii.PushStyle(ImGuiStyleVar.ButtonTextAlign, new Vector2(0, 0.5f));
+ using var style = ImRaii.PushStyle(ImGuiStyleVar.ButtonTextAlign, new Vector2(0.05f, 0.5f));
ImUtf8.TextFramed(index.ToString(), 0, new Vector2((GlossWidth + SpecularStrengthWidth) * ImGuiHelpers.GlobalScale + _spacing, 0),
borderColor: ImGui.GetColorU32(ImGuiCol.Text));
}
diff --git a/Glamourer/Gui/Tabs/DesignTab/DesignPanel.cs b/Glamourer/Gui/Tabs/DesignTab/DesignPanel.cs
index f576223..caea8fe 100644
--- a/Glamourer/Gui/Tabs/DesignTab/DesignPanel.cs
+++ b/Glamourer/Gui/Tabs/DesignTab/DesignPanel.cs
@@ -254,6 +254,8 @@ public class DesignPanel
using var disabled = ImRaii.Disabled(_selector.Selected!.WriteProtected());
+ DrawAllButtons();
+
using (var _ = ImUtf8.Group())
{
DrawCustomizeApplication();
@@ -310,6 +312,88 @@ public class DesignPanel
}
}
+ private void DrawAllButtons()
+ {
+ var enabled = _config.DeleteDesignModifier.IsActive();
+ bool? equip = null;
+ bool? customize = null;
+ var size = new Vector2(200 * ImUtf8.GlobalScale, 0);
+ if (ImUtf8.ButtonEx("Disable Everything"u8,
+ "Disable application of everything, including any existing advanced dyes, advanced customizations, crests and wetness."u8, size,
+ !enabled))
+ {
+ equip = false;
+ customize = false;
+ }
+
+ if (!enabled)
+ ImUtf8.HoverTooltip(ImGuiHoveredFlags.AllowWhenDisabled, $"Hold {_config.DeleteDesignModifier} while clicking.");
+
+ ImGui.SameLine();
+ if (ImUtf8.ButtonEx("Enable Everything"u8,
+ "Enable application of everything, including any existing advanced dyes, advanced customizations, crests and wetness."u8, size,
+ !enabled))
+ {
+ equip = true;
+ customize = true;
+ }
+
+ if (!enabled)
+ ImUtf8.HoverTooltip(ImGuiHoveredFlags.AllowWhenDisabled, $"Hold {_config.DeleteDesignModifier} while clicking.");
+
+ if (ImUtf8.ButtonEx("Equipment Only"u8,
+ "Enable application of anything related to gear, disable anything that is not related to gear."u8, size,
+ !enabled))
+ {
+ equip = true;
+ customize = false;
+ }
+
+ if (!enabled)
+ ImUtf8.HoverTooltip(ImGuiHoveredFlags.AllowWhenDisabled, $"Hold {_config.DeleteDesignModifier} while clicking.");
+
+ ImGui.SameLine();
+ if (ImUtf8.ButtonEx("Customization Only"u8,
+ "Enable application of anything related to customization, disable anything that is not related to customization."u8, size,
+ !enabled))
+ {
+ equip = false;
+ customize = true;
+ }
+
+ if (ImUtf8.ButtonEx("Default Application"u8,
+ "Set the application rules to the default values as if the design was newly created, without any advanced features or wetness."u8,
+ size,
+ !enabled))
+ {
+ _manager.ChangeApplyMulti(_selector.Selected!, true, true, true, false, true, true, false, true);
+ _manager.ChangeApplyMeta(_selector.Selected!, MetaIndex.Wetness, false);
+ }
+
+ ImGui.SameLine();
+ if (ImUtf8.ButtonEx("Disable Advanced"u8, "Disable all advanced dyes and customizations but keep everything else as is."u8,
+ size,
+ !enabled))
+ _manager.ChangeApplyMulti(_selector.Selected!, null, null, null, false, null, null, false, null);
+
+ if (!enabled)
+ ImUtf8.HoverTooltip(ImGuiHoveredFlags.AllowWhenDisabled, $"Hold {_config.DeleteDesignModifier} while clicking.");
+
+ if (equip is null && customize is null)
+ return;
+
+ _manager.ChangeApplyMulti(_selector.Selected!, equip, customize, equip, customize, null, equip, equip, equip);
+ if (equip.HasValue)
+ {
+ _manager.ChangeApplyMeta(_selector.Selected!, MetaIndex.HatState, equip.Value);
+ _manager.ChangeApplyMeta(_selector.Selected!, MetaIndex.VisorState, equip.Value);
+ _manager.ChangeApplyMeta(_selector.Selected!, MetaIndex.WeaponState, equip.Value);
+ }
+
+ if (customize.HasValue)
+ _manager.ChangeApplyMeta(_selector.Selected!, MetaIndex.Wetness, customize.Value);
+ }
+
private static readonly IReadOnlyList MetaLabels =
[
"Apply Wetness",