Maybe fix pathfinding nullref (#12085)
This commit is contained in:
@@ -31,11 +31,6 @@ public sealed partial class PathfindingSystem
|
|||||||
|
|
||||||
// Probably can't pool polys as there might be old pathfinding refs to them.
|
// Probably can't pool polys as there might be old pathfinding refs to them.
|
||||||
|
|
||||||
private readonly ObjectPool<HashSet<PathPoly>> _neighborPolyPool =
|
|
||||||
new DefaultObjectPool<HashSet<PathPoly>>(new DefaultPooledObjectPolicy<HashSet<PathPoly>>(), MaxPoolSize);
|
|
||||||
|
|
||||||
private static int MaxPoolSize = Environment.ProcessorCount * 2 * ChunkSize * ChunkSize;
|
|
||||||
|
|
||||||
private void InitializeGrid()
|
private void InitializeGrid()
|
||||||
{
|
{
|
||||||
SubscribeLocalEvent<GridInitializeEvent>(OnGridInit);
|
SubscribeLocalEvent<GridInitializeEvent>(OnGridInit);
|
||||||
@@ -561,7 +556,7 @@ public sealed partial class PathfindingSystem
|
|||||||
(Vector2) (poly.TopRight + Vector2i.One) / SubStep + polyOffset);
|
(Vector2) (poly.TopRight + Vector2i.One) / SubStep + polyOffset);
|
||||||
var polyData = points[x * SubStep + poly.Left, y * SubStep + poly.Bottom].Data;
|
var polyData = points[x * SubStep + poly.Left, y * SubStep + poly.Bottom].Data;
|
||||||
|
|
||||||
var neighbors = _neighborPolyPool.Get();
|
var neighbors = new HashSet<PathPoly>();
|
||||||
tilePoly.Add(new PathPoly(grid.GridEntityId, chunk.Origin, GetIndex(x, y), box, polyData, neighbors));
|
tilePoly.Add(new PathPoly(grid.GridEntityId, chunk.Origin, GetIndex(x, y), box, polyData, neighbors));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -574,7 +569,7 @@ public sealed partial class PathfindingSystem
|
|||||||
{
|
{
|
||||||
var index = x * ChunkSize + y;
|
var index = x * ChunkSize + y;
|
||||||
var polys = chunkPolys[index];
|
var polys = chunkPolys[index];
|
||||||
ref var existing = ref chunk.Polygons[index];
|
var existing = chunk.Polygons[index];
|
||||||
|
|
||||||
var isEquivalent = true;
|
var isEquivalent = true;
|
||||||
|
|
||||||
@@ -629,13 +624,11 @@ public sealed partial class PathfindingSystem
|
|||||||
foreach (var neighbor in poly.Neighbors)
|
foreach (var neighbor in poly.Neighbors)
|
||||||
{
|
{
|
||||||
neighbor.Neighbors.Remove(poly);
|
neighbor.Neighbors.Remove(poly);
|
||||||
poly.Neighbors.Remove(neighbor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If any paths have a ref to it let them know that the class is no longer a valid node.
|
// If any paths have a ref to it let them know that the class is no longer a valid node.
|
||||||
poly.Data.Flags = PathfindingBreadcrumbFlag.Invalid;
|
poly.Data.Flags = PathfindingBreadcrumbFlag.Invalid;
|
||||||
poly.Neighbors.Clear();
|
poly.Neighbors.Clear();
|
||||||
_neighborPolyPool.Return(poly.Neighbors);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BuildNavmesh(GridPathfindingChunk chunk, GridPathfindingComponent component)
|
private void BuildNavmesh(GridPathfindingChunk chunk, GridPathfindingComponent component)
|
||||||
|
|||||||
Reference in New Issue
Block a user