From c40853e5b209e9c1bd12d6e25e0315e26daec0e3 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Mon, 12 Feb 2024 19:59:41 +0100 Subject: [PATCH] Fix customize check to use correct gender/clan. --- Glamourer/Automation/AutoDesignApplier.cs | 2 +- Glamourer/Designs/DesignBase.cs | 8 +++----- Glamourer/Designs/Links/DesignMerger.cs | 14 +++++++++----- .../Gui/Tabs/DebugTab/DesignConverterPanel.cs | 2 ++ Glamourer/State/StateEditor.cs | 2 +- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Glamourer/Automation/AutoDesignApplier.cs b/Glamourer/Automation/AutoDesignApplier.cs index 28e1111..adbd355 100644 --- a/Glamourer/Automation/AutoDesignApplier.cs +++ b/Glamourer/Automation/AutoDesignApplier.cs @@ -264,7 +264,7 @@ public sealed class AutoDesignApplier : IDisposable var mergedDesign = _designMerger.Merge( set.Designs.Where(d => d.IsActive(actor)).SelectMany(d => d.Design?.AllLinks.Select(l => (l.Design, l.Flags & d.Type)) ?? [(d.Design, d.Type)]), - state.BaseData, true, _config.AlwaysApplyAssociatedMods); + state.ModelData.Customize, state.BaseData, true, _config.AlwaysApplyAssociatedMods); _state.ApplyDesign(state, mergedDesign, new ApplySettings(0, StateSource.Fixed, respectManual, fromJobChange, false)); } diff --git a/Glamourer/Designs/DesignBase.cs b/Glamourer/Designs/DesignBase.cs index 86c849e..4910793 100644 --- a/Glamourer/Designs/DesignBase.cs +++ b/Glamourer/Designs/DesignBase.cs @@ -92,15 +92,13 @@ public class DesignBase internal MetaFlag ApplyMeta = MetaFlag.HatState | MetaFlag.VisorState | MetaFlag.WeaponState; private bool _writeProtected; - public bool SetCustomize(CustomizeService customizeService, CustomizeArray customize, CustomizeSet? set = null) + public bool SetCustomize(CustomizeService customizeService, CustomizeArray customize) { if (customize.Equals(_designData.Customize)) return false; - set ??= customizeService.Manager.GetSet(customize.Clan, customize.Gender); - Debug.Assert(set.Clan == customize.Clan && set.Gender == customize.Gender, "Invalid CustomizeSet provided."); - _designData.Customize = customize; - CustomizeSet = set; + _designData.Customize = customize; + CustomizeSet = customizeService.Manager.GetSet(customize.Clan, customize.Gender); return true; } diff --git a/Glamourer/Designs/Links/DesignMerger.cs b/Glamourer/Designs/Links/DesignMerger.cs index 4bb51a2..4b29582 100644 --- a/Glamourer/Designs/Links/DesignMerger.cs +++ b/Glamourer/Designs/Links/DesignMerger.cs @@ -5,6 +5,7 @@ using Glamourer.State; using Glamourer.Unlocks; using OtterGui.Services; using Penumbra.GameData.Enums; +using Penumbra.GameData.Structs; namespace Glamourer.Designs.Links; @@ -15,13 +16,14 @@ public class DesignMerger( ItemUnlockManager _itemUnlocks, CustomizeUnlockManager _customizeUnlocks) : IService { - public MergedDesign Merge(LinkContainer designs, in DesignData baseRef, bool respectOwnership, bool modAssociations) - => Merge(designs.Select(d => ((DesignBase?) d.Link, d.Type)), baseRef, respectOwnership, modAssociations); + public MergedDesign Merge(LinkContainer designs, in CustomizeArray currentCustomize, in DesignData baseRef, bool respectOwnership, bool modAssociations) + => Merge(designs.Select(d => ((DesignBase?) d.Link, d.Type)), currentCustomize, baseRef, respectOwnership, modAssociations); - public MergedDesign Merge(IEnumerable<(DesignBase?, ApplicationType)> designs, in DesignData baseRef, bool respectOwnership, + public MergedDesign Merge(IEnumerable<(DesignBase?, ApplicationType)> designs, in CustomizeArray currentCustomize, in DesignData baseRef, bool respectOwnership, bool modAssociations) { var ret = new MergedDesign(designManager); + ret.Design.SetCustomize(_customize, currentCustomize); CustomizeFlag fixFlags = 0; respectOwnership &= _config.UnlockedItemMode; foreach (var (design, type) in designs) @@ -63,6 +65,8 @@ public class DesignMerger( private static void ReduceMeta(in DesignData design, MetaFlag applyMeta, MergedDesign ret, StateSource source) { applyMeta &= ~ret.Design.ApplyMeta; + if (applyMeta == 0) + return; foreach (var index in MetaExtensions.AllRelevant) { @@ -227,7 +231,7 @@ public class DesignMerger( ret.Sources[CustomizeIndex.Face] = source; } - var set = _customize.Manager.GetSet(ret.Design.DesignData.Customize.Clan, ret.Design.DesignData.Customize.Gender); + var set = _customize.Manager.GetSet(customize.Clan, customize.Gender); var face = customize.Face; foreach (var index in Enum.GetValues()) { @@ -248,7 +252,7 @@ public class DesignMerger( fixFlags &= ~flag; } - ret.Design.SetCustomize(_customize, customize, set); + ret.Design.SetCustomize(_customize, customize); } private static void ApplyFixFlags(MergedDesign ret, CustomizeFlag fixFlags) diff --git a/Glamourer/Gui/Tabs/DebugTab/DesignConverterPanel.cs b/Glamourer/Gui/Tabs/DebugTab/DesignConverterPanel.cs index 042dfd3..2345abc 100644 --- a/Glamourer/Gui/Tabs/DebugTab/DesignConverterPanel.cs +++ b/Glamourer/Gui/Tabs/DebugTab/DesignConverterPanel.cs @@ -78,6 +78,8 @@ public class DesignConverterPanel(DesignConverter _designConverter) : IGameDataD { using var f = ImRaii.PushFont(UiBuilder.MonoFont); ImGuiUtil.TextWrapped(_textUncompressed); + if (ImGui.IsItemClicked()) + ImGui.SetClipboardText(_textUncompressed); } if (_json != null) diff --git a/Glamourer/State/StateEditor.cs b/Glamourer/State/StateEditor.cs index d4c9314..3705d86 100644 --- a/Glamourer/State/StateEditor.cs +++ b/Glamourer/State/StateEditor.cs @@ -321,7 +321,7 @@ public class StateEditor( public void ApplyDesign(object data, DesignBase design, ApplySettings settings) { var merged = settings.MergeLinks && design is Design d - ? merger.Merge(d.AllLinks, ((ActorState)data).BaseData, false, Config.AlwaysApplyAssociatedMods) + ? merger.Merge(d.AllLinks, ((ActorState)data).ModelData.Customize, ((ActorState)data).BaseData, false, Config.AlwaysApplyAssociatedMods) : new MergedDesign(design); ApplyDesign(data, merged, settings with