Fix customize check to use correct gender/clan.

This commit is contained in:
Ottermandias 2024-02-12 19:59:41 +01:00
parent 488bea0e78
commit c40853e5b2
5 changed files with 16 additions and 12 deletions

View file

@ -264,7 +264,7 @@ public sealed class AutoDesignApplier : IDisposable
var mergedDesign = _designMerger.Merge( 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)]), 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)); _state.ApplyDesign(state, mergedDesign, new ApplySettings(0, StateSource.Fixed, respectManual, fromJobChange, false));
} }

View file

@ -92,15 +92,13 @@ public class DesignBase
internal MetaFlag ApplyMeta = MetaFlag.HatState | MetaFlag.VisorState | MetaFlag.WeaponState; internal MetaFlag ApplyMeta = MetaFlag.HatState | MetaFlag.VisorState | MetaFlag.WeaponState;
private bool _writeProtected; 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)) if (customize.Equals(_designData.Customize))
return false; 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; _designData.Customize = customize;
CustomizeSet = set; CustomizeSet = customizeService.Manager.GetSet(customize.Clan, customize.Gender);
return true; return true;
} }

View file

@ -5,6 +5,7 @@ using Glamourer.State;
using Glamourer.Unlocks; using Glamourer.Unlocks;
using OtterGui.Services; using OtterGui.Services;
using Penumbra.GameData.Enums; using Penumbra.GameData.Enums;
using Penumbra.GameData.Structs;
namespace Glamourer.Designs.Links; namespace Glamourer.Designs.Links;
@ -15,13 +16,14 @@ public class DesignMerger(
ItemUnlockManager _itemUnlocks, ItemUnlockManager _itemUnlocks,
CustomizeUnlockManager _customizeUnlocks) : IService CustomizeUnlockManager _customizeUnlocks) : IService
{ {
public MergedDesign Merge(LinkContainer designs, in DesignData baseRef, bool respectOwnership, bool 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)), baseRef, respectOwnership, 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) bool modAssociations)
{ {
var ret = new MergedDesign(designManager); var ret = new MergedDesign(designManager);
ret.Design.SetCustomize(_customize, currentCustomize);
CustomizeFlag fixFlags = 0; CustomizeFlag fixFlags = 0;
respectOwnership &= _config.UnlockedItemMode; respectOwnership &= _config.UnlockedItemMode;
foreach (var (design, type) in designs) 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) private static void ReduceMeta(in DesignData design, MetaFlag applyMeta, MergedDesign ret, StateSource source)
{ {
applyMeta &= ~ret.Design.ApplyMeta; applyMeta &= ~ret.Design.ApplyMeta;
if (applyMeta == 0)
return;
foreach (var index in MetaExtensions.AllRelevant) foreach (var index in MetaExtensions.AllRelevant)
{ {
@ -227,7 +231,7 @@ public class DesignMerger(
ret.Sources[CustomizeIndex.Face] = source; 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; var face = customize.Face;
foreach (var index in Enum.GetValues<CustomizeIndex>()) foreach (var index in Enum.GetValues<CustomizeIndex>())
{ {
@ -248,7 +252,7 @@ public class DesignMerger(
fixFlags &= ~flag; fixFlags &= ~flag;
} }
ret.Design.SetCustomize(_customize, customize, set); ret.Design.SetCustomize(_customize, customize);
} }
private static void ApplyFixFlags(MergedDesign ret, CustomizeFlag fixFlags) private static void ApplyFixFlags(MergedDesign ret, CustomizeFlag fixFlags)

View file

@ -78,6 +78,8 @@ public class DesignConverterPanel(DesignConverter _designConverter) : IGameDataD
{ {
using var f = ImRaii.PushFont(UiBuilder.MonoFont); using var f = ImRaii.PushFont(UiBuilder.MonoFont);
ImGuiUtil.TextWrapped(_textUncompressed); ImGuiUtil.TextWrapped(_textUncompressed);
if (ImGui.IsItemClicked())
ImGui.SetClipboardText(_textUncompressed);
} }
if (_json != null) if (_json != null)

View file

@ -321,7 +321,7 @@ public class StateEditor(
public void ApplyDesign(object data, DesignBase design, ApplySettings settings) public void ApplyDesign(object data, DesignBase design, ApplySettings settings)
{ {
var merged = settings.MergeLinks && design is Design d 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); : new MergedDesign(design);
ApplyDesign(data, merged, settings with ApplyDesign(data, merged, settings with