qstbak/Questionable/Questionable.External/NavmeshIpc.cs
2026-08-17 20:27:25 +10:00

927 lines
34 KiB
C#

using System;
using System.Collections.Generic;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using Dalamud.Plugin;
using Dalamud.Plugin.Ipc;
using Dalamud.Plugin.Ipc.Exceptions;
using Dalamud.Plugin.Services;
using Microsoft.Extensions.Logging;
namespace Questionable.External;
internal sealed class NavmeshIpc
{
private sealed class Subscribers
{
public readonly ICallGateSubscriber<bool> IsNavReady;
public readonly ICallGateSubscriber<Vector3, Vector3, bool, CancellationToken, Task<List<Vector3>>> NavPathfind;
public readonly ICallGateSubscriber<Vector3, Vector3, bool, float, Task<List<Vector3>>> NavPathfindWithTolerance;
public readonly ICallGateSubscriber<bool> NavPathfindInProgress;
public readonly ICallGateSubscriber<int> NavNumQueuedRequests;
public readonly ICallGateSubscriber<List<Vector3>, bool, object> PathMoveTo;
public readonly ICallGateSubscriber<object> PathStop;
public readonly ICallGateSubscriber<bool> PathIsRunning;
public readonly ICallGateSubscriber<List<Vector3>> PathListWaypoints;
public readonly ICallGateSubscriber<float, object> PathSetTolerance;
public readonly ICallGateSubscriber<Vector3, bool, float, Vector3?> QueryPointOnFloor;
public readonly ICallGateSubscriber<Vector3, float, float, Vector3?> QueryNearestPoint;
public readonly ICallGateSubscriber<Vector3, float, float, Vector3?> QueryNearestPointReachable;
public readonly ICallGateSubscriber<float> BuildProgress;
public readonly ICallGateSubscriber<bool> NavReload;
public readonly ICallGateSubscriber<bool> NavRebuild;
[MethodImpl(MethodImplOptions.NoInlining)]
public Subscribers(IDalamudPluginInterface pluginInterface, Configuration.ENavigationProvider provider)
{
string text = ((provider == Configuration.ENavigationProvider.WigglyNavShim) ? global::_003CModule_003E._202A_206B_206D_200C_206B_200E_200E_202A_200B_202E_206A_206F_206A_206B_200E_200D_200F_206D_206E_206A_206F_200C_206C_202C_202A_206E_202C_200B_206E_202A_206E_202B_206B_202E_202E_206A_206D_206D_202C_200F_202E<string>(400780601) : global::_003CModule_003E._206C_202A_206D_206A_206E_202A_202B_206F_206D_200F_202D_200F_202D_206A_202C_202B_206D_206A_200E_200E_202D_202D_200D_200C_200D_200D_206D_206E_202A_200F_206E_206C_206D_206A_206D_202B_200F_200D_206E_200C_202E<string>(281533512));
IsNavReady = pluginInterface.GetIpcSubscriber<bool>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._202A_206B_206D_200C_206B_200E_200E_202A_200B_202E_206A_206F_206A_206B_200E_200D_200F_206D_206E_206A_206F_200C_206C_202C_202A_206E_202C_200B_206E_202A_206E_202B_206B_202E_202E_206A_206D_206D_202C_200F_202E<string>(-2043293393)));
NavPathfind = pluginInterface.GetIpcSubscriber<Vector3, Vector3, bool, CancellationToken, Task<List<Vector3>>>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._200B_206B_206B_200E_200B_206A_206D_206B_206E_200F_206A_206F_206E_202B_200F_206C_202B_206D_206E_200F_200C_200E_206F_200D_200F_200B_202B_202B_202B_202B_206D_202C_206A_206D_200B_206E_200D_206A_206F_200F_202E<string>(1869644565)));
NavPathfindWithTolerance = pluginInterface.GetIpcSubscriber<Vector3, Vector3, bool, float, Task<List<Vector3>>>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E<string>(-1343590681)));
NavPathfindInProgress = pluginInterface.GetIpcSubscriber<bool>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._200B_206B_206B_200E_200B_206A_206D_206B_206E_200F_206A_206F_206E_202B_200F_206C_202B_206D_206E_200F_200C_200E_206F_200D_200F_200B_202B_202B_202B_202B_206D_202C_206A_206D_200B_206E_200D_206A_206F_200F_202E<string>(-1113861054)));
NavNumQueuedRequests = pluginInterface.GetIpcSubscriber<int>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E<string>(1214172476)));
PathMoveTo = pluginInterface.GetIpcSubscriber<List<Vector3>, bool, object>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._202E_206C_200F_206B_206A_202A_202C_206F_200C_206C_202B_206B_206D_206D_206D_202D_206E_202E_206C_206E_206D_202C_206F_200D_202D_202E_206A_206D_202A_206A_202B_200D_200C_206D_202B_200B_200D_200C_206E_206B_202E<string>(2135724883)));
PathStop = pluginInterface.GetIpcSubscriber<object>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._202E_206C_200F_206B_206A_202A_202C_206F_200C_206C_202B_206B_206D_206D_206D_202D_206E_202E_206C_206E_206D_202C_206F_200D_202D_202E_206A_206D_202A_206A_202B_200D_200C_206D_202B_200B_200D_200C_206E_206B_202E<string>(1489726535)));
PathIsRunning = pluginInterface.GetIpcSubscriber<bool>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._206C_202A_206D_206A_206E_202A_202B_206F_206D_200F_202D_200F_202D_206A_202C_202B_206D_206A_200E_200E_202D_202D_200D_200C_200D_200D_206D_206E_202A_200F_206E_206C_206D_206A_206D_202B_200F_200D_206E_200C_202E<string>(-1992325887)));
PathListWaypoints = pluginInterface.GetIpcSubscriber<List<Vector3>>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._202A_206B_206D_200C_206B_200E_200E_202A_200B_202E_206A_206F_206A_206B_200E_200D_200F_206D_206E_206A_206F_200C_206C_202C_202A_206E_202C_200B_206E_202A_206E_202B_206B_202E_202E_206A_206D_206D_202C_200F_202E<string>(-1844977859)));
PathSetTolerance = pluginInterface.GetIpcSubscriber<float, object>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E<string>(1161845014)));
QueryPointOnFloor = pluginInterface.GetIpcSubscriber<Vector3, bool, float, Vector3?>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E<string>(865017884)));
QueryNearestPoint = pluginInterface.GetIpcSubscriber<Vector3, float, float, Vector3?>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E<string>(2130817597)));
QueryNearestPointReachable = pluginInterface.GetIpcSubscriber<Vector3, float, float, Vector3?>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._200B_206B_206B_200E_200B_206A_206D_206B_206E_200F_206A_206F_206E_202B_200F_206C_202B_206D_206E_200F_200C_200E_206F_200D_200F_200B_202B_202B_202B_202B_206D_202C_206A_206D_200B_206E_200D_206A_206F_200F_202E<string>(-1867865423)));
BuildProgress = pluginInterface.GetIpcSubscriber<float>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._200B_206B_206B_200E_200B_206A_206D_206B_206E_200F_206A_206F_206E_202B_200F_206C_202B_206D_206E_200F_200C_200E_206F_200D_200F_200B_202B_202B_202B_202B_206D_202C_206A_206D_200B_206E_200D_206A_206F_200F_202E<string>(2132035295)));
NavReload = pluginInterface.GetIpcSubscriber<bool>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._206C_202A_206D_206A_206E_202A_202B_206F_206D_200F_202D_200F_202D_206A_202C_202B_206D_206A_200E_200E_202D_202D_200D_200C_200D_200D_206D_206E_202A_200F_206E_206C_206D_206A_206D_202B_200F_200D_206E_200C_202E<string>(885142654)));
NavRebuild = pluginInterface.GetIpcSubscriber<bool>(_206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(text, global::_003CModule_003E._202E_206C_200F_206B_206A_202A_202C_206F_200C_206C_202B_206B_206D_206D_206D_202D_206E_202E_206C_206E_206D_202C_206F_200D_202D_202E_206A_206D_202A_206A_202B_200D_200C_206D_202B_200B_200D_200C_206E_206B_202E<string>(-819256700)));
}
static string _206A_206C_202A_200E_200F_206C_206B_202C_200B_206C_200B_202A_206D_206D_202A_200B_200E_200F_202D_206D_206A_206D_206A_202E_200B_202D_200C_206C_202D_200C_200C_200B_206B_206B_206F_206C_200D_206F_200E_206B_202E(string P_0, string P_1)
{
return P_0 + P_1;
}
}
private readonly IDalamudPluginInterface _pluginInterface;
private readonly Configuration _configuration;
private readonly WigglyNavIpc _wigglyNavIpc;
private readonly WigglyNavAvailability _wigglyNavAvailability;
private readonly IChatGui _chatGui;
private readonly ILogger<NavmeshIpc> _logger;
private readonly ICallGateSubscriber<object> _vnavmeshStop;
private Configuration.ENavigationProvider _activeProvider;
private Subscribers _subscribers;
private bool _fallbackNoticed;
private bool UseNative
{
get
{
int num = ((_configuration.General.NavigationProvider != Configuration.ENavigationProvider.WigglyNav) ? (-1473368197) : (-1473368200));
while (true)
{
int num2 = num;
int num3 = -1473368199;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 0:
goto IL_0053;
case 2:
return false;
case 1:
return _wigglyNavAvailability.IsCompatible;
}
continue;
IL_0053:
num = -1473368200;
}
}
}
private Subscribers S
{
get
{
Configuration.ENavigationProvider navigationProvider = _configuration.General.NavigationProvider;
int num = ((navigationProvider == _activeProvider) ? (-590675720) : (-590675719));
while (true)
{
int num2 = num;
int num3 = -590675720;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 0:
return _subscribers;
case 1:
_subscribers = new Subscribers(_pluginInterface, navigationProvider);
_activeProvider = navigationProvider;
num = -590675720;
break;
case 2:
num = -590675719;
break;
}
}
}
}
public bool IsNavmeshAvailable
{
get
{
int num = ((!UseNative) ? 876244421 : 876244422);
while (true)
{
int num2 = num;
int num3 = 876244423;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 0:
goto IL_0048;
case 1:
return _wigglyNavIpc.IsNavmeshAvailable;
case 2:
try
{
S.IsNavReady.InvokeFunc();
return true;
}
catch (IpcNotReadyError)
{
return false;
}
catch (IpcError)
{
return true;
}
}
continue;
IL_0048:
num = 876244422;
}
}
}
public bool IsReady
{
get
{
int num = ((!UseNative) ? (-1348520719) : (-1348520720));
while (true)
{
int num2 = num;
int num3 = -1348520719;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 2:
goto IL_0048;
case 1:
return _wigglyNavIpc.IsReady;
case 0:
try
{
return S.IsNavReady.InvokeFunc();
}
catch (IpcError)
{
return false;
}
}
continue;
IL_0048:
num = -1348520720;
}
}
}
public bool IsPathRunning
{
get
{
int num = ((!UseNative) ? (-678709680) : (-678709679));
while (true)
{
int num2 = num;
int num3 = -678709680;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 2:
goto IL_0048;
case 1:
return _wigglyNavIpc.IsPathRunning;
case 0:
try
{
return S.PathIsRunning.InvokeFunc();
}
catch (IpcError)
{
return false;
}
}
continue;
IL_0048:
num = -678709679;
}
}
}
public bool IsPathfindInProgress
{
get
{
int num = ((!UseNative) ? 552109104 : 552109107);
while (true)
{
int num2 = num;
int num3 = 552109106;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 0:
goto IL_0046;
case 1:
return _wigglyNavIpc.IsPathfindInProgress;
case 2:
try
{
return S.NavPathfindInProgress.InvokeFunc();
}
catch (IpcError)
{
return false;
}
}
continue;
IL_0046:
num = 552109107;
}
}
}
public int NumQueuedPathfindRequests
{
get
{
int num = ((!UseNative) ? 1053516825 : 1053516826);
while (true)
{
int num2 = num;
int num3 = 1053516827;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 0:
goto IL_0046;
case 1:
return _wigglyNavIpc.NumQueuedPathfindRequests;
case 2:
try
{
return S.NavNumQueuedRequests.InvokeFunc();
}
catch (IpcError)
{
return 0;
}
}
continue;
IL_0046:
num = 1053516826;
}
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
public NavmeshIpc(IDalamudPluginInterface pluginInterface, Configuration configuration, WigglyNavIpc wigglyNavIpc, WigglyNavAvailability wigglyNavAvailability, IChatGui chatGui, ILogger<NavmeshIpc> logger)
{
_pluginInterface = pluginInterface;
_configuration = configuration;
_wigglyNavIpc = wigglyNavIpc;
_wigglyNavAvailability = wigglyNavAvailability;
_chatGui = chatGui;
_logger = logger;
_activeProvider = configuration.General.NavigationProvider;
_subscribers = new Subscribers(pluginInterface, _activeProvider);
_vnavmeshStop = pluginInterface.GetIpcSubscriber<object>(global::_003CModule_003E._202A_206B_206D_200C_206B_200E_200E_202A_200B_202E_206A_206F_206A_206B_200E_200D_200F_206D_206E_206A_206F_200C_206C_202C_202A_206E_202C_200B_206E_202A_206E_202B_206B_202E_202E_206A_206D_206D_202C_200F_202E<string>(1557569534));
}
internal void StopAll()
{
_wigglyNavIpc.Stop();
try
{
_vnavmeshStop.InvokeAction();
}
catch (IpcError)
{
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
private void NoticeFallbackToVnavmesh()
{
int num = (UseNative ? 1523716478 : 1523716477);
while (true)
{
int num2 = num;
int num3 = 1523716478;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 0:
_fallbackNoticed = false;
return;
case 3:
num = ((_configuration.General.NavigationProvider == Configuration.ENavigationProvider.WigglyNav) ? 1523716479 : 1523716478);
break;
case 1:
num = ((!_fallbackNoticed) ? 1523716475 : 1523716474);
break;
case 4:
return;
case 2:
num = 1523716477;
break;
case 5:
_fallbackNoticed = true;
_200F_206F_200D_206C_202A_206D_206C_202A_202A_200E_200D_206C_206E_206B_206E_200C_206A_200C_200F_206C_200D_202C_202D_206E_200E_206A_206F_206C_206A_200D_200F_202C_206A_202D_206D_206A_206E_200B_202A_206A_202E(_chatGui, global::_003CModule_003E._202A_206B_206D_200C_206B_200E_200E_202A_200B_202E_206A_206F_206A_206B_200E_200D_200F_206D_206E_206A_206F_200C_206C_202C_202A_206E_202C_200B_206E_202A_206E_202B_206B_202E_202E_206A_206D_206D_202C_200F_202E<string>(-381498460), global::_003CModule_003E._202A_206B_206D_200C_206B_200E_200E_202A_200B_202E_206A_206F_206A_206B_200E_200D_200F_206D_206E_206A_206F_200C_206C_202C_202A_206E_202C_200B_206E_202A_206E_202B_206B_202E_202E_206A_206D_206D_202C_200F_202E<string>(467221712), (ushort?)(ushort)576);
return;
}
}
}
private async Task<NavPathfindResult> PathfindNative(Vector3 localPlayerPosition, Vector3 targetPosition, bool fly, float tolerance, CancellationToken cancellationToken)
{
int num = 1290670332;
ConfiguredTaskAwaitable<PathfindResult>.ConfiguredTaskAwaiter configuredTaskAwaiter = default(ConfiguredTaskAwaitable<PathfindResult>.ConfiguredTaskAwaiter);
ConfiguredTaskAwaitable<PathfindResult>.ConfiguredTaskAwaiter configuredTaskAwaiter2 = default(ConfiguredTaskAwaitable<PathfindResult>.ConfiguredTaskAwaiter);
while (true)
{
int num2 = num;
int num3 = 1290670335;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 2:
num = 1290670332;
break;
case 4:
await configuredTaskAwaiter;
num = 1290670334;
break;
case 1:
configuredTaskAwaiter = configuredTaskAwaiter2;
configuredTaskAwaiter2 = default(ConfiguredTaskAwaitable<PathfindResult>.ConfiguredTaskAwaiter);
num = 1290670335;
break;
case 3:
configuredTaskAwaiter = _wigglyNavIpc.Pathfind(localPlayerPosition, targetPosition, fly, tolerance, cancellationToken).ConfigureAwait(continueOnCapturedContext: false).GetAwaiter();
num = (configuredTaskAwaiter.IsCompleted ? 1290670335 : 1290670331);
break;
case 0:
{
PathfindResult result = configuredTaskAwaiter.GetResult();
return new NavPathfindResult(result.Waypoints, HasPartialInfo: true, result.IsPartial, result.EndDistance);
}
}
}
}
private static async Task<NavPathfindResult> WrapLegacyPathfind(Task<List<Vector3>> pathfind)
{
int num = -802136330;
ConfiguredTaskAwaitable<List<Vector3>>.ConfiguredTaskAwaiter configuredTaskAwaiter = default(ConfiguredTaskAwaitable<List<Vector3>>.ConfiguredTaskAwaiter);
ConfiguredTaskAwaitable<List<Vector3>>.ConfiguredTaskAwaiter configuredTaskAwaiter2 = default(ConfiguredTaskAwaitable<List<Vector3>>.ConfiguredTaskAwaiter);
while (true)
{
int num2 = num;
int num3 = -802136334;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 0:
num = -802136330;
break;
case 2:
await configuredTaskAwaiter;
num = -802136335;
break;
case 3:
configuredTaskAwaiter = configuredTaskAwaiter2;
configuredTaskAwaiter2 = default(ConfiguredTaskAwaitable<List<Vector3>>.ConfiguredTaskAwaiter);
num = -802136333;
break;
case 4:
configuredTaskAwaiter = pathfind.ConfigureAwait(continueOnCapturedContext: false).GetAwaiter();
num = (configuredTaskAwaiter.IsCompleted ? (-802136333) : (-802136336));
break;
case 1:
return new NavPathfindResult(configuredTaskAwaiter.GetResult(), HasPartialInfo: false, IsPartial: false, 0f);
}
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
public void Stop()
{
int num = ((!UseNative) ? 1744217165 : 1744217166);
while (true)
{
int num2 = num;
int num3 = 1744217164;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 3:
return;
case 2:
_wigglyNavIpc.Stop();
return;
case 0:
num = 1744217166;
break;
case 1:
num = (IsNavmeshAvailable ? 1744217160 : 1744217167);
break;
case 4:
try
{
S.PathStop.InvokeAction();
return;
}
catch (IpcError ipcError)
{
_202D_206A_206A_206E_202E_200C_206D_202C_200B_200E_200F_202B_200D_206B_200C_202B_206C_200D_206E_206C_200F_200D_206A_200B_200C_200B_206F_206B_200F_206E_206B_202C_202E_202B_200D_200D_200E_202C_200D_206B_202E((ILogger)_logger, (Exception)ipcError, global::_003CModule_003E._202A_206B_206D_200C_206B_200E_200E_202A_200B_202E_206A_206F_206A_206B_200E_200D_200F_206D_206E_206A_206F_200C_206C_202C_202A_206E_202C_200B_206E_202A_206E_202B_206B_202E_202E_206A_206D_206D_202C_200F_202E<string>(-1450190224), Array.Empty<object>());
return;
}
}
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
public void Reload()
{
int num = ((!UseNative) ? (-215489094) : (-215489092));
while (true)
{
int num2 = num;
int num3 = -215489090;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 3:
return;
case 2:
_wigglyNavIpc.Reload();
return;
case 0:
num = -215489092;
break;
case 4:
num = (IsNavmeshAvailable ? (-215489089) : (-215489091));
break;
case 1:
try
{
S.NavReload.InvokeFunc();
return;
}
catch (IpcError ipcError)
{
_202D_206A_206A_206E_202E_200C_206D_202C_200B_200E_200F_202B_200D_206B_200C_202B_206C_200D_206E_206C_200F_200D_206A_200B_200C_200B_206F_206B_200F_206E_206B_202C_202E_202B_200D_200D_200E_202C_200D_206B_202E((ILogger)_logger, (Exception)ipcError, global::_003CModule_003E._202A_206B_206D_200C_206B_200E_200E_202A_200B_202E_206A_206F_206A_206B_200E_200D_200F_206D_206E_206A_206F_200C_206C_202C_202A_206E_202C_200B_206E_202A_206E_202B_206B_202E_202E_206A_206D_206D_202C_200F_202E<string>(-282340693), Array.Empty<object>());
return;
}
}
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
public void Rebuild()
{
int num = ((!UseNative) ? (-428977095) : (-428977089));
while (true)
{
int num2 = num;
int num3 = -428977091;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 1:
return;
case 4:
num = (IsNavmeshAvailable ? (-428977090) : (-428977092));
break;
case 2:
_wigglyNavIpc.Rebuild();
return;
case 0:
num = -428977089;
break;
case 3:
try
{
S.NavRebuild.InvokeFunc();
return;
}
catch (IpcError ipcError)
{
_202D_206A_206A_206E_202E_200C_206D_202C_200B_200E_200F_202B_200D_206B_200C_202B_206C_200D_206E_206C_200F_200D_206A_200B_200C_200B_206F_206B_200F_206E_206B_202C_202E_202B_200D_200D_200E_202C_200D_206B_202E((ILogger)_logger, (Exception)ipcError, global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E<string>(856449063), Array.Empty<object>());
return;
}
}
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
public Task<NavPathfindResult> Pathfind(Vector3 localPlayerPosition, Vector3 targetPosition, bool fly, CancellationToken cancellationToken)
{
NoticeFallbackToVnavmesh();
int num = ((!UseNative) ? (-990840737) : (-990840738));
while (true)
{
int num2 = num;
int num3 = -990840737;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 4:
num = -990840738;
break;
case 0:
num = (IsNavmeshAvailable ? (-990840740) : (-990840739));
break;
case 1:
return PathfindNative(localPlayerPosition, targetPosition, fly, 0f, cancellationToken);
case 2:
return Task.FromResult(EmptyPathfindResult());
case 3:
try
{
S.PathSetTolerance.InvokeAction(0.25f);
return WrapLegacyPathfind(S.NavPathfind.InvokeFunc(localPlayerPosition, targetPosition, fly, cancellationToken));
}
catch (IpcError ipcError)
{
_202D_206A_206A_206E_202E_200C_206D_202C_200B_200E_200F_202B_200D_206B_200C_202B_206C_200D_206E_206C_200F_200D_206A_200B_200C_200B_206F_206B_200F_206E_206B_202C_202E_202B_200D_200D_200E_202C_200D_206B_202E((ILogger)_logger, (Exception)ipcError, global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E<string>(-1378323233), Array.Empty<object>());
return Task.FromException<NavPathfindResult>(ipcError);
}
}
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
public Task<NavPathfindResult> PathfindWithTolerance(Vector3 localPlayerPosition, Vector3 targetPosition, bool fly, float tolerance)
{
NoticeFallbackToVnavmesh();
int num = ((!UseNative) ? 104441860 : 104441857);
while (true)
{
int num2 = num;
int num3 = 104441856;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 3:
return Task.FromResult(EmptyPathfindResult());
case 4:
num = (IsNavmeshAvailable ? 104441856 : 104441859);
break;
case 1:
return PathfindNative(localPlayerPosition, targetPosition, fly, tolerance, CancellationToken.None);
case 2:
num = 104441857;
break;
case 0:
try
{
S.PathSetTolerance.InvokeAction(tolerance);
return WrapLegacyPathfind(S.NavPathfindWithTolerance.InvokeFunc(localPlayerPosition, targetPosition, fly, tolerance));
}
catch (IpcError ipcError)
{
_202D_206A_206A_206E_202E_200C_206D_202C_200B_200E_200F_202B_200D_206B_200C_202B_206C_200D_206E_206C_200F_200D_206A_200B_200C_200B_206F_206B_200F_206E_206B_202C_202E_202B_200D_200D_200E_202C_200D_206B_202E((ILogger)_logger, (Exception)ipcError, global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E<string>(1825421646), Array.Empty<object>());
return Task.FromException<NavPathfindResult>(ipcError);
}
}
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
public void MoveTo(List<Vector3> position, bool fly, float arrivalTolerance)
{
NoticeFallbackToVnavmesh();
int num = ((!UseNative) ? (-101859239) : (-101859237));
while (true)
{
int num2 = num;
int num3 = -101859238;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 6:
return;
case 3:
num = (IsNavmeshAvailable ? (-101859233) : (-101859234));
break;
case 0:
num = -101859237;
break;
case 4:
return;
case 1:
num = (_wigglyNavIpc.MoveTo(position, fly, arrivalTolerance) ? (-101859236) : (-101859240));
break;
case 2:
_200E_200D_206A_206C_202A_202E_206D_202D_206B_200E_206B_200E_200F_206E_200C_200C_206D_206D_206B_200C_200C_206B_200C_200B_206D_202A_200D_200E_200C_206F_206E_206F_206B_202E_206C_200B_202B_200C_200E_206C_202E((ILogger)_logger, global::_003CModule_003E._202E_206C_200F_206B_206A_202A_202C_206F_200C_206C_202B_206B_206D_206D_206D_202D_206E_202E_206C_206E_206D_202C_206F_200D_202D_202E_206A_206D_202A_206A_202B_200D_200C_206D_202B_200B_200D_200C_206E_206B_202E<string>(1935526843), Array.Empty<object>());
num = -101859236;
break;
case 5:
Stop();
try
{
S.PathMoveTo.InvokeAction(position, fly);
return;
}
catch (IpcError ipcError)
{
_202D_206A_206A_206E_202E_200C_206D_202C_200B_200E_200F_202B_200D_206B_200C_202B_206C_200D_206E_206C_200F_200D_206A_200B_200C_200B_206F_206B_200F_206E_206B_202C_202E_202B_200D_200D_200E_202C_200D_206B_202E((ILogger)_logger, (Exception)ipcError, global::_003CModule_003E._206C_202A_206D_206A_206E_202A_202B_206F_206D_200F_202D_200F_202D_206A_202C_202B_206D_206A_200E_200E_202D_202D_200D_200C_200D_200D_206D_206E_202A_200F_206E_206C_206D_206A_206D_202B_200F_200D_206E_200C_202E<string>(-45410338), Array.Empty<object>());
return;
}
}
}
}
public Vector3? GetPointOnFloor(Vector3 position, bool unlandable)
{
int num = ((!UseNative) ? (-1834554284) : (-1834554281));
while (true)
{
int num2 = num;
int num3 = -1834554283;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 0:
goto IL_0049;
case 2:
return _wigglyNavIpc.GetPointOnFloor(position, unlandable, 0.2f);
case 1:
try
{
return S.QueryPointOnFloor.InvokeFunc(position, unlandable, 0.2f);
}
catch (IpcError)
{
return null;
}
}
continue;
IL_0049:
num = -1834554281;
}
}
public Vector3? GetPointOnFloor(Vector3 position, bool unlandable, float halfExtentXZ)
{
int num = ((!UseNative) ? 1192134162 : 1192134163);
while (true)
{
int num2 = num;
int num3 = 1192134162;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 2:
goto IL_0049;
case 1:
return _wigglyNavIpc.GetPointOnFloor(position, unlandable, halfExtentXZ);
case 0:
try
{
return S.QueryPointOnFloor.InvokeFunc(position, unlandable, halfExtentXZ);
}
catch (IpcError)
{
return null;
}
}
continue;
IL_0049:
num = 1192134163;
}
}
public Vector3? FindNearestMeshPoint(Vector3 position, float halfExtentXZ, float halfExtentY)
{
int num = ((!UseNative) ? 564309347 : 564309346);
while (true)
{
int num2 = num;
int num3 = 564309347;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 2:
goto IL_004b;
case 1:
return _wigglyNavIpc.FindNearestMeshPoint(position, halfExtentXZ, halfExtentY);
case 0:
try
{
return S.QueryNearestPoint.InvokeFunc(position, halfExtentXZ, halfExtentY);
}
catch (IpcError)
{
return null;
}
}
continue;
IL_004b:
num = 564309346;
}
}
public Vector3? FindNearestReachableMeshPoint(Vector3 position, float halfExtentXZ, float halfExtentY)
{
int num = ((!UseNative) ? 1954017115 : 1954017114);
while (true)
{
int num2 = num;
int num3 = 1954017115;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 2:
goto IL_0049;
case 1:
return _wigglyNavIpc.FindNearestReachableMeshPoint(position, halfExtentXZ, halfExtentY);
case 0:
try
{
return S.QueryNearestPointReachable.InvokeFunc(position, halfExtentXZ, halfExtentY);
}
catch (IpcError)
{
return null;
}
}
continue;
IL_0049:
num = 1954017114;
}
}
public List<Vector3> GetWaypoints()
{
int num = ((!UseNative) ? 59476464 : 59476467);
while (true)
{
int num2 = num;
int num3 = 59476466;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 0:
goto IL_0048;
case 1:
return _wigglyNavIpc.GetWaypoints();
case 2:
if (IsPathRunning)
{
try
{
return S.PathListWaypoints.InvokeFunc();
}
catch (IpcError)
{
return new List<Vector3>();
}
}
return new List<Vector3>();
}
continue;
IL_0048:
num = 59476467;
}
}
public int GetBuildProgress()
{
int num = ((!UseNative) ? 1484625177 : 1484625178);
while (true)
{
int num2 = num;
int num3 = 1484625179;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 0:
goto IL_004b;
case 1:
return _wigglyNavIpc.GetBuildProgress();
case 2:
try
{
float num7 = S.BuildProgress.InvokeFunc();
num = ((!(num7 < 0f)) ? 405562124 : 405562127);
while (true)
{
int num8 = num;
num3 = 405562125;
num4 = num8;
int num9 = num4 + num3;
int num10 = num4 & num3;
switch (num9 - (num10 + num10))
{
case 0:
goto IL_00bf;
case 2:
return 100;
case 1:
return (int)(num7 * 100f);
}
continue;
IL_00bf:
num = 405562127;
}
}
catch (IpcError)
{
return 0;
}
}
continue;
IL_004b:
num = 1484625178;
}
}
private static NavPathfindResult EmptyPathfindResult()
{
return new NavPathfindResult(new List<Vector3>(), HasPartialInfo: false, IsPartial: false, 0f);
}
static void _200F_206F_200D_206C_202A_206D_206C_202A_202A_200E_200D_206C_206E_206B_206E_200C_206A_200C_200F_206C_200D_202C_202D_206E_200E_206A_206F_206C_206A_200D_200F_202C_206A_202D_206D_206A_206E_200B_202A_206A_202E(IChatGui P_0, string P_1, string P_2, ushort? P_3)
{
P_0.Print(P_1, P_2, P_3);
}
static void _202D_206A_206A_206E_202E_200C_206D_202C_200B_200E_200F_202B_200D_206B_200C_202B_206C_200D_206E_206C_200F_200D_206A_200B_200C_200B_206F_206B_200F_206E_206B_202C_202E_202B_200D_200D_200E_202C_200D_206B_202E(ILogger P_0, Exception P_1, string P_2, object[] P_3)
{
P_0.LogWarning(P_1, P_2, P_3);
}
static void _200E_200D_206A_206C_202A_202E_206D_202D_206B_200E_206B_200E_200F_206E_200C_200C_206D_206D_206B_200C_200C_206B_200C_200B_206D_202A_200D_200E_200C_206F_206E_206F_206B_202E_206C_200B_202B_200C_200E_206C_202E(ILogger P_0, string P_1, object[] P_2)
{
P_0.LogWarning(P_1, P_2);
}
}