mirror of
https://github.com/Ottermandias/Glamourer.git
synced 2025-12-13 20:24:17 +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>()
|
public static readonly CustomizeIndex[] All = Enum.GetValues<CustomizeIndex>()
|
||||||
.Where(v => v is not CustomizeIndex.Race and not CustomizeIndex.BodyType).ToArray();
|
.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)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
|
||||||
public static (int ByteIdx, byte Mask) ToByteAndMask(this CustomizeIndex index)
|
public static (int ByteIdx, byte Mask) ToByteAndMask(this CustomizeIndex index)
|
||||||
=> index switch
|
=> index switch
|
||||||
|
|
|
||||||
|
|
@ -378,22 +378,32 @@ public class DesignBase
|
||||||
|
|
||||||
var set = customizations.AwaitedService.GetList(clan, gender);
|
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()];
|
if (set.IsAvailable(idx))
|
||||||
var data = (CustomizeValue)(tok?["Value"]?.ToObject<byte>() ?? 0);
|
{
|
||||||
PrintWarning(CustomizationService.ValidateCustomizeValue(set, design.DesignData.Customize.Face, idx, data, out data, allowUnknown));
|
var tok = json[idx.ToString()];
|
||||||
var apply = tok?["Apply"]?.ToObject<bool>() ?? false;
|
var data = (CustomizeValue)(tok?["Value"]?.ToObject<byte>() ?? 0);
|
||||||
design.DesignData.Customize[idx] = data;
|
PrintWarning(CustomizationService.ValidateCustomizeValue(set, design.DesignData.Customize.Face, idx, data, out data,
|
||||||
design.SetApplyCustomize(idx, apply);
|
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,
|
DesignData = DesignBase64Migration.MigrateBase64(items, base64, out var equipFlags, out var customizeFlags, out var writeProtected,
|
||||||
out var applyHat, out var applyVisor, out var applyWeapon);
|
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;
|
ApplyCustomize = customizeFlags;
|
||||||
SetWriteProtected(writeProtected);
|
SetWriteProtected(writeProtected);
|
||||||
SetApplyHatVisible(applyHat);
|
SetApplyHatVisible(applyHat);
|
||||||
|
|
@ -402,5 +412,15 @@ public class DesignBase
|
||||||
SetApplyWetness(DesignData.IsWet());
|
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
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@ public class DesignConverter
|
||||||
case 1:
|
case 1:
|
||||||
case 2:
|
case 2:
|
||||||
ret = _designs.CreateTemporary();
|
ret = _designs.CreateTemporary();
|
||||||
ret.MigrateBase64(_items, base64);
|
ret.MigrateBase64(_customize, _items, base64);
|
||||||
break;
|
break;
|
||||||
case Version:
|
case Version:
|
||||||
var version = bytes.DecompressToString(out var decompressed);
|
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)
|
if (_customizations.ChangeClan(ref design.DesignData.Customize, (SubRace)value.Value) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
design.RemoveInvalidCustomize(_customizations);
|
||||||
break;
|
break;
|
||||||
case CustomizeIndex.Gender:
|
case CustomizeIndex.Gender:
|
||||||
if (_customizations.ChangeGender(ref design.DesignData.Customize, (Gender)(value.Value + 1)) == 0)
|
if (_customizations.ChangeGender(ref design.DesignData.Customize, (Gender)(value.Value + 1)) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
design.RemoveInvalidCustomize(_customizations);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (!_customizations.IsCustomizationValid(design.DesignData.Customize.Clan, design.DesignData.Customize.Gender,
|
if (!_customizations.IsCustomizationValid(design.DesignData.Customize.Clan, design.DesignData.Customize.Gender,
|
||||||
|
|
@ -517,7 +519,7 @@ public class DesignManager
|
||||||
Identifier = CreateNewGuid(),
|
Identifier = CreateNewGuid(),
|
||||||
Name = actualName,
|
Name = actualName,
|
||||||
};
|
};
|
||||||
design.MigrateBase64(_items, base64);
|
design.MigrateBase64(_customizations, _items, base64);
|
||||||
if (!_designs.Any(d => d.Name == design.Name && d.CreationDate == design.CreationDate))
|
if (!_designs.Any(d => d.Name == design.Name && d.CreationDate == design.CreationDate))
|
||||||
{
|
{
|
||||||
Add(design, $"Migrated old design to {design.Identifier}.");
|
Add(design, $"Migrated old design to {design.Identifier}.");
|
||||||
|
|
|
||||||
|
|
@ -199,7 +199,9 @@ public class DesignPanel
|
||||||
if (ImGui.CheckboxFlags("Apply All Customizations", ref flags, 3))
|
if (ImGui.CheckboxFlags("Apply All Customizations", ref flags, 3))
|
||||||
{
|
{
|
||||||
var newFlags = 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);
|
_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)
|
private static CustomizeFlag FixValues(CustomizationSet set, ref Customize customize)
|
||||||
{
|
{
|
||||||
CustomizeFlag flags = 0;
|
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();
|
flags |= idx.ToFlag();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue