adjustments for animation/penumbra update

This commit is contained in:
Stanley Dimant
2022-09-03 17:42:59 +02:00
parent 8dc4dd26e2
commit 8d6b7346ec
8 changed files with 34 additions and 24 deletions

View File

@@ -266,7 +266,7 @@ public class CharacterDataFactory
foreach (var item in previousData.FileReplacements[objectKind]) foreach (var item in previousData.FileReplacements[objectKind])
{ {
transientResourceManager.RemoveTransientResource((IntPtr)human, item); transientResourceManager.RemoveTransientResource(charaPointer, item);
} }
if (objectKind == ObjectKind.Player) if (objectKind == ObjectKind.Player)
@@ -281,7 +281,7 @@ public class CharacterDataFactory
foreach (var item in previousData.FileReplacements[objectKind]) foreach (var item in previousData.FileReplacements[objectKind])
{ {
transientResourceManager.RemoveTransientResource((IntPtr)weaponObject, item); transientResourceManager.RemoveTransientResource(charaPointer, item);
} }
foreach (var item in transientResourceManager.GetTransientResources((IntPtr)weaponObject)) foreach (var item in transientResourceManager.GetTransientResources((IntPtr)weaponObject))
@@ -329,11 +329,11 @@ public class CharacterDataFactory
foreach (var item in previousData.FileReplacements[objectKind]) foreach (var item in previousData.FileReplacements[objectKind])
{ {
transientResourceManager.RemoveTransientResource((IntPtr)human, item); transientResourceManager.RemoveTransientResource(charaPointer, item);
} }
} }
foreach (var item in transientResourceManager.GetTransientResources((IntPtr)human)) foreach (var item in transientResourceManager.GetTransientResources(charaPointer))
{ {
Logger.Verbose("Found transient resource: " + item); Logger.Verbose("Found transient resource: " + item);
AddReplacement(item, objectKind, previousData, 1); AddReplacement(item, objectKind, previousData, 1);

View File

@@ -348,6 +348,8 @@ public class CachedPlayer
_dalamudUtil.FrameworkUpdate -= DalamudUtilOnFrameworkUpdate; _dalamudUtil.FrameworkUpdate -= DalamudUtilOnFrameworkUpdate;
_ipcManager.PenumbraRedrawEvent -= IpcManagerOnPenumbraRedrawEvent; _ipcManager.PenumbraRedrawEvent -= IpcManagerOnPenumbraRedrawEvent;
_ipcManager.PenumbraRemoveTemporaryCollection(PlayerName); _ipcManager.PenumbraRemoveTemporaryCollection(PlayerName);
_downloadCancellationTokenSource?.Cancel();
_downloadCancellationTokenSource?.Dispose();
if (PlayerCharacter != null && PlayerCharacter.IsValid()) if (PlayerCharacter != null && PlayerCharacter.IsValid())
{ {
foreach (var item in _cachedData.FileReplacements) foreach (var item in _cachedData.FileReplacements)
@@ -355,9 +357,6 @@ public class CachedPlayer
RevertCustomizationData(item.Key); RevertCustomizationData(item.Key);
} }
} }
_downloadCancellationTokenSource?.Cancel();
_downloadCancellationTokenSource?.Dispose();
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@@ -316,7 +316,7 @@ namespace MareSynchronos.Managers
foreach (var deletion in fileCachesToDelete) foreach (var deletion in fileCachesToDelete)
{ {
var entries = db.FileCaches.Where(f => var entries = db.FileCaches.Where(f =>
f.Hash == deletion.Hash && f.Filepath.ToLowerInvariant() == deletion.Filepath.ToLowerInvariant()); f.Hash == deletion.Hash && f.Filepath.ToLower() == deletion.Filepath.ToLower());
if (await entries.AnyAsync(ct)) if (await entries.AnyAsync(ct))
{ {
Logger.Verbose("Removing file from DB: " + deletion.Filepath); Logger.Verbose("Removing file from DB: " + deletion.Filepath);

View File

@@ -65,7 +65,7 @@ namespace MareSynchronos.Managers
{ {
foreach (var obj in playerRelatedObjects) foreach (var obj in playerRelatedObjects)
{ {
if (obj.DrawObjectAddress == drawObj && !obj.HasUnprocessedUpdate) if (obj.Address == drawObj && !obj.HasUnprocessedUpdate)
{ {
obj.HasUnprocessedUpdate = true; obj.HasUnprocessedUpdate = true;
OnPlayerOrAttachedObjectsChanged(); OnPlayerOrAttachedObjectsChanged();

View File

@@ -29,7 +29,7 @@ namespace MareSynchronos.Managers
{ {
foreach (var item in TransientResources.ToList()) foreach (var item in TransientResources.ToList())
{ {
if (!dalamudUtil.IsDrawObjectPresent(item.Key)) if (!dalamudUtil.IsGameObjectPresent(item.Key))
{ {
Logger.Debug("Object not present anymore: " + item.Key); Logger.Debug("Object not present anymore: " + item.Key);
TransientResources.Remove(item.Key); TransientResources.Remove(item.Key);
@@ -37,9 +37,9 @@ namespace MareSynchronos.Managers
} }
} }
public List<string> GetTransientResources(IntPtr drawObject) public List<string> GetTransientResources(IntPtr gameObject)
{ {
if (TransientResources.TryGetValue(drawObject, out var result)) if (TransientResources.TryGetValue(gameObject, out var result))
{ {
return result.ToList(); return result.ToList();
} }
@@ -47,11 +47,11 @@ namespace MareSynchronos.Managers
return new List<string>(); return new List<string>();
} }
private void Manager_PenumbraResourceLoadEvent(IntPtr drawObject, string gamePath, string filePath) private void Manager_PenumbraResourceLoadEvent(IntPtr gameObject, string gamePath, string filePath)
{ {
if (!TransientResources.ContainsKey(drawObject)) if (!TransientResources.ContainsKey(gameObject))
{ {
TransientResources[drawObject] = new(); TransientResources[gameObject] = new();
} }
if (filePath.StartsWith("|")) if (filePath.StartsWith("|"))
@@ -61,11 +61,11 @@ namespace MareSynchronos.Managers
var newPath = filePath.ToLowerInvariant().Replace("\\", "/"); var newPath = filePath.ToLowerInvariant().Replace("\\", "/");
if (filePath != gamePath && !TransientResources[drawObject].Contains(newPath)) if (filePath != gamePath && !TransientResources[gameObject].Contains(newPath))
{ {
TransientResources[drawObject].Add(newPath); TransientResources[gameObject].Add(newPath);
Logger.Debug($"Adding {filePath.ToLowerInvariant().Replace("\\", "/")} for {drawObject}"); Logger.Debug($"Adding {filePath.ToLowerInvariant().Replace("\\", "/")} for {gameObject}");
TransientResourceLoaded?.Invoke(drawObject); TransientResourceLoaded?.Invoke(gameObject);
} }
} }

View File

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

View File

@@ -19,7 +19,18 @@ namespace MareSynchronos.Models
public IntPtr Address { get; set; } public IntPtr Address { get; set; }
public IntPtr DrawObjectAddress { get; set; } public IntPtr DrawObjectAddress { get; set; }
private IntPtr CurrentAddress => getAddress.Invoke(); private IntPtr CurrentAddress
{
get
{
try
{
return getAddress.Invoke();
}
catch
{ return IntPtr.Zero; }
}
}
public PlayerRelatedObject(ObjectKind objectKind, IntPtr address, IntPtr drawObjectAddress, Func<IntPtr> getAddress) public PlayerRelatedObject(ObjectKind objectKind, IntPtr address, IntPtr drawObjectAddress, Func<IntPtr> getAddress)
{ {

View File

@@ -28,11 +28,11 @@ namespace MareSynchronos.Utils
public event LogOut? LogOut; public event LogOut? LogOut;
public event FrameworkUpdate? FrameworkUpdate; public event FrameworkUpdate? FrameworkUpdate;
public unsafe bool IsDrawObjectPresent(IntPtr key) public unsafe bool IsGameObjectPresent(IntPtr key)
{ {
foreach (var obj in _objectTable) foreach (var obj in _objectTable)
{ {
if ((IntPtr)((GameObject*)obj.Address)->GetDrawObject() == key) if (obj.Address == key)
{ {
return true; return true;
} }
@@ -105,7 +105,7 @@ namespace MareSynchronos.Utils
public string PlayerName => _clientState.LocalPlayer?.Name.ToString() ?? "--"; public string PlayerName => _clientState.LocalPlayer?.Name.ToString() ?? "--";
public IntPtr PlayerPointer => _clientState.LocalPlayer!.Address; public IntPtr PlayerPointer => _clientState.LocalPlayer?.Address ?? IntPtr.Zero;
public PlayerCharacter PlayerCharacter => _clientState.LocalPlayer!; public PlayerCharacter PlayerCharacter => _clientState.LocalPlayer!;