using System; using System.Collections.Generic; using System.Linq; using System.Numerics; using System.Runtime.CompilerServices; using Dalamud.Interface.Textures; using Dalamud.Interface.Textures.TextureWraps; using Dalamud.Plugin.Services; using Lumina.Excel.Sheets; using Microsoft.Extensions.Logging; namespace LLib.ImGui; public sealed class MapTextureService { private readonly ITextureProvider _textureProvider; private readonly IDataManager _dataManager; private readonly ILogger _logger; private uint _loadedTerritoryType; private ISharedImmediateTexture? _resolvedTexture; private List? _candidateTextures; private bool _failed; private long _retryAtMs; private int _searchFrames; private const int SearchTimeout = 120; private const long RetryDelayMs = 30000L; private ushort _sizeFactor; private short _offsetX; private short _offsetY; public bool IsLoaded => _resolvedTexture != null; public bool IsSearching => _candidateTextures != null; public ushort SizeFactor => _sizeFactor; public MapTextureService(ITextureProvider textureProvider, IDataManager dataManager, ILogger logger) { _textureProvider = textureProvider; _dataManager = dataManager; _logger = logger; } [MethodImpl(MethodImplOptions.NoInlining)] public bool LoadForTerritory(uint territoryType) { int num = ((territoryType != _loadedTerritoryType) ? (-703602804) : (-703602806)); List list2 = default(List); string value = default(string); Map? map = default(Map?); string[] array = default(string[]); string text = default(string); TerritoryType? rowOrDefault = default(TerritoryType?); while (true) { int num2 = num; int num3 = -703602814; int num4 = num2; Map? obj; switch ((num4 | num3) - (num4 & num3)) { default: continue; case 0: return false; case 3: num = ((_200E_206C_202D_200C_200F_206A_202A_200E_200E_202C_202D_202D_202B_206B_206F_206F_200F_206D_206A_206E_202C_206E_200F_200F_206B_202A_206A_202A_200F_206A_206F_206A_200E_200D_206E_206D_206B_206B_200D_206E_202E() >= _retryAtMs) ? (-703602796) : (-703602814)); continue; case 16: num = ((_candidateTextures == null) ? (-703602797) : (-703602813)); continue; case 21: _failed = true; return false; case 1: PollCandidates(); return _resolvedTexture != null; case 7: num = ((!_failed) ? (-703602799) : (-703602816)); continue; case 15: { List list = list2; DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(19, 2); defaultInterpolatedStringHandler.AppendLiteral(global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E(674220722)); defaultInterpolatedStringHandler.AppendFormatted(value); defaultInterpolatedStringHandler.AppendLiteral(global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(-27764842)); defaultInterpolatedStringHandler.AppendFormatted(value); defaultInterpolatedStringHandler.AppendLiteral(global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E(582629916)); list.Add(defaultInterpolatedStringHandler.ToStringAndClear()); num = -703602795; continue; } case 23: _206F_200B_200E_206D_200C_200B_206B_206C_202A_206C_206C_206C_206D_202E_206E_206F_206A_200C_200D_200C_202D_202D_200E_206D_202E_202D_200D_202C_206C_200B_200E_202B_200F_202E_202E_206A_202D_206C_206A_206C_202E((ILogger)_logger, global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E(1609496745), new object[2] { territoryType, _200C_200F_206E_202C_206F_206E_206F_206F_200E_206B_202E_200B_206C_200F_200B_206A_200C_200E_202C_202A_202A_200B_202D_202C_202D_206B_202E_206A_200D_200E_202D_206E_202B_202C_200C_200C_202B_206C_206B_202E_202E(global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E(1645706687), (IEnumerable)list2) }); _candidateTextures = list2.Select((string p) => _202E_206B_206B_200F_206B_206E_202B_202D_200C_200F_202C_202E_200B_206B_200B_202B_202B_200D_202B_202A_202C_202C_206F_206C_206D_200E_202A_200C_200E_200E_202C_202B_206B_200C_202D_202B_200B_202E_200D_206B_202E(_textureProvider, p)).ToList(); PollCandidates(); return _resolvedTexture != null; case 14: num = ((territoryType != _loadedTerritoryType) ? (-703602799) : (-703602811)); continue; case 17: num = ((territoryType != _loadedTerritoryType) ? (-703602796) : (-703602815)); continue; case 20: num = ((map.Value.RowId != 0) ? (-703602808) : (-703602809)); continue; case 19: num = ((territoryType != _loadedTerritoryType) ? (-703602797) : (-703602798)); continue; case 13: return true; case 9: obj = null; break; case 4: num = -703602806; continue; case 2: return false; case 18: array = _202B_200D_202E_202E_200B_206D_206C_206E_200C_200B_200E_202E_202B_200F_202C_200F_202E_206B_200E_206B_200C_202E_206D_206C_206F_206C_202D_200F_200B_200F_202D_206B_202A_206E_206D_206B_206A_202B_202A_200D_202E(text, '/', StringSplitOptions.None); num = ((array.Length == 2) ? (-703602807) : (-703602793)); continue; case 5: _failed = true; return false; case 11: { value = array[0]; string text2 = array[1]; List list3 = new List(); DefaultInterpolatedStringHandler defaultInterpolatedStringHandler2 = new DefaultInterpolatedStringHandler(14, 3); defaultInterpolatedStringHandler2.AppendLiteral(global::_003CModule_003E._206E_202B_206C_202A_202A_200E_202B_202B_206D_200B_200C_206B_200B_206D_202E_202D_206C_202B_200B_206A_202D_206C_202A_200F_202D_200C_200B_200B_200B_200D_202C_206E_206D_202E_200C_206B_206A_206D_202D_202C_202E(1333505234)); defaultInterpolatedStringHandler2.AppendFormatted(text); defaultInterpolatedStringHandler2.AppendLiteral(global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E(-102430846)); defaultInterpolatedStringHandler2.AppendFormatted(value); defaultInterpolatedStringHandler2.AppendFormatted(text2); defaultInterpolatedStringHandler2.AppendLiteral(global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E(-25096421)); list3.Add(defaultInterpolatedStringHandler2.ToStringAndClear()); list2 = list3; num = ((!_206A_200E_206B_206F_206B_200E_202B_206E_202E_200C_206F_206A_202E_200F_206B_206E_206A_200B_200D_202D_200B_202B_206A_200C_202E_206C_206D_206D_206D_206C_200F_202B_200D_200D_202C_206F_206B_206A_206A_206D_202E(text2, global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E(-1596345032))) ? (-703602795) : (-703602803)); continue; } case 6: _failed = true; return false; case 8: num = ((_resolvedTexture == null) ? (-703602804) : (-703602801)); continue; case 22: _resolvedTexture = null; _candidateTextures = null; _failed = false; _retryAtMs = 0L; _loadedTerritoryType = territoryType; _searchFrames = 0; rowOrDefault = _dataManager.GetExcelSheet().GetRowOrDefault(territoryType); num = (rowOrDefault.HasValue ? (-703602802) : (-703602805)); continue; case 10: _sizeFactor = map.Value.SizeFactor; _offsetX = map.Value.OffsetX; _offsetY = map.Value.OffsetY; text = map.Value.Id.ExtractText(); num = ((!_206C_200D_202E_202D_202C_202E_200C_202D_202C_202A_200F_206D_200B_206B_200B_206B_202A_206A_200D_206F_206C_200B_206A_200E_206C_206E_200B_202E_200C_200E_206E_206F_206F_202A_206C_200D_200B_200B_206C_206B_202E(text)) ? (-703602800) : (-703602812)); continue; case 12: obj = rowOrDefault.GetValueOrDefault().Map.ValueNullable; break; } map = obj; num = ((!map.HasValue) ? (-703602809) : (-703602794)); } } [MethodImpl(MethodImplOptions.NoInlining)] private void PollCandidates() { int num = ((_candidateTextures != null) ? 1719406812 : 1719406813); ISharedImmediateTexture current = default(ISharedImmediateTexture); while (true) { int num2 = num; int num3 = 1719406812; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 2: goto IL_004b; case 1: return; case 0: { using (List.Enumerator enumerator = _candidateTextures.GetEnumerator()) { num = -2142994811; while (true) { int num7 = num; num3 = -2142994811; num4 = num7; switch ((num4 | num3) - (num4 & num3)) { case 0: num = (enumerator.MoveNext() ? (-2142994815) : (-2142994809)); break; case 4: current = enumerator.Current; num = ((_202E_200B_200C_200B_206D_200E_200B_206F_200D_206E_202C_206D_200C_206C_200D_202D_206E_200E_206F_200C_206B_200F_200B_206A_206E_200F_202D_200D_200D_202E_202E_200C_200B_206A_206B_202E_206D_202E_202A_202D_202E(current, (IDalamudTextureWrap)null) == null) ? (-2142994811) : (-2142994812)); break; case 3: num = -2142994811; break; case 1: _resolvedTexture = current; _candidateTextures = null; return; case 2: goto end_IL_006e; } continue; end_IL_006e: break; } } int searchFrames = _searchFrames; num3 = 1; num4 = searchFrames; int num8 = num4 ^ num3; int num9 = num4 & num3; _searchFrames = num8 + (num9 + num9); num = ((_searchFrames < 120) ? 613954225 : 613954226); while (true) { int num10 = num; num3 = 613954224; num4 = num10; switch ((num4 | num3) - (num4 & num3)) { case 0: num = 613954226; break; case 2: _206D_206F_202C_200D_202B_202E_200C_200B_206C_206A_206D_202B_206B_202B_206B_202C_202A_206B_202C_200E_206E_200F_200F_206D_202A_206B_206F_206B_200D_200F_200D_206D_200C_206B_200D_202B_200D_206A_206D_200C_202E((ILogger)_logger, global::_003CModule_003E._206E_202B_206C_202A_202A_200E_202B_202B_206D_200B_200C_206B_200B_206D_202E_202D_206C_202B_200B_206A_202D_206C_202A_200F_202D_200C_200B_200B_200B_200D_202C_206E_206D_202E_200C_206B_206A_206D_202D_202C_202E(1519773533), new object[2] { _loadedTerritoryType, 30L }); _candidateTextures = null; _retryAtMs = _200E_206C_202D_200C_200F_206A_202A_200E_200E_202C_202D_202D_202B_206B_206F_206F_200F_206D_206A_206E_202C_206E_200F_200F_206B_202A_206A_202A_200F_206A_206F_206A_200E_200D_206E_206D_206B_206B_200D_206E_202E() + 30000; num = 613954225; break; case 1: return; } } } } continue; IL_004b: num = 1719406813; } } public IDalamudTextureWrap? GetTextureWrap() { ISharedImmediateTexture? resolvedTexture = _resolvedTexture; if (resolvedTexture == null) { return null; } return _202E_200B_200C_200B_206D_200E_200B_206F_200D_206E_202C_206D_200C_206C_200D_202D_206E_200E_206F_200C_206B_200F_200B_206A_206E_200F_202D_200D_200D_202E_202E_200C_200B_206A_206B_202E_206D_202E_202A_202D_202E(resolvedTexture, (IDalamudTextureWrap)null); } public Vector2 WorldToUV(float worldX, float worldZ) { float num = (float)(int)_sizeFactor / 100f; float x = (worldX * num + (float)_offsetX * num + 1024f) / 2048f; float y = (worldZ * num + (float)_offsetY * num + 1024f) / 2048f; return new Vector2(x, y); } public Vector2 UVToWorld(float u, float v) { float num = (float)(int)_sizeFactor / 100f; float x = (u * 2048f - 1024f - (float)_offsetX * num) / num; float y = (v * 2048f - 1024f - (float)_offsetY * num) / num; return new Vector2(x, y); } public Vector2 WorldToScreen(float worldX, float worldZ, Vector2 imagePos, Vector2 imageSize) { Vector2 vector = WorldToUV(worldX, worldZ); return imagePos + vector * imageSize; } public Vector2 ScreenToWorld(Vector2 screenPos, Vector2 imagePos, Vector2 imageSize) { Vector2 vector = (screenPos - imagePos) / imageSize; return UVToWorld(vector.X, vector.Y); } static long _200E_206C_202D_200C_200F_206A_202A_200E_200E_202C_202D_202D_202B_206B_206F_206F_200F_206D_206A_206E_202C_206E_200F_200F_206B_202A_206A_202A_200F_206A_206F_206A_200E_200D_206E_206D_206B_206B_200D_206E_202E() { return Environment.TickCount64; } static bool _206C_200D_202E_202D_202C_202E_200C_202D_202C_202A_200F_206D_200B_206B_200B_206B_202A_206A_200D_206F_206C_200B_206A_200E_206C_206E_200B_202E_200C_200E_206E_206F_206F_202A_206C_200D_200B_200B_206C_206B_202E(string P_0) { return string.IsNullOrEmpty(P_0); } static string[] _202B_200D_202E_202E_200B_206D_206C_206E_200C_200B_200E_202E_202B_200F_202C_200F_202E_206B_200E_206B_200C_202E_206D_206C_206F_206C_202D_200F_200B_200F_202D_206B_202A_206E_206D_206B_206A_202B_202A_200D_202E(string P_0, char P_1, StringSplitOptions P_2) { return P_0.Split(P_1, P_2); } static bool _206A_200E_206B_206F_206B_200E_202B_206E_202E_200C_206F_206A_202E_200F_206B_206E_206A_200B_200D_202D_200B_202B_206A_200C_202E_206C_206D_206D_206D_206C_200F_202B_200D_200D_202C_206F_206B_206A_206A_206D_202E(string P_0, string P_1) { return P_0 != P_1; } static string _200C_200F_206E_202C_206F_206E_206F_206F_200E_206B_202E_200B_206C_200F_200B_206A_200C_200E_202C_202A_202A_200B_202D_202C_202D_206B_202E_206A_200D_200E_202D_206E_202B_202C_200C_200C_202B_206C_206B_202E_202E(string P_0, IEnumerable P_1) { return string.Join(P_0, P_1); } static void _206F_200B_200E_206D_200C_200B_206B_206C_202A_206C_206C_206C_206D_202E_206E_206F_206A_200C_200D_200C_202D_202D_200E_206D_202E_202D_200D_202C_206C_200B_200E_202B_200F_202E_202E_206A_202D_206C_206A_206C_202E(ILogger P_0, string P_1, object[] P_2) { P_0.LogDebug(P_1, P_2); } static IDalamudTextureWrap _202E_200B_200C_200B_206D_200E_200B_206F_200D_206E_202C_206D_200C_206C_200D_202D_206E_200E_206F_200C_206B_200F_200B_206A_206E_200F_202D_200D_200D_202E_202E_200C_200B_206A_206B_202E_206D_202E_202A_202D_202E(ISharedImmediateTexture P_0, IDalamudTextureWrap P_1) { return P_0.GetWrapOrDefault(P_1); } static void _206D_206F_202C_200D_202B_202E_200C_200B_206C_206A_206D_202B_206B_202B_206B_202C_202A_206B_202C_200E_206E_200F_200F_206D_202A_206B_206F_206B_200D_200F_200D_206D_200C_206B_200D_202B_200D_206A_206D_200C_202E(ILogger P_0, string P_1, object[] P_2) { P_0.LogWarning(P_1, P_2); } static ISharedImmediateTexture _202E_206B_206B_200F_206B_206E_202B_202D_200C_200F_202C_202E_200B_206B_200B_202B_202B_200D_202B_202A_202C_202C_206F_206C_206D_200E_202A_200C_200E_200E_202C_202B_206B_200C_202D_202B_200B_202E_200D_206B_202E(ITextureProvider P_0, string P_1) { return P_0.GetFromGame(P_1); } }