fix some random texture loading issues I don't understand, fix loading issues

This commit is contained in:
Stanley Dimant
2022-07-01 00:16:43 +02:00
parent afbb3eea8e
commit 320b80e3ae
5 changed files with 47 additions and 31 deletions

View File

@@ -40,17 +40,6 @@ namespace MareSynchronos.Factories
{ {
fileReplacement.GamePaths = new List<string> { path }; fileReplacement.GamePaths = new List<string> { path };
fileReplacement.SetResolvedPath(_ipcManager.PenumbraResolvePath(path, _dalamudUtil.PlayerName)!); fileReplacement.SetResolvedPath(_ipcManager.PenumbraResolvePath(path, _dalamudUtil.PlayerName)!);
if (!fileReplacement.HasFileReplacement)
{
// try resolving tex with -- in name instead
path = path.Insert(path.LastIndexOf('/') + 1, "--");
var reResolvedPath = _ipcManager.PenumbraResolvePath(path, _dalamudUtil.PlayerName)!;
if (reResolvedPath != path)
{
fileReplacement.GamePaths = new List<string>() { path };
fileReplacement.SetResolvedPath(reResolvedPath);
}
}
} }
return fileReplacement; return fileReplacement;
@@ -93,8 +82,8 @@ namespace MareSynchronos.Factories
var mdlPath = new Utf8String(mdl->ResourceHandle->FileName()).ToString(); var mdlPath = new Utf8String(mdl->ResourceHandle->FileName()).ToString();
FileReplacement mdlFileReplacement = CreateFileReplacement(mdlPath); FileReplacement mdlFileReplacement = CreateFileReplacement(mdlPath);
Logger.Verbose("Model " + string.Join(", ", mdlFileReplacement.GamePaths)); Logger.Debug("Model " + string.Join(", ", mdlFileReplacement.GamePaths));
Logger.Verbose("\t\t=> " + mdlFileReplacement.ResolvedPath); Logger.Debug("\t\t=> " + mdlFileReplacement.ResolvedPath);
cache.AddFileReplacement(mdlFileReplacement); cache.AddFileReplacement(mdlFileReplacement);
@@ -104,9 +93,11 @@ namespace MareSynchronos.Factories
if (mtrl == null) continue; if (mtrl == null) continue;
var mtrlPath = new Utf8String(mtrl->ResourceHandle->FileName()).ToString().Split("|")[2]; var mtrlPath = new Utf8String(mtrl->ResourceHandle->FileName()).ToString().Split("|")[2];
var mtrlFileReplacement = CreateFileReplacement(mtrlPath); var mtrlFileReplacement = CreateFileReplacement(mtrlPath);
Logger.Verbose("\tMaterial " + string.Join(", ", mtrlFileReplacement.GamePaths)); Logger.Debug("\tMaterial " + string.Join(", ", mtrlFileReplacement.GamePaths));
Logger.Verbose("\t\t\t=> " + mtrlFileReplacement.ResolvedPath); Logger.Debug("\t\t\t=> " + mtrlFileReplacement.ResolvedPath);
cache.AddFileReplacement(mtrlFileReplacement); cache.AddFileReplacement(mtrlFileReplacement);
var mtrlResourceHandle = (MtrlResource*)mtrl->ResourceHandle; var mtrlResourceHandle = (MtrlResource*)mtrl->ResourceHandle;
@@ -117,9 +108,19 @@ namespace MareSynchronos.Factories
if (string.IsNullOrEmpty(texPath)) continue; if (string.IsNullOrEmpty(texPath)) continue;
var texFileReplacement = CreateFileReplacement(texPath); var texFileReplacement = CreateFileReplacement(texPath);
Logger.Verbose("\t\tTexture " + string.Join(", ", texFileReplacement.GamePaths)); Logger.Debug("\t\tTexture " + string.Join(", ", texFileReplacement.GamePaths));
Logger.Verbose("\t\t\t\t=> " + texFileReplacement.ResolvedPath); Logger.Debug("\t\t\t\t=> " + texFileReplacement.ResolvedPath);
cache.AddFileReplacement(texFileReplacement); cache.AddFileReplacement(texFileReplacement);
if (texPath.Contains("/--")) continue;
var texDoubleMinusFileReplacement =
CreateFileReplacement(texPath.Insert(texPath.LastIndexOf('/') + 1, "--"));
Logger.Debug("\t\tTexture-- " + string.Join(", ", texDoubleMinusFileReplacement.GamePaths));
Logger.Debug("\t\t\t\t=> " + texDoubleMinusFileReplacement.ResolvedPath);
cache.AddFileReplacement(texDoubleMinusFileReplacement);
} }
} }
} }

View File

