forked from mirror/DotRecast
class DtStatus => readonly struct DtStatus
This commit is contained in:
parent
7bca7922eb
commit
b75537d0b1
|
@ -698,7 +698,7 @@ namespace DotRecast.Detour.Crowd
|
||||||
// _telemetry.RecordPathWaitTime(ag.targetReplanTime);
|
// _telemetry.RecordPathWaitTime(ag.targetReplanTime);
|
||||||
// Poll path queue.
|
// Poll path queue.
|
||||||
DtStatus status = ag.targetPathQueryResult.status;
|
DtStatus status = ag.targetPathQueryResult.status;
|
||||||
if (status != null && status.IsFailed())
|
if (status.IsFailed())
|
||||||
{
|
{
|
||||||
// Path find failed, retry if the target location is still
|
// Path find failed, retry if the target location is still
|
||||||
// valid.
|
// valid.
|
||||||
|
@ -714,7 +714,7 @@ namespace DotRecast.Detour.Crowd
|
||||||
|
|
||||||
ag.targetReplanTime = 0;
|
ag.targetReplanTime = 0;
|
||||||
}
|
}
|
||||||
else if (status != null && status.IsSuccess())
|
else if (status.IsSuccess())
|
||||||
{
|
{
|
||||||
List<long> path = ag.corridor.GetPath();
|
List<long> path = ag.corridor.GetPath();
|
||||||
if (0 == path.Count)
|
if (0 == path.Count)
|
||||||
|
|
|
@ -26,14 +26,12 @@ namespace DotRecast.Detour.Crowd
|
||||||
{
|
{
|
||||||
/// Path find start and end location.
|
/// Path find start and end location.
|
||||||
public RcVec3f startPos = new RcVec3f();
|
public RcVec3f startPos = new RcVec3f();
|
||||||
|
|
||||||
public RcVec3f endPos = new RcVec3f();
|
public RcVec3f endPos = new RcVec3f();
|
||||||
public long startRef;
|
public long startRef;
|
||||||
public long endRef;
|
public long endRef;
|
||||||
public IDtQueryFilter filter;
|
|
||||||
|
|
||||||
/// < TODO: This is potentially dangerous!
|
|
||||||
public readonly DtPathQueryResult result = new DtPathQueryResult();
|
public readonly DtPathQueryResult result = new DtPathQueryResult();
|
||||||
|
public IDtQueryFilter filter; // < TODO: This is potentially dangerous!
|
||||||
|
|
||||||
public DtNavMeshQuery navQuery;
|
public DtNavMeshQuery navQuery;
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ namespace DotRecast.Detour.Crowd
|
||||||
queue.RemoveFirst();
|
queue.RemoveFirst();
|
||||||
|
|
||||||
// Handle query start.
|
// Handle query start.
|
||||||
if (q.result.status == null)
|
if (q.result.status.IsEmpty())
|
||||||
{
|
{
|
||||||
q.navQuery = new DtNavMeshQuery(navMesh);
|
q.navQuery = new DtNavMeshQuery(navMesh);
|
||||||
q.result.status = q.navQuery.InitSlicedFindPath(q.startRef, q.endRef, q.startPos, q.endPos, q.filter, 0);
|
q.result.status = q.navQuery.InitSlicedFindPath(q.startRef, q.endRef, q.startPos, q.endPos, q.filter, 0);
|
||||||
|
@ -89,7 +89,6 @@ namespace DotRecast.Detour.Crowd
|
||||||
q.startRef = startRef;
|
q.startRef = startRef;
|
||||||
q.endPos = endPos;
|
q.endPos = endPos;
|
||||||
q.endRef = endRef;
|
q.endRef = endRef;
|
||||||
q.result.status = null;
|
|
||||||
q.filter = filter;
|
q.filter = filter;
|
||||||
queue.AddLast(q);
|
queue.AddLast(q);
|
||||||
return q.result;
|
return q.result;
|
||||||
|
|
|
@ -22,8 +22,10 @@ using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
namespace DotRecast.Detour
|
namespace DotRecast.Detour
|
||||||
{
|
{
|
||||||
public class DtStatus
|
public readonly struct DtStatus
|
||||||
{
|
{
|
||||||
|
public static readonly DtStatus Empty = new DtStatus(0);
|
||||||
|
|
||||||
// High level status.
|
// High level status.
|
||||||
public static readonly DtStatus DT_FAILURE = new DtStatus(1u << 31); // Operation failed.
|
public static readonly DtStatus DT_FAILURE = new DtStatus(1u << 31); // Operation failed.
|
||||||
public static readonly DtStatus DT_SUCCSESS = new DtStatus(1u << 30); // Operation succeed.
|
public static readonly DtStatus DT_SUCCSESS = new DtStatus(1u << 30); // Operation succeed.
|
||||||
|
@ -40,7 +42,6 @@ namespace DotRecast.Detour
|
||||||
public static readonly DtStatus DT_PARTIAL_RESULT = new DtStatus(1 << 6); // Query did not reach the end location, returning best guess.
|
public static readonly DtStatus DT_PARTIAL_RESULT = new DtStatus(1 << 6); // Query did not reach the end location, returning best guess.
|
||||||
public static readonly DtStatus DT_ALREADY_OCCUPIED = new DtStatus(1 << 7); // A tile has already been assigned to the given x,y coordinate
|
public static readonly DtStatus DT_ALREADY_OCCUPIED = new DtStatus(1 << 7); // A tile has already been assigned to the given x,y coordinate
|
||||||
|
|
||||||
|
|
||||||
public readonly uint Value;
|
public readonly uint Value;
|
||||||
|
|
||||||
private DtStatus(uint value)
|
private DtStatus(uint value)
|
||||||
|
@ -48,6 +49,12 @@ namespace DotRecast.Detour
|
||||||
Value = value;
|
Value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public bool IsEmpty()
|
||||||
|
{
|
||||||
|
return 0 == Value;
|
||||||
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public bool IsSuccess()
|
public bool IsSuccess()
|
||||||
{
|
{
|
||||||
|
@ -71,5 +78,17 @@ namespace DotRecast.Detour
|
||||||
{
|
{
|
||||||
return 0 != (Value & DT_PARTIAL_RESULT.Value);
|
return 0 != (Value & DT_PARTIAL_RESULT.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static DtStatus operator |(DtStatus left, DtStatus right)
|
||||||
|
{
|
||||||
|
return new DtStatus(left.Value | right.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static DtStatus operator &(DtStatus left, DtStatus right)
|
||||||
|
{
|
||||||
|
return new DtStatus(left.Value & right.Value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -34,7 +34,7 @@ namespace DotRecast.Detour.QueryResults
|
||||||
|
|
||||||
public static Result<T> InvalidParam<T>()
|
public static Result<T> InvalidParam<T>()
|
||||||
{
|
{
|
||||||
return new Result<T>(default, DtStatus.DT_INVALID_PARAM, null);
|
return new Result<T>(default, DtStatus.DT_FAILURE | DtStatus.DT_INVALID_PARAM, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Result<T> Failure<T>(string message)
|
public static Result<T> Failure<T>(string message)
|
||||||
|
@ -44,7 +44,7 @@ namespace DotRecast.Detour.QueryResults
|
||||||
|
|
||||||
public static Result<T> InvalidParam<T>(string message)
|
public static Result<T> InvalidParam<T>(string message)
|
||||||
{
|
{
|
||||||
return new Result<T>(default, DtStatus.DT_INVALID_PARAM, message);
|
return new Result<T>(default, DtStatus.DT_FAILURE | DtStatus.DT_INVALID_PARAM, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Result<T> Failure<T>(T result)
|
public static Result<T> Failure<T>(T result)
|
||||||
|
|
|
@ -160,7 +160,7 @@ public class FindPathTest : AbstractDetourTest
|
||||||
var endPos = endPoss[i];
|
var endPos = endPoss[i];
|
||||||
query.InitSlicedFindPath(startRef, endRef, startPos, endPos, filter, DtNavMeshQuery.DT_FINDPATH_ANY_ANGLE);
|
query.InitSlicedFindPath(startRef, endRef, startPos, endPos, filter, DtNavMeshQuery.DT_FINDPATH_ANY_ANGLE);
|
||||||
DtStatus status = DtStatus.DT_IN_PROGRESS;
|
DtStatus status = DtStatus.DT_IN_PROGRESS;
|
||||||
while (status == DtStatus.DT_IN_PROGRESS)
|
while (status.IsInProgress())
|
||||||
{
|
{
|
||||||
Result<int> res = query.UpdateSlicedFindPath(10);
|
Result<int> res = query.UpdateSlicedFindPath(10);
|
||||||
status = res.status;
|
status = res.status;
|
||||||
|
|
Loading…
Reference in New Issue