Add option to skip or partially apply invalid automatic design customizations.

This commit is contained in:
Ottermandias 2023-07-11 16:15:12 +02:00
parent f8f90124ee
commit 279a5d6923
3 changed files with 19 additions and 14 deletions

View file

@ -143,21 +143,12 @@ public class AutoDesignApplier : IDisposable
return false; return false;
} }
else if (!GetPlayerSet(identifier, out set!)) else if (!GetPlayerSet(identifier, out set!))
return true; {
Reduce(actor, state, set, true);
return true; return true;
} }
public void Reduce(Actor actor, ActorIdentifier identifier, ActorState state)
{
if (!_config.EnableAutoDesigns)
return;
if (!GetPlayerSet(identifier, out var set))
return;
Reduce(actor, state, set, true); Reduce(actor, state, set, true);
return true;
} }
private unsafe void Reduce(Actor actor, ActorState state, AutoDesignSet set, bool respectManual) private unsafe void Reduce(Actor actor, ActorState state, AutoDesignSet set, bool respectManual)
@ -273,6 +264,15 @@ public class AutoDesignApplier : IDisposable
var customize = state.ModelData.Customize; var customize = state.ModelData.Customize;
CustomizeFlag fixFlags = 0; CustomizeFlag fixFlags = 0;
// Skip invalid designs entirely.
if (_config.SkipInvalidCustomizations
&& !_code.EnabledMesmer
&& (customize.Clan != design.Customize.Clan
|| customize.Gender != design.Customize.Gender
|| customize.Face != design.Customize.Face))
return;
if (customizeFlags.HasFlag(CustomizeFlag.Clan)) if (customizeFlags.HasFlag(CustomizeFlag.Clan))
{ {
if (!respectManual || state[CustomizeIndex.Clan] is not StateChanged.Source.Manual) if (!respectManual || state[CustomizeIndex.Clan] is not StateChanged.Source.Manual)
@ -283,6 +283,9 @@ public class AutoDesignApplier : IDisposable
if (customizeFlags.HasFlag(CustomizeFlag.Gender)) if (customizeFlags.HasFlag(CustomizeFlag.Gender))
{ {
if (_config.SkipInvalidCustomizations && customize.Gender != design.Customize.Gender)
return;
if (!respectManual || state[CustomizeIndex.Gender] is not StateChanged.Source.Manual) if (!respectManual || state[CustomizeIndex.Gender] is not StateChanged.Source.Manual)
fixFlags |= _customizations.ChangeGender(ref customize, design.Customize.Gender); fixFlags |= _customizations.ChangeGender(ref customize, design.Customize.Gender);
customizeFlags &= ~CustomizeFlag.Gender; customizeFlags &= ~CustomizeFlag.Gender;

View file

@ -24,6 +24,7 @@ public class Configuration : IPluginConfiguration, ISavable
public bool EnableAutoDesigns { get; set; } = true; public bool EnableAutoDesigns { get; set; } = true;
public bool IncognitoMode { get; set; } = false; public bool IncognitoMode { get; set; } = false;
public bool UnlockDetailMode { get; set; } = true; public bool UnlockDetailMode { get; set; } = true;
public bool SkipInvalidCustomizations { get; set; } = false;
public MainWindow.TabType SelectedTab { get; set; } = MainWindow.TabType.Settings; public MainWindow.TabType SelectedTab { get; set; } = MainWindow.TabType.Settings;
public DoubleModifier DeleteDesignModifier { get; set; } = new(ModifierHotkey.Control, ModifierHotkey.Shift); public DoubleModifier DeleteDesignModifier { get; set; } = new(ModifierHotkey.Control, ModifierHotkey.Shift);

View file

@ -46,6 +46,9 @@ public class SettingsTab : ITab
Checkbox("Enabled", "Enable main functionality of keeping and applying state.", _stateListener.Enabled, _stateListener.Enable); Checkbox("Enabled", "Enable main functionality of keeping and applying state.", _stateListener.Enabled, _stateListener.Enable);
Checkbox("Enable Auto Designs", "Enable the application of designs associated to characters to be applied automatically.", Checkbox("Enable Auto Designs", "Enable the application of designs associated to characters to be applied automatically.",
_config.EnableAutoDesigns, v => _config.EnableAutoDesigns = v); _config.EnableAutoDesigns, v => _config.EnableAutoDesigns = v);
Checkbox("Skip Invalid Customizations",
"Entirely skip customizations for any automatically applied design that does not have the same race, gender or face as the affected character currently has.",
_config.SkipInvalidCustomizations, v => _config.SkipInvalidCustomizations = v);
Checkbox("Restricted Gear Protection", Checkbox("Restricted Gear Protection",
"Use gender- and race-appropriate models when detecting certain items not available for a characters current gender and race.", "Use gender- and race-appropriate models when detecting certain items not available for a characters current gender and race.",
_config.UseRestrictedGearProtection, v => _config.UseRestrictedGearProtection = v); _config.UseRestrictedGearProtection, v => _config.UseRestrictedGearProtection = v);
@ -78,11 +81,9 @@ public class SettingsTab : ITab
var color = _codeService.CheckCode(_currentCode) != null ? ColorId.ActorAvailable : ColorId.ActorUnavailable; var color = _codeService.CheckCode(_currentCode) != null ? ColorId.ActorAvailable : ColorId.ActorUnavailable;
using var c = ImRaii.PushColor(ImGuiCol.Border, color.Value(), _currentCode.Length > 0); using var c = ImRaii.PushColor(ImGuiCol.Border, color.Value(), _currentCode.Length > 0);
if (ImGui.InputTextWithHint("##Code", "Enter Code...", ref _currentCode, 512, ImGuiInputTextFlags.EnterReturnsTrue)) if (ImGui.InputTextWithHint("##Code", "Enter Code...", ref _currentCode, 512, ImGuiInputTextFlags.EnterReturnsTrue))
{
if (_codeService.AddCode(_currentCode)) if (_codeService.AddCode(_currentCode))
_currentCode = string.Empty; _currentCode = string.Empty;
} }
}
if (_config.Codes.Count <= 0) if (_config.Codes.Count <= 0)
return; return;