using System; using System.Numerics; using Dalamud.Plugin; using Dalamud.Plugin.Ipc; namespace QuestionableCompanion.Services; public class VNavmeshIPC : IDisposable { private readonly ICallGateSubscriber pointOnFloorSubscriber; private readonly ICallGateSubscriber nearestPointSubscriber; private readonly ICallGateSubscriber isReadySubscriber; public VNavmeshIPC(IDalamudPluginInterface pluginInterface) { pointOnFloorSubscriber = pluginInterface.GetIpcSubscriber("vnavmesh.Query.Mesh.PointOnFloor"); nearestPointSubscriber = pluginInterface.GetIpcSubscriber("vnavmesh.Query.Mesh.NearestPoint"); isReadySubscriber = pluginInterface.GetIpcSubscriber("vnavmesh.Nav.IsReady"); } public bool IsReady() { try { return isReadySubscriber.InvokeFunc(); } catch { return false; } } public Vector3? FindPointOnFloor(Vector3 position, bool allowUnlandable = false, float searchRadius = 10f) { try { return pointOnFloorSubscriber.InvokeFunc(position, allowUnlandable, searchRadius); } catch (Exception) { return null; } } public Vector3? FindNearestPoint(Vector3 position, float horizontalRadius = 10f, float verticalRadius = 5f) { try { return nearestPointSubscriber.InvokeFunc(position, horizontalRadius, verticalRadius); } catch (Exception) { return null; } } public void Dispose() { } }