From 90d4a062531ba13411e53aead898e96c35b2e563 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Mon, 11 Sep 2023 16:43:28 +0200 Subject: [PATCH] Add All Dye box. --- Glamourer/Gui/Equipment/EquipmentDrawer.cs | 31 +++++++++++++++++++-- Glamourer/Gui/Tabs/ActorTab/ActorPanel.cs | 14 ++++++++++ Glamourer/Gui/Tabs/DesignTab/DesignPanel.cs | 8 ++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/Glamourer/Gui/Equipment/EquipmentDrawer.cs b/Glamourer/Gui/Equipment/EquipmentDrawer.cs index 3c49962..41d8ddd 100644 --- a/Glamourer/Gui/Equipment/EquipmentDrawer.cs +++ b/Glamourer/Gui/Equipment/EquipmentDrawer.cs @@ -254,12 +254,38 @@ public class EquipmentDrawer if (!locked && armor.ModelId.Id != 0) { - ImGuiUtil.HoverTooltip("Right-click to clear."); if (clear || ImGui.IsItemClicked(ImGuiMouseButton.Right)) { change = true; armor = ItemManager.NothingItem(slot); } + + ImGuiUtil.HoverTooltip("Right-click to clear."); + } + + return change; + } + + public bool DrawAllStain(out StainId ret, bool locked) + { + using var disabled = ImRaii.Disabled(locked); + var change = _stainCombo.Draw("Dye All Slots", Stain.None.RgbaColor, string.Empty, false, false); + ret = Stain.None.RowIndex; + if (change) + if (_stainData.TryGetValue(_stainCombo.CurrentSelection.Key, out var stain)) + ret = stain.RowIndex; + else if (_stainCombo.CurrentSelection.Key == Stain.None.RowIndex) + ret = Stain.None.RowIndex; + + if (!locked) + { + if (ImGui.IsItemClicked(ImGuiMouseButton.Right) && _config.DeleteDesignModifier.IsActive()) + { + ret = Stain.None.RowIndex; + change = true; + } + + ImGuiUtil.HoverTooltip($"{_config.DeleteDesignModifier.ToString()} and Right-click to clear."); } return change; @@ -281,12 +307,13 @@ public class EquipmentDrawer if (!locked && ret != Stain.None.RowIndex) { - ImGuiUtil.HoverTooltip("Right-click to clear."); if (ImGui.IsItemClicked(ImGuiMouseButton.Right)) { ret = Stain.None.RowIndex; change = true; } + + ImGuiUtil.HoverTooltip("Right-click to clear."); } return change; diff --git a/Glamourer/Gui/Tabs/ActorTab/ActorPanel.cs b/Glamourer/Gui/Tabs/ActorTab/ActorPanel.cs index 5ad6369..d1db7ac 100644 --- a/Glamourer/Gui/Tabs/ActorTab/ActorPanel.cs +++ b/Glamourer/Gui/Tabs/ActorTab/ActorPanel.cs @@ -148,10 +148,18 @@ public class ActorPanel return; _equipmentDrawer.Prepare(); + + var usedAllStain = _equipmentDrawer.DrawAllStain(out var newAllStain, _state!.IsLocked); foreach (var slot in EquipSlotExtensions.EqdpSlots) { var changes = _equipmentDrawer.DrawEquip(slot, _state!.ModelData, out var newArmor, out var newStain, null, out _, out _, _state.IsLocked); + if (usedAllStain) + { + changes |= DataChange.Stain; + newStain = newAllStain; + } + switch (changes) { case DataChange.Item: @@ -168,6 +176,12 @@ public class ActorPanel var weaponChanges = _equipmentDrawer.DrawWeapons(_state!.ModelData, out var newMainhand, out var newOffhand, out var newMainhandStain, out var newOffhandStain, null, GameMain.IsInGPose(), out _, out _, out _, out _, _state.IsLocked); + if (usedAllStain) + { + weaponChanges |= DataChange.Stain | DataChange.Stain2; + newMainhandStain = newAllStain; + newOffhandStain = newAllStain; + } if (weaponChanges.HasFlag(DataChange.Item)) if (weaponChanges.HasFlag(DataChange.Stain)) diff --git a/Glamourer/Gui/Tabs/DesignTab/DesignPanel.cs b/Glamourer/Gui/Tabs/DesignTab/DesignPanel.cs index 880489b..e2a6484 100644 --- a/Glamourer/Gui/Tabs/DesignTab/DesignPanel.cs +++ b/Glamourer/Gui/Tabs/DesignTab/DesignPanel.cs @@ -105,6 +105,8 @@ public class DesignPanel return; _equipmentDrawer.Prepare(); + + var usedAllStain = _equipmentDrawer.DrawAllStain(out var newAllStain, _selector.Selected!.WriteProtected()); foreach (var slot in EquipSlotExtensions.EqdpSlots) { var changes = _equipmentDrawer.DrawEquip(slot, _selector.Selected!.DesignData, out var newArmor, out var newStain, @@ -113,6 +115,8 @@ public class DesignPanel _manager.ChangeEquip(_selector.Selected, slot, newArmor); if (changes.HasFlag(DataChange.Stain)) _manager.ChangeStain(_selector.Selected, slot, newStain); + else if (usedAllStain) + _manager.ChangeStain(_selector.Selected, slot, newAllStain); if (changes.HasFlag(DataChange.ApplyItem)) _manager.ChangeApplyEquip(_selector.Selected, slot, newApply); if (changes.HasFlag(DataChange.ApplyStain)) @@ -127,6 +131,8 @@ public class DesignPanel _manager.ChangeWeapon(_selector.Selected, EquipSlot.MainHand, newMainhand); if (weaponChanges.HasFlag(DataChange.Stain)) _manager.ChangeStain(_selector.Selected, EquipSlot.MainHand, newMainhandStain); + else if (usedAllStain) + _manager.ChangeStain(_selector.Selected, EquipSlot.MainHand, newAllStain); if (weaponChanges.HasFlag(DataChange.ApplyItem)) _manager.ChangeApplyEquip(_selector.Selected, EquipSlot.MainHand, applyMain); if (weaponChanges.HasFlag(DataChange.ApplyStain)) @@ -135,6 +141,8 @@ public class DesignPanel _manager.ChangeWeapon(_selector.Selected, EquipSlot.OffHand, newOffhand); if (weaponChanges.HasFlag(DataChange.Stain2)) _manager.ChangeStain(_selector.Selected, EquipSlot.OffHand, newOffhandStain); + else if (usedAllStain) + _manager.ChangeStain(_selector.Selected, EquipSlot.OffHand, newAllStain); if (weaponChanges.HasFlag(DataChange.ApplyItem2)) _manager.ChangeApplyEquip(_selector.Selected, EquipSlot.OffHand, applyOff); if (weaponChanges.HasFlag(DataChange.ApplyStain2))