mirror of
https://github.com/Ottermandias/Glamourer.git
synced 2025-12-12 18:27:24 +01:00
Fix issue with unavailable customizations applying.
This commit is contained in:
parent
4743914153
commit
3b55f72ce5
6 changed files with 50 additions and 15 deletions
|
|
@ -51,6 +51,9 @@ public static class CustomizationExtensions
|
|||
public static readonly CustomizeIndex[] All = Enum.GetValues<CustomizeIndex>()
|
||||
.Where(v => v is not CustomizeIndex.Race and not CustomizeIndex.BodyType).ToArray();
|
||||
|
||||
public static readonly CustomizeIndex[] AllBasic = All
|
||||
.Where(v => v is not CustomizeIndex.Gender and not CustomizeIndex.Clan).ToArray();
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
|
||||
public static (int ByteIdx, byte Mask) ToByteAndMask(this CustomizeIndex index)
|
||||
=> index switch
|
||||
|
|
|
|||
|
|
@ -378,22 +378,32 @@ public class DesignBase
|
|||
|
||||
var set = customizations.AwaitedService.GetList(clan, gender);
|
||||
|
||||
foreach (var idx in Enum.GetValues<CustomizeIndex>().Where(set.IsAvailable))
|
||||
foreach (var idx in CustomizationExtensions.AllBasic)
|
||||
{
|
||||
var tok = json[idx.ToString()];
|
||||
var data = (CustomizeValue)(tok?["Value"]?.ToObject<byte>() ?? 0);
|
||||
PrintWarning(CustomizationService.ValidateCustomizeValue(set, design.DesignData.Customize.Face, idx, data, out data, allowUnknown));
|
||||
var apply = tok?["Apply"]?.ToObject<bool>() ?? false;
|
||||
design.DesignData.Customize[idx] = data;
|
||||
design.SetApplyCustomize(idx, apply);
|
||||
if (set.IsAvailable(idx))
|
||||
{
|
||||
var tok = json[idx.ToString()];
|
||||
var data = (CustomizeValue)(tok?["Value"]?.ToObject<byte>() ?? 0);
|
||||
PrintWarning(CustomizationService.ValidateCustomizeValue(set, design.DesignData.Customize.Face, idx, data, out data,
|
||||
allowUnknown));
|
||||
var apply = tok?["Apply"]?.ToObject<bool>() ?? false;
|
||||
design.DesignData.Customize[idx] = data;
|
||||
design.SetApplyCustomize(idx, apply);
|
||||
}
|
||||
else
|
||||
{
|
||||
design.DesignData.Customize[idx] = CustomizeValue.Zero;
|
||||
design.SetApplyCustomize(idx, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void MigrateBase64(ItemManager items, string base64)
|
||||
public void MigrateBase64(CustomizationService customizations, ItemManager items, string base64)
|
||||
{
|
||||
DesignData = DesignBase64Migration.MigrateBase64(items, base64, out var equipFlags, out var customizeFlags, out var writeProtected,
|
||||
out var applyHat, out var applyVisor, out var applyWeapon);
|
||||
ApplyEquip = equipFlags;
|
||||
ApplyEquip = equipFlags;
|
||||
var set = customizations.AwaitedService.GetList(DesignData.Customize.Clan, DesignData.Customize.Gender);
|
||||
ApplyCustomize = customizeFlags;
|
||||
SetWriteProtected(writeProtected);
|
||||
SetApplyHatVisible(applyHat);
|
||||
|
|
@ -402,5 +412,15 @@ public class DesignBase
|
|||
SetApplyWetness(DesignData.IsWet());
|
||||
}
|
||||
|
||||
public void RemoveInvalidCustomize(CustomizationService customizations)
|
||||
{
|
||||
var set = customizations.AwaitedService.GetList(DesignData.Customize.Clan, DesignData.Customize.Gender);
|
||||
foreach (var idx in CustomizationExtensions.AllBasic.Where(i => !set.IsAvailable(i)))
|
||||
{
|
||||
DesignData.Customize[idx] = CustomizeValue.Zero;
|
||||
SetApplyCustomize(idx, false);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ public class DesignConverter
|
|||
case 1:
|
||||
case 2:
|
||||
ret = _designs.CreateTemporary();
|
||||
ret.MigrateBase64(_items, base64);
|
||||
ret.MigrateBase64(_customize, _items, base64);
|
||||
break;
|
||||
case Version:
|
||||
var version = bytes.DecompressToString(out var decompressed);
|
||||
|
|
|
|||
|
|
@ -273,11 +273,13 @@ public class DesignManager
|
|||
if (_customizations.ChangeClan(ref design.DesignData.Customize, (SubRace)value.Value) == 0)
|
||||
return;
|
||||
|
||||
design.RemoveInvalidCustomize(_customizations);
|
||||
break;
|
||||
case CustomizeIndex.Gender:
|
||||
if (_customizations.ChangeGender(ref design.DesignData.Customize, (Gender)(value.Value + 1)) == 0)
|
||||
return;
|
||||
|
||||
design.RemoveInvalidCustomize(_customizations);
|
||||
break;
|
||||
default:
|
||||
if (!_customizations.IsCustomizationValid(design.DesignData.Customize.Clan, design.DesignData.Customize.Gender,
|
||||
|
|
@ -517,7 +519,7 @@ public class DesignManager
|
|||
Identifier = CreateNewGuid(),
|
||||
Name = actualName,
|
||||
};
|
||||
design.MigrateBase64(_items, base64);
|
||||
design.MigrateBase64(_customizations, _items, base64);
|
||||
if (!_designs.Any(d => d.Name == design.Name && d.CreationDate == design.CreationDate))
|
||||
{
|
||||
Add(design, $"Migrated old design to {design.Identifier}.");
|
||||
|
|
|
|||
|
|
@ -199,7 +199,9 @@ public class DesignPanel
|
|||
if (ImGui.CheckboxFlags("Apply All Customizations", ref flags, 3))
|
||||
{
|
||||
var newFlags = flags == 3;
|
||||
foreach (var index in CustomizationExtensions.All)
|
||||
_manager.ChangeApplyCustomize(_selector.Selected!, CustomizeIndex.Clan, newFlags);
|
||||
_manager.ChangeApplyCustomize(_selector.Selected!, CustomizeIndex.Gender, newFlags);
|
||||
foreach (var index in CustomizationExtensions.AllBasic.Where(set.IsAvailable))
|
||||
_manager.ChangeApplyCustomize(_selector.Selected!, index, newFlags);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -277,11 +277,19 @@ public sealed class CustomizationService : AsyncServiceWrapper<ICustomizationMan
|
|||
private static CustomizeFlag FixValues(CustomizationSet set, ref Customize customize)
|
||||
{
|
||||
CustomizeFlag flags = 0;
|
||||
foreach (var idx in Enum.GetValues<CustomizeIndex>().Where(set.IsAvailable))
|
||||
foreach (var idx in Enum.GetValues<CustomizeIndex>())
|
||||
{
|
||||
if (ValidateCustomizeValue(set, customize.Face, idx, customize[idx], out var fixedValue, false).Length > 0)
|
||||
if (set.IsAvailable(idx))
|
||||
{
|
||||
customize[idx] = fixedValue;
|
||||
if (ValidateCustomizeValue(set, customize.Face, idx, customize[idx], out var fixedValue, false).Length > 0)
|
||||
{
|
||||
customize[idx] = fixedValue;
|
||||
flags |= idx.ToFlag();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
customize[idx] = CustomizeValue.Zero;
|
||||
flags |= idx.ToFlag();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue