forked from aly/qstbak
363 lines
16 KiB
C#
363 lines
16 KiB
C#
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<MapTextureService> _logger;
|
|
|
|
private uint _loadedTerritoryType;
|
|
|
|
private ISharedImmediateTexture? _resolvedTexture;
|
|
|
|
private List<ISharedImmediateTexture>? _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<MapTextureService> logger)
|
|
{
|
|
_textureProvider = textureProvider;
|
|
_dataManager = dataManager;
|
|
_logger = logger;
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
|
public bool LoadForTerritory(uint territoryType)
|
|
{
|
|
int num = ((territoryType != _loadedTerritoryType) ? (-703602804) : (-703602806));
|
|
List<string> list2 = default(List<string>);
|
|
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<string> 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<string>(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<string>(-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<string>(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<string>(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<string>(1645706687), (IEnumerable<string>)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<string> list3 = new List<string>();
|
|
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<string>(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<string>(-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<string>(-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<string>(-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<TerritoryType>().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<ISharedImmediateTexture>.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<string>(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<string> 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);
|
|
}
|
|
}
|