change to penumbra.api, fix animations requiring a redraw to be picked up again

This commit is contained in:
rootdarkarchon
2022-12-18 15:31:25 +01:00
parent e725c010d7
commit de37e22c20
6 changed files with 126 additions and 65 deletions

View File

@@ -29,6 +29,7 @@ public class TransientResourceManager : IDisposable
public TransientResourceManager(IpcManager manager, DalamudUtil dalamudUtil, FileReplacementFactory fileReplacementFactory, string configurationDirectory)
{
manager.PenumbraResourceLoadEvent += Manager_PenumbraResourceLoadEvent;
manager.PenumbraModSettingChanged += Manager_PenumbraModSettingChanged;
this.manager = manager;
this.dalamudUtil = dalamudUtil;
this.fileReplacementFactory = fileReplacementFactory;
@@ -55,9 +56,7 @@ public class TransientResourceManager : IDisposable
}
catch (Exception ex)
{
Logger.Warn("Error during loading persistent transient resource " + line);
Logger.Warn(ex.Message);
Logger.Warn(ex.StackTrace);
Logger.Warn("Error during loading persistent transient resource " + line, ex);
}
}
@@ -65,6 +64,23 @@ public class TransientResourceManager : IDisposable
}
}
private void Manager_PenumbraModSettingChanged()
{
bool successfulValidation = true;
Logger.Debug("Penumbra Mod Settings changed, verifying SemiTransientResources");
foreach (var item in SemiTransientResources)
{
item.Value.RemoveWhere(p =>
{
var verified = p.Verify();
successfulValidation &= verified;
return !verified;
});
if (!successfulValidation)
TransientResourceLoaded?.Invoke(dalamudUtil.PlayerPointer);
}
}
private void DalamudUtil_ClassJobChanged()
{
if (SemiTransientResources.ContainsKey(ObjectKind.Pet))
@@ -139,8 +155,10 @@ public class TransientResourceManager : IDisposable
var replacedGamePath = gamePath.ToLowerInvariant().Replace("\\", "/", StringComparison.OrdinalIgnoreCase);
if (TransientResources[gameObject].Contains(replacedGamePath) ||
SemiTransientResources.Any(r => r.Value.Any(f => string.Equals(f.GamePaths.First(), replacedGamePath, StringComparison.OrdinalIgnoreCase)
&& string.Equals(f.ResolvedPath, filePath, StringComparison.OrdinalIgnoreCase))))
SemiTransientResources.Any(r => r.Value.Any(f =>
string.Equals(f.GamePaths.First(), replacedGamePath, StringComparison.OrdinalIgnoreCase)
&& string.Equals(f.ResolvedPath, filePath, StringComparison.OrdinalIgnoreCase))
))
{
Logger.Verbose("Not adding " + replacedGamePath + ":" + filePath);
Logger.Verbose("SemiTransientAny: " + SemiTransientResources.Any(r => r.Value.Any(f => string.Equals(f.GamePaths.First(), replacedGamePath, StringComparison.OrdinalIgnoreCase)
@@ -207,9 +225,7 @@ public class TransientResourceManager : IDisposable
}
catch (Exception ex)
{
Logger.Warn("Issue during transient file persistence");
Logger.Warn(ex.Message);
Logger.Warn(ex.StackTrace.ToString());
Logger.Warn("Issue during transient file persistence", ex);
}
}
@@ -225,6 +241,7 @@ public class TransientResourceManager : IDisposable
dalamudUtil.FrameworkUpdate -= DalamudUtil_FrameworkUpdate;
manager.PenumbraResourceLoadEvent -= Manager_PenumbraResourceLoadEvent;
dalamudUtil.ClassJobChanged -= DalamudUtil_ClassJobChanged;
manager.PenumbraModSettingChanged -= Manager_PenumbraModSettingChanged;
TransientResources.Clear();
SemiTransientResources.Clear();
if (SemiTransientResources.ContainsKey(ObjectKind.Player))