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

@ -102,7 +102,7 @@ public class AutoDesignApplier : IDisposable
if (!GetPlayerSet(id, out var set))
{
if (_state.TryGetValue(id, out var s))
s.LastJob = (byte) newJob.Id;
s.LastJob = (byte)newJob.Id;
return;
}
@ -143,23 +143,14 @@ public class AutoDesignApplier : IDisposable
return false;
}
else if (!GetPlayerSet(identifier, out set!))
{
return true;
}
Reduce(actor, state, set, 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);
}
private unsafe void Reduce(Actor actor, ActorState state, AutoDesignSet set, bool respectManual)
{
EquipFlag totalEquipFlags = 0;
@ -273,6 +264,15 @@ public class AutoDesignApplier : IDisposable
var customize = state.ModelData.Customize;
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 (!respectManual || state[CustomizeIndex.Clan] is not StateChanged.Source.Manual)
@ -283,6 +283,9 @@ public class AutoDesignApplier : IDisposable
if (customizeFlags.HasFlag(CustomizeFlag.Gender))
{
if (_config.SkipInvalidCustomizations && customize.Gender != design.Customize.Gender)
return;
if (!respectManual || state[CustomizeIndex.Gender] is not StateChanged.Source.Manual)
fixFlags |= _customizations.ChangeGender(ref customize, design.Customize.Gender);
customizeFlags &= ~CustomizeFlag.Gender;

View file

@ -24,6 +24,7 @@ public class Configuration : IPluginConfiguration, ISavable
public bool EnableAutoDesigns { get; set; } = true;
public bool IncognitoMode { get; set; } = false;
public bool UnlockDetailMode { get; set; } = true;
public bool SkipInvalidCustomizations { get; set; } = false;
public MainWindow.TabType SelectedTab { get; set; } = MainWindow.TabType.Settings;
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("Enable Auto Designs", "Enable the application of designs associated to characters to be applied automatically.",
_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",
"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);
@ -78,10 +81,8 @@ public class SettingsTab : ITab
var color = _codeService.CheckCode(_currentCode) != null ? ColorId.ActorAvailable : ColorId.ActorUnavailable;
using var c = ImRaii.PushColor(ImGuiCol.Border, color.Value(), _currentCode.Length > 0);
if (ImGui.InputTextWithHint("##Code", "Enter Code...", ref _currentCode, 512, ImGuiInputTextFlags.EnterReturnsTrue))
{
if (_codeService.AddCode(_currentCode))
_currentCode = string.Empty;
}
}
if (_config.Codes.Count <= 0)