Hi, what’s the proper way to use a tagMask + a graphMask in a Path? I have the following code where I’m trying to constrain the path to nodes with tag 3, but I am seeing nodes with tag 1 in the returned path as well.
// request path using city graph
var graph = targetTown.WaterUnitGraph;
var graphMask = 1 << (int)graph.graphIndex;
var path = ABPath.Construct(
//Utils.Double3ToVector(startPos - targetCity.absCenter),
//Utils.Double3ToVector(endPos - targetCity.absCenter),
CCVoxelFarmHelper.SimSpaceToRender(Utils.Double3ToVector(startPos - targetCity.absCenter)),
CCVoxelFarmHelper.SimSpaceToRender(Utils.Double3ToVector(endPos - targetCity.absCenter)),
delegate (Path p)
{
// todo : funnel simplification
foreach (var node in p.path)
{
Debug.Log("node.Tag: " + node.Tag);
}
if (!p.error && p.vectorPath.Count > 0)
{
pathPoints.Add(startPos);
foreach (var point in p.vectorPath)
{
var transformed = CCVoxelFarmHelper.RenderSpaceToSimSpace(Utils.Vector3ToDouble3(point)) + targetCity.absCenter;
pathPoints.Add(transformed);
//pathPoints.Add(Utils.Vector3ToDouble3(point) + targetCity.absCenter);
}
pathPoints.Add(endPos);
status = PathStatus.Finished;
}
else
{
status = PathStatus.Failure;
}
}
);
var tagMask = CCNavMeshIntegration.Instance.GetWaterUnitTagBitmask();
path.nnConstraint = new NNConstraint()
{
tags = tagMask,
distanceMetric = Pathfinding.DistanceMetric.ClosestAsSeenFromAbove(),
graphMask = graphMask,
constrainTags = true,
constrainWalkability = true,
walkable = true,
};
//path.nnConstraint = new NNConstraint() { distanceMetric = DistanceMetric.ClosestAsSeenFromAbove(), graphMask = graphMask };
string binaryString = Convert.ToString(tagMask, 2).PadLeft(32, '0');
Debug.Log("tag mask: " + binaryString);
binaryString = Convert.ToString(graphMask, 2).PadLeft(32, '0');
Debug.Log("graph mask: " + binaryString);
AstarPath.StartPath(path);