fixes for materials

This commit is contained in:
Stanley Dimant
2022-09-11 14:28:16 +02:00
parent c28d951fc8
commit 78c6d7e594
4 changed files with 22 additions and 8 deletions

View File

@@ -9,7 +9,6 @@ using FFXIVClientStructs.FFXIV.Client.Game.Character;
using System.Collections.Generic;
using System.Linq;
using MareSynchronos.Models;
using Newtonsoft.Json;
namespace MareSynchronos.Managers
{
@@ -47,6 +46,7 @@ namespace MareSynchronos.Managers
_transientResourceManager.TransientResourceLoaded += HandleTransientResourceLoad;
_dalamudUtil.DelayedFrameworkUpdate += DalamudUtilOnDelayedFrameworkUpdate;
_ipcManager.HeelsOffsetChangeEvent += HeelsOffsetChanged;
_dalamudUtil.FrameworkUpdate += DalamudUtilOnFrameworkUpdate;
Logger.Debug("Watching Player, ApiController is Connected: " + _apiController.IsConnected);
@@ -64,6 +64,11 @@ namespace MareSynchronos.Managers
};
}
private void DalamudUtilOnFrameworkUpdate()
{
_transientResourceManager.PlayerRelatedPointers = playerRelatedObjects.Select(f => f.CurrentAddress).ToArray();
}
public void HandleTransientResourceLoad(IntPtr gameObj)
{
foreach (var obj in playerRelatedObjects)
@@ -106,6 +111,7 @@ namespace MareSynchronos.Managers
_ipcManager.PenumbraRedrawEvent -= IpcManager_PenumbraRedrawEvent;
_dalamudUtil.DelayedFrameworkUpdate -= DalamudUtilOnDelayedFrameworkUpdate;
_dalamudUtil.FrameworkUpdate -= DalamudUtilOnFrameworkUpdate;
_transientResourceManager.TransientResourceLoaded -= HandleTransientResourceLoad;
@@ -222,7 +228,7 @@ namespace MareSynchronos.Managers
Task.Run(async () =>
{
foreach(var item in unprocessedObjects)
foreach (var item in unprocessedObjects)
{
_dalamudUtil.WaitWhileCharacterIsDrawing("self " + item.ObjectKind.ToString(), item.Address, token);
}

View File

@@ -18,10 +18,10 @@ namespace MareSynchronos.Managers
private readonly DalamudUtil dalamudUtil;
public event TransientResourceLoadedEvent? TransientResourceLoaded;
public IntPtr[] PlayerRelatedPointers = Array.Empty<IntPtr>();
private ConcurrentDictionary<IntPtr, HashSet<string>> TransientResources { get; } = new();
private ConcurrentDictionary<ObjectKind, HashSet<FileReplacement>> SemiTransientResources { get; } = new();
private CancellationTokenSource transientInvokeDelayCts = new CancellationTokenSource();
public TransientResourceManager(IpcManager manager, DalamudUtil dalamudUtil)
{
manager.PenumbraResourceLoadEvent += Manager_PenumbraResourceLoadEvent;
@@ -81,6 +81,11 @@ namespace MareSynchronos.Managers
private void Manager_PenumbraResourceLoadEvent(IntPtr gameObject, string gamePath, string filePath)
{
if (!PlayerRelatedPointers.Contains(gameObject))
{
return;
}
if (!TransientResources.ContainsKey(gameObject))
{
TransientResources[gameObject] = new();
@@ -115,7 +120,7 @@ namespace MareSynchronos.Managers
{
if (TransientResources.ContainsKey(gameObject))
{
TransientResources[gameObject].RemoveWhere(f => fileReplacement.ResolvedPath.ToLowerInvariant() == f.ToLowerInvariant());
TransientResources[gameObject].RemoveWhere(f => fileReplacement.GamePaths.Any(g => g.ToLowerInvariant() == f.ToLowerInvariant()));
}
}
@@ -146,12 +151,15 @@ namespace MareSynchronos.Managers
{
if (!SemiTransientResources[objectKind].Any(f => f.GamePaths.First().ToLowerInvariant() == item.ToLowerInvariant()))
{
Logger.Debug("Persisting " + item.ToLowerInvariant());
var fileReplacement = createFileReplacement(item.ToLowerInvariant(), true);
if (!fileReplacement.HasFileReplacement)
fileReplacement = createFileReplacement(item.ToLowerInvariant(), false);
SemiTransientResources[objectKind].Add(fileReplacement);
if (fileReplacement.HasFileReplacement)
{
Logger.Debug("Persisting " + item.ToLowerInvariant());
SemiTransientResources[objectKind].Add(fileReplacement);
}
}
}
catch (Exception ex)

View File

@@ -3,7 +3,7 @@
<PropertyGroup>
<Authors></Authors>
<Company></Company>
<Version>0.4.2</Version>
<Version>0.4.3</Version>
<Description></Description>
<Copyright></Copyright>
<PackageProjectUrl>https://github.com/Penumbra-Sync/client</PackageProjectUrl>

View File

@@ -19,7 +19,7 @@ namespace MareSynchronos.Models
public IntPtr Address { get; set; }
public IntPtr DrawObjectAddress { get; set; }
private IntPtr CurrentAddress
public IntPtr CurrentAddress
{
get
{