add mdl, tex, mtrl handling to transient resource manager, add delay on new file arrival
This commit is contained in:
@@ -16,7 +16,7 @@ public sealed class TransientResourceManager : DisposableMediatorSubscriberBase
|
|||||||
private readonly HashSet<string> _cachedHandledPaths = new(StringComparer.Ordinal);
|
private readonly HashSet<string> _cachedHandledPaths = new(StringComparer.Ordinal);
|
||||||
private readonly TransientConfigService _configurationService;
|
private readonly TransientConfigService _configurationService;
|
||||||
private readonly DalamudUtilService _dalamudUtil;
|
private readonly DalamudUtilService _dalamudUtil;
|
||||||
private readonly string[] _fileTypesToHandle = ["tmb", "pap", "avfx", "atex", "sklb", "eid", "phyb", "scd", "skp", "shpk"];
|
private readonly string[] _fileTypesToHandle = ["tmb", "pap", "avfx", "atex", "sklb", "eid", "phyb", "scd", "skp", "shpk", "mdl", "mtrl", "tex"];
|
||||||
private readonly HashSet<GameObjectHandler> _playerRelatedPointers = [];
|
private readonly HashSet<GameObjectHandler> _playerRelatedPointers = [];
|
||||||
private ConcurrentDictionary<IntPtr, ObjectKind> _cachedFrameAddresses = [];
|
private ConcurrentDictionary<IntPtr, ObjectKind> _cachedFrameAddresses = [];
|
||||||
private ConcurrentDictionary<ObjectKind, HashSet<string>>? _semiTransientResources = null;
|
private ConcurrentDictionary<ObjectKind, HashSet<string>>? _semiTransientResources = null;
|
||||||
@@ -160,7 +160,13 @@ public sealed class TransientResourceManager : DisposableMediatorSubscriberBase
|
|||||||
{
|
{
|
||||||
if (TransientResources.TryGetValue(objectKind, out var set))
|
if (TransientResources.TryGetValue(objectKind, out var set))
|
||||||
{
|
{
|
||||||
set.RemoveWhere(p => list.Contains(p, StringComparer.OrdinalIgnoreCase));
|
foreach (var file in set.Where(p => list.Contains(p, StringComparer.OrdinalIgnoreCase)))
|
||||||
|
{
|
||||||
|
Logger.LogTrace("Removing From Transient: {file}", file);
|
||||||
|
}
|
||||||
|
|
||||||
|
int removed = set.RemoveWhere(p => list.Contains(p, StringComparer.OrdinalIgnoreCase));
|
||||||
|
Logger.LogInformation("Removed {removed} previously existing paths", removed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,9 +281,20 @@ public sealed class TransientResourceManager : DisposableMediatorSubscriberBase
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
var thing = _playerRelatedPointers.FirstOrDefault(f => f.Address == gameObject);
|
||||||
value.Add(replacedGamePath);
|
value.Add(replacedGamePath);
|
||||||
Logger.LogDebug("Adding {replacedGamePath} for {gameObject} ({filePath})", replacedGamePath, gameObject.ToString("X"), filePath);
|
Logger.LogDebug("Adding {replacedGamePath} for {gameObject} ({filePath})", replacedGamePath, thing?.ToString() ?? gameObject.ToString("X"), filePath);
|
||||||
Mediator.Publish(new TransientResourceChangedMessage(gameObject));
|
_ = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
_sendTransientCts?.Cancel();
|
||||||
|
_sendTransientCts?.Dispose();
|
||||||
|
_sendTransientCts = new();
|
||||||
|
var token = _sendTransientCts.Token;
|
||||||
|
await Task.Delay(TimeSpan.FromSeconds(2), token).ConfigureAwait(false);
|
||||||
|
Mediator.Publish(new TransientResourceChangedMessage(gameObject));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CancellationTokenSource _sendTransientCts = new();
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user