Make GMP independent of file, cleanup unused functions.

This commit is contained in:
Ottermandias 2024-06-15 15:55:51 +02:00
parent c53f29c257
commit 943207cae8
14 changed files with 108 additions and 158 deletions

View file

@ -26,7 +26,7 @@ public sealed class EqdpCache(MetaFileManager manager, ModCollection collection)
Manager.SetFile(_eqdpFiles[i], index);
}
public override void ResetFiles()
public void ResetFiles()
{
foreach (var t in CharacterUtilityData.EqdpIndices)
Manager.SetFile(null, t);
@ -62,7 +62,7 @@ public sealed class EqdpCache(MetaFileManager manager, ModCollection collection)
return Manager.TemporarilySetFile(_eqdpFiles[i], idx);
}
public override void Reset()
public void Reset()
{
foreach (var file in _eqdpFiles.OfType<ExpandedEqdpFile>())
{

View file

@ -1,7 +1,5 @@
using Penumbra.GameData.Enums;
using Penumbra.GameData.Structs;
using Penumbra.Interop.Services;
using Penumbra.Interop.Structs;
using Penumbra.Meta;
using Penumbra.Meta.Files;
using Penumbra.Meta.Manipulations;
@ -10,24 +8,11 @@ namespace Penumbra.Collections.Cache;
public sealed class EqpCache(MetaFileManager manager, ModCollection collection) : MetaCacheBase<EqpIdentifier, EqpEntry>(manager, collection)
{
private ExpandedEqpFile? _eqpFile;
public override void SetFiles()
=> Manager.SetFile(_eqpFile, MetaIndex.Eqp);
public override void ResetFiles()
=> Manager.SetFile(null, MetaIndex.Eqp);
{ }
protected override void IncorporateChangesInternal()
{
if (GetFile() is not { } file)
return;
foreach (var (identifier, (_, entry)) in this)
Apply(file, identifier, entry);
Penumbra.Log.Verbose($"{Collection.AnonymizedName}: Loaded {Count} delayed EQP manipulations.");
}
{ }
public unsafe EqpEntry GetValues(CharacterArmor* armor)
=> GetSingleValue(armor[0].Set, EquipSlot.Head)
@ -40,29 +25,14 @@ public sealed class EqpCache(MetaFileManager manager, ModCollection collection)
private EqpEntry GetSingleValue(PrimaryId id, EquipSlot slot)
=> TryGetValue(new EqpIdentifier(id, slot), out var pair) ? pair.Entry : ExpandedEqpFile.GetDefault(Manager, id) & Eqp.Mask(slot);
public MetaList.MetaReverter TemporarilySetFile()
=> Manager.TemporarilySetFile(_eqpFile, MetaIndex.Eqp);
public override void Reset()
{
if (_eqpFile == null)
return;
_eqpFile.Reset(Keys.Select(identifier => identifier.SetId));
Clear();
}
public void Reset()
=> Clear();
protected override void ApplyModInternal(EqpIdentifier identifier, EqpEntry entry)
{
if (GetFile() is { } file)
Apply(file, identifier, entry);
}
{ }
protected override void RevertModInternal(EqpIdentifier identifier)
{
if (GetFile() is { } file)
Apply(file, identifier, ExpandedEqpFile.GetDefault(Manager, identifier.SetId));
}
{ }
public static bool Apply(ExpandedEqpFile file, EqpIdentifier identifier, EqpEntry entry)
{
@ -76,20 +46,5 @@ public sealed class EqpCache(MetaFileManager manager, ModCollection collection)
}
protected override void Dispose(bool _)
{
_eqpFile?.Dispose();
_eqpFile = null;
Clear();
}
private ExpandedEqpFile? GetFile()
{
if (_eqpFile != null)
return _eqpFile;
if (!Manager.CharacterUtility.Ready)
return null;
return _eqpFile = new ExpandedEqpFile(Manager);
}
=> Clear();
}

View file

@ -54,7 +54,7 @@ public sealed class EstCache(MetaFileManager manager, ModCollection collection)
return Manager.TemporarilySetFile(file, idx);
}
public override void ResetFiles()
public void ResetFiles()
{
Manager.SetFile(null, MetaIndex.FaceEst);
Manager.SetFile(null, MetaIndex.HairEst);
@ -80,7 +80,7 @@ public sealed class EstCache(MetaFileManager manager, ModCollection collection)
: EstFile.GetDefault(Manager, identifier);
}
public override void Reset()
public void Reset()
{
_estFaceFile?.Reset();
_estHairFile?.Reset();

View file

@ -1,6 +1,4 @@
using Penumbra.GameData.Structs;
using Penumbra.Interop.Services;
using Penumbra.Interop.Structs;
using Penumbra.Meta;
using Penumbra.Meta.Files;
using Penumbra.Meta.Manipulations;
@ -9,48 +7,20 @@ namespace Penumbra.Collections.Cache;
public sealed class GmpCache(MetaFileManager manager, ModCollection collection) : MetaCacheBase<GmpIdentifier, GmpEntry>(manager, collection)
{
private ExpandedGmpFile? _gmpFile;
public override void SetFiles()
=> Manager.SetFile(_gmpFile, MetaIndex.Gmp);
public override void ResetFiles()
=> Manager.SetFile(null, MetaIndex.Gmp);
{ }
protected override void IncorporateChangesInternal()
{
if (GetFile() is not { } file)
return;
{ }
foreach (var (identifier, (_, entry)) in this)
Apply(file, identifier, entry);
Penumbra.Log.Verbose($"{Collection.AnonymizedName}: Loaded {Count} delayed GMP manipulations.");
}
public MetaList.MetaReverter TemporarilySetFile()
=> Manager.TemporarilySetFile(_gmpFile, MetaIndex.Gmp);
public override void Reset()
{
if (_gmpFile == null)
return;
_gmpFile.Reset(Keys.Select(identifier => identifier.SetId));
Clear();
}
public void Reset()
=> Clear();
protected override void ApplyModInternal(GmpIdentifier identifier, GmpEntry entry)
{
if (GetFile() is { } file)
Apply(file, identifier, entry);
}
{ }
protected override void RevertModInternal(GmpIdentifier identifier)
{
if (GetFile() is { } file)
Apply(file, identifier, ExpandedGmpFile.GetDefault(Manager, identifier.SetId));
}
{ }
public static bool Apply(ExpandedGmpFile file, GmpIdentifier identifier, GmpEntry entry)
{
@ -63,20 +33,5 @@ public sealed class GmpCache(MetaFileManager manager, ModCollection collection)
}
protected override void Dispose(bool _)
{
_gmpFile?.Dispose();
_gmpFile = null;
Clear();
}
private ExpandedGmpFile? GetFile()
{
if (_gmpFile != null)
return _gmpFile;
if (!Manager.CharacterUtility.Ready)
return null;
return _gmpFile = new ExpandedGmpFile(Manager);
}
=> Clear();
}

View file

@ -27,8 +27,6 @@ public abstract class MetaCacheBase<TIdentifier, TEntry>
}
public abstract void SetFiles();
public abstract void Reset();
public abstract void ResetFiles();
public bool ApplyMod(IMod source, TIdentifier identifier, TEntry entry)
{

View file

@ -38,7 +38,7 @@ public sealed class ImcCache(MetaFileManager manager, ModCollection collection)
Collection._cache!.ForceFile(path, PathDataHandler.CreateImc(path.Path, Collection));
}
public override void ResetFiles()
public void ResetFiles()
{
foreach (var (path, _) in _imcFiles)
Collection._cache!.ForceFile(path, FullPath.Empty);
@ -56,7 +56,7 @@ public sealed class ImcCache(MetaFileManager manager, ModCollection collection)
}
public override void Reset()
public void Reset()
{
foreach (var (path, (file, set)) in _imcFiles)
{

View file

@ -148,9 +148,6 @@ public class MetaCache(MetaFileManager manager, ModCollection collection)
public MetaList.MetaReverter? TemporarilySetEqdpFile(GenderRace genderRace, bool accessory)
=> Eqdp.TemporarilySetFile(genderRace, accessory);
public MetaList.MetaReverter TemporarilySetGmpFile()
=> Gmp.TemporarilySetFile();
public MetaList.MetaReverter TemporarilySetCmpFile()
=> Rsp.TemporarilySetFile();

View file

@ -13,9 +13,6 @@ public sealed class RspCache(MetaFileManager manager, ModCollection collection)
public override void SetFiles()
=> Manager.SetFile(_cmpFile, MetaIndex.HumanCmp);
public override void ResetFiles()
=> Manager.SetFile(null, MetaIndex.HumanCmp);
protected override void IncorporateChangesInternal()
{
if (GetFile() is not { } file)
@ -30,7 +27,7 @@ public sealed class RspCache(MetaFileManager manager, ModCollection collection)
public MetaList.MetaReverter TemporarilySetFile()
=> Manager.TemporarilySetFile(_cmpFile, MetaIndex.HumanCmp);
public override void Reset()
public void Reset()
{
if (_cmpFile == null)
return;

View file

@ -100,10 +100,6 @@ public partial class ModCollection
return idx >= 0 ? utility.TemporarilyResetResource(idx) : null;
}
public MetaList.MetaReverter TemporarilySetGmpFile(CharacterUtility utility)
=> _cache?.Meta.TemporarilySetGmpFile()
?? utility.TemporarilyResetResource(MetaIndex.Gmp);
public MetaList.MetaReverter TemporarilySetCmpFile(CharacterUtility utility)
=> _cache?.Meta.TemporarilySetCmpFile()
?? utility.TemporarilyResetResource(MetaIndex.HumanCmp);