diff --git a/Glamourer/Designs/DesignBase.cs b/Glamourer/Designs/DesignBase.cs index 4910793..86c849e 100644 --- a/Glamourer/Designs/DesignBase.cs +++ b/Glamourer/Designs/DesignBase.cs @@ -92,13 +92,15 @@ public class DesignBase internal MetaFlag ApplyMeta = MetaFlag.HatState | MetaFlag.VisorState | MetaFlag.WeaponState; private bool _writeProtected; - public bool SetCustomize(CustomizeService customizeService, CustomizeArray customize) + public bool SetCustomize(CustomizeService customizeService, CustomizeArray customize, CustomizeSet? set = null) { if (customize.Equals(_designData.Customize)) return false; - _designData.Customize = customize; - CustomizeSet = customizeService.Manager.GetSet(customize.Clan, customize.Gender); + 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; return true; } diff --git a/Glamourer/Designs/DesignConverter.cs b/Glamourer/Designs/DesignConverter.cs index 9b9ebfc..b68afa2 100644 --- a/Glamourer/Designs/DesignConverter.cs +++ b/Glamourer/Designs/DesignConverter.cs @@ -124,7 +124,8 @@ public class DesignConverter( } ret.SetApplyMeta(MetaIndex.Wetness, customize); - ret.ApplyCustomize = customize ? CustomizeFlagExtensions.AllRelevant : 0; + if (!customize) + ret.ApplyCustomize = 0; if (!equip) { diff --git a/Glamourer/Designs/Links/DesignMerger.cs b/Glamourer/Designs/Links/DesignMerger.cs index 438c0f4..4bb51a2 100644 --- a/Glamourer/Designs/Links/DesignMerger.cs +++ b/Glamourer/Designs/Links/DesignMerger.cs @@ -227,7 +227,7 @@ public class DesignMerger( ret.Sources[CustomizeIndex.Face] = source; } - var set = _customize.Manager.GetSet(customize.Clan, customize.Gender); + var set = _customize.Manager.GetSet(ret.Design.DesignData.Customize.Clan, ret.Design.DesignData.Customize.Gender); var face = customize.Face; foreach (var index in Enum.GetValues()) { @@ -248,7 +248,7 @@ public class DesignMerger( fixFlags &= ~flag; } - ret.Design.SetCustomize(_customize, customize); + ret.Design.SetCustomize(_customize, customize, set); } private static void ApplyFixFlags(MergedDesign ret, CustomizeFlag fixFlags) diff --git a/Glamourer/Gui/DesignCombo.cs b/Glamourer/Gui/DesignCombo.cs index f5e3272..d25ce66 100644 --- a/Glamourer/Gui/DesignCombo.cs +++ b/Glamourer/Gui/DesignCombo.cs @@ -24,7 +24,7 @@ public abstract class DesignComboBase : FilterComboCache>, protected DesignComboBase(Func>> generator, Logger log, DesignChanged designChanged, TabSelected tabSelected, EphemeralConfig config, DesignColors designColors) - : base(generator, MouseWheelType.Unmodified, log) + : base(generator, MouseWheelType.Control, log) { _designChanged = designChanged; TabSelected = tabSelected; @@ -169,21 +169,24 @@ public abstract class DesignCombo : DesignComboBase => Draw(Design, (Incognito ? Design?.Incognito : Design?.Name.Text) ?? string.Empty, width); } -public sealed class QuickDesignCombo( - DesignManager designs, - DesignFileSystem fileSystem, - Logger log, - DesignChanged designChanged, - TabSelected tabSelected, - EphemeralConfig config, - DesignColors designColors) - : DesignCombo(log, designChanged, tabSelected, config, designColors, () => - [ - .. designs.Designs - .Where(d => d.QuickDesign) - .Select(d => new Tuple(d, fileSystem.FindLeaf(d, out var l) ? l.FullName() : string.Empty)) - .OrderBy(d => d.Item2), - ]); +public sealed class QuickDesignCombo : DesignCombo +{ + public QuickDesignCombo(DesignManager designs, + DesignFileSystem fileSystem, + Logger log, + DesignChanged designChanged, + TabSelected tabSelected, + EphemeralConfig config, + DesignColors designColors) + : base(log, designChanged, tabSelected, config, designColors, () => + [ + .. designs.Designs + .Where(d => d.QuickDesign) + .Select(d => new Tuple(d, fileSystem.FindLeaf(d, out var l) ? l.FullName() : string.Empty)) + .OrderBy(d => d.Item2), + ]) + => AllowMouseWheel = MouseWheelType.Unmodified; +} public sealed class LinkDesignCombo( DesignManager designs, diff --git a/Glamourer/State/StateEditor.cs b/Glamourer/State/StateEditor.cs index 219feab..d4c9314 100644 --- a/Glamourer/State/StateEditor.cs +++ b/Glamourer/State/StateEditor.cs @@ -277,7 +277,7 @@ public class StateEditor( (m.Item1, settings.UseSingleSource ? settings.Source : m.Item2 is StateSource.Game ? StateSource.Game : m.Item2))); - foreach (var meta in MetaExtensions.AllRelevant) + foreach (var meta in MetaExtensions.AllRelevant.Where(mergedDesign.Design.DoApplyMeta)) { if (!settings.RespectManual || !state.Sources[meta].IsManual()) Editor.ChangeMetaState(state, meta, mergedDesign.Design.DesignData.GetMeta(meta), Source(meta), out _, settings.Key);