@@ -39,6 +39,7 @@ public class CachedPlayer
} }
} }
private bool _isDisposed = false;
private CancellationTokenSource? _downloadCancellationTokenSource; private CancellationTokenSource? _downloadCancellationTokenSource;
private string _lastGlamourerData = string.Empty; private string _lastGlamourerData = string.Empty;
@@ -172,7 +173,8 @@ public class CachedPlayer
public void DisposePlayer() public void DisposePlayer()
{ {
Logger.Debug("Disposing " + PlayerNameHash); Logger.Debug("Disposing " + PlayerName + " (" + PlayerNameHash + ")");
if (_isDisposed) return;
if (string.IsNullOrEmpty(PlayerName)) return; if (string.IsNullOrEmpty(PlayerName)) return;
try try
{ {
@@ -199,6 +201,7 @@ public class CachedPlayer
PlayerName = string.Empty; PlayerName = string.Empty;
PlayerCharacter = null; PlayerCharacter = null;
IsVisible = false; IsVisible = false;
_isDisposed = true;
} }
} }
@@ -212,6 +215,7 @@ public class CachedPlayer
_ipcManager.PenumbraRedrawEvent += IpcManagerOnPenumbraRedrawEvent; _ipcManager.PenumbraRedrawEvent += IpcManagerOnPenumbraRedrawEvent;
_originalGlamourerData = _ipcManager.GlamourerGetCharacterCustomization(PlayerCharacter); _originalGlamourerData = _ipcManager.GlamourerGetCharacterCustomization(PlayerCharacter);
_currentCharacterEquipment = new CharacterEquipment(PlayerCharacter); _currentCharacterEquipment = new CharacterEquipment(PlayerCharacter);
_isDisposed = false;
if (cache != null) if (cache != null)
{ {
ApplyCharacterData(cache); ApplyCharacterData(cache);

View File

@@ -7,6 +7,7 @@ using MareSynchronos.API;
using MareSynchronos.Utils; using MareSynchronos.Utils;
using MareSynchronos.WebAPI; using MareSynchronos.WebAPI;
using MareSynchronos.WebAPI.Utils; using MareSynchronos.WebAPI.Utils;
using Newtonsoft.Json;
namespace MareSynchronos.Managers; namespace MareSynchronos.Managers;
@@ -70,7 +71,7 @@ public class OnlinePlayerManager : IDisposable
private void PlayerManagerOnPlayerHasChanged(CharacterCacheDto characterCache) private void PlayerManagerOnPlayerHasChanged(CharacterCacheDto characterCache)
{ {
_ = _apiController.PushCharacterData(characterCache, OnlineVisiblePlayerHashes); PushCharacterData(OnlineVisiblePlayerHashes);
} }
private void ApiControllerOnConnected(object? sender, EventArgs e) private void ApiControllerOnConnected(object? sender, EventArgs e)
@@ -215,16 +216,22 @@ public class OnlinePlayerManager : IDisposable
var newlyVisiblePlayers = _onlineCachedPlayers var newlyVisiblePlayers = _onlineCachedPlayers
.Where(p => p.PlayerCharacter != null && p.IsVisible && !p.WasVisible).Select(p => p.PlayerNameHash) .Where(p => p.PlayerCharacter != null && p.IsVisible && !p.WasVisible).Select(p => p.PlayerNameHash)
.ToList(); .ToList();
if (newlyVisiblePlayers.Any() && _playerManager.LastSentCharacterData != null) PushCharacterData(newlyVisiblePlayers);
_lastPlayerObjectCheck = DateTime.Now;
}
private void PushCharacterData(List<string> visiblePlayers)
{
if (visiblePlayers.Any() && _playerManager.LastSentCharacterData != null)
{ {
Task.Run(async () => Task.Run(async () =>
{ {
Logger.Verbose(JsonConvert.SerializeObject(_playerManager.LastSentCharacterData!.ToCharacterCacheDto(), Formatting.Indented));
await _apiController.PushCharacterData(_playerManager.LastSentCharacterData.ToCharacterCacheDto(), await _apiController.PushCharacterData(_playerManager.LastSentCharacterData.ToCharacterCacheDto(),
newlyVisiblePlayers); visiblePlayers);
}); });
} }
_lastPlayerObjectCheck = DateTime.Now;
} }
private CachedPlayer CreateCachedPlayer(string hashedName) private CachedPlayer CreateCachedPlayer(string hashedName)

View File

@@ -34,11 +34,6 @@ namespace MareSynchronos.Models
[JsonProperty] [JsonProperty]
public string Hash { get; set; } = string.Empty; public string Hash { get; set; } = string.Empty;
[JsonProperty]
public string ImcData { get; set; } = string.Empty;
public bool IsInUse { get; set; } = false;
[JsonProperty] [JsonProperty]
public string ResolvedPath { get; set; } = string.Empty; public string ResolvedPath { get; set; } = string.Empty;

View File

@@ -1,15 +1,24 @@
using System.Diagnostics; using System.Diagnostics;
using System.Text;
using Dalamud.Logging; using Dalamud.Logging;
using Dalamud.Utility;
namespace MareSynchronos.Utils namespace MareSynchronos.Utils
{ {
internal class Logger internal class Logger
{ {
public static void Debug(string debug) public static void Debug(string debug, string stringToHighlight = "")
{ {
var caller = new StackTrace().GetFrame(1)?.GetMethod()?.ReflectedType?.Name ?? "Unknown"; var caller = new StackTrace().GetFrame(1)?.GetMethod()?.ReflectedType?.Name ?? "Unknown";
if (debug.Contains(stringToHighlight) && !stringToHighlight.IsNullOrEmpty())
{
PluginLog.Warning($"[{caller}] {debug}");
}
else
{
PluginLog.Debug($"[{caller}] {debug}"); PluginLog.Debug($"[{caller}] {debug}");
} }
}
public static void Warn(string warn) public static void Warn(string warn)
{ {