From 953ff065b1b23f1497f44fbc02598e8ea3fbe520 Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Tue, 10 Sep 2024 17:27:03 +0200 Subject: [PATCH] fix failing tri calculation --- .../PlayerData/Factories/PlayerDataFactory.cs | 1 - MareSynchronos/Services/XivDataAnalyzer.cs | 27 ++++--------------- 2 files changed, 5 insertions(+), 23 deletions(-) diff --git a/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs b/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs index 37bcd42..24f1fa9 100644 --- a/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs +++ b/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs @@ -115,7 +115,6 @@ public class PlayerDataFactory private async Task CreateCharacterData(CharacterData previousData, GameObjectHandler playerRelatedObject, CancellationToken token) { var objectKind = playerRelatedObject.ObjectKind; - var charaPointer = playerRelatedObject.Address; _logger.LogDebug("Building character data for {obj}", playerRelatedObject); diff --git a/MareSynchronos/Services/XivDataAnalyzer.cs b/MareSynchronos/Services/XivDataAnalyzer.cs index e5ceec7..e3f499b 100644 --- a/MareSynchronos/Services/XivDataAnalyzer.cs +++ b/MareSynchronos/Services/XivDataAnalyzer.cs @@ -20,6 +20,7 @@ public sealed class XivDataAnalyzer private readonly FileCacheManager _fileCacheManager; private readonly XivDataStorageService _configService; private readonly GameData _luminaGameData; + private readonly List _failedCalculatedTris = []; public XivDataAnalyzer(ILogger logger, FileCacheManager fileCacheManager, XivDataStorageService configService, IDataManager gameData) @@ -153,33 +154,14 @@ public sealed class XivDataAnalyzer return output; } - public Task GetTrianglesFromGamePath(string gamePath) - { - if (_configService.Current.TriangleDictionary.TryGetValue(gamePath, out var cachedTris)) - return Task.FromResult(cachedTris); - - _logger.LogDebug("Detected Model File {path}, calculating Tris", gamePath); - var file = _luminaGameData.GetFile(gamePath); - if (file == null) - return Task.FromResult((long)0); - - if (file.FileHeader.LodCount <= 0) - return Task.FromResult((long)0); - var meshIdx = file.Lods[0].MeshIndex; - var meshCnt = file.Lods[0].MeshCount; - var tris = file.Meshes.Skip(meshIdx).Take(meshCnt).Sum(p => p.IndexCount) / 3; - - _logger.LogDebug("{filePath} => {tris} triangles", gamePath, tris); - _configService.Current.TriangleDictionary[gamePath] = tris; - _configService.Save(); - return Task.FromResult(tris); - } - public Task GetTrianglesByHash(string hash) { if (_configService.Current.TriangleDictionary.TryGetValue(hash, out var cachedTris) && cachedTris > 0) return Task.FromResult(cachedTris); + if (_failedCalculatedTris.Contains(hash, StringComparer.Ordinal)) + return Task.FromResult((long)0); + var path = _fileCacheManager.GetFileCacheByHash(hash); if (path == null || !path.ResolvedFilepath.EndsWith(".mdl", StringComparison.OrdinalIgnoreCase)) return Task.FromResult((long)0); @@ -219,6 +201,7 @@ public sealed class XivDataAnalyzer } catch (Exception e) { + _failedCalculatedTris.Add(hash); _configService.Current.TriangleDictionary[hash] = 0; _configService.Save(); _logger.LogWarning(e, "Could not parse file {file}", filePath);