62 lines
1.5 KiB
C#
62 lines
1.5 KiB
C#
using System;
|
|
using System.Numerics;
|
|
using Dalamud.Plugin;
|
|
using Dalamud.Plugin.Ipc;
|
|
|
|
namespace QuestionableCompanion.Services;
|
|
|
|
public class VNavmeshIPC : IDisposable
|
|
{
|
|
private readonly ICallGateSubscriber<Vector3, bool, float, Vector3?> pointOnFloorSubscriber;
|
|
|
|
private readonly ICallGateSubscriber<Vector3, float, float, Vector3?> nearestPointSubscriber;
|
|
|
|
private readonly ICallGateSubscriber<bool> isReadySubscriber;
|
|
|
|
public VNavmeshIPC(IDalamudPluginInterface pluginInterface)
|
|
{
|
|
pointOnFloorSubscriber = pluginInterface.GetIpcSubscriber<Vector3, bool, float, Vector3?>("vnavmesh.Query.Mesh.PointOnFloor");
|
|
nearestPointSubscriber = pluginInterface.GetIpcSubscriber<Vector3, float, float, Vector3?>("vnavmesh.Query.Mesh.NearestPoint");
|
|
isReadySubscriber = pluginInterface.GetIpcSubscriber<bool>("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()
|
|
{
|
|
}
|
|
}
|