private bool CheckTriangleValidity(NodeTriangle triangle) { if (!NodeToNodeRayCast(triangle.p1, triangle.p2)) { return(false); } if (!NodeToNodeRayCast(triangle.p1, triangle.p3)) { return(false); } if (!NodeToNodeRayCast(triangle.p2, triangle.p3)) { return(false); } return(true); }
public void GenerateNavMesh() { List <Triangulator.Geometry.Point> vertices = new List <Triangulator.Geometry.Point>(); Nodes.ForEach(i => vertices.Add(new Triangulator.Geometry.Point(i.position.X * Bloodbender.meterToPixel, i.position.Y * Bloodbender.meterToPixel))); var list = Triangulator.Delauney.Triangulate(vertices); foreach (var triangle in list) { PathFinderNode node1 = GetNodeFromPosition(vertices[triangle.p1]); PathFinderNode node2 = GetNodeFromPosition(vertices[triangle.p2]); PathFinderNode node3 = GetNodeFromPosition(vertices[triangle.p3]); graph.AddVertex(node1); graph.AddVertex(node2); graph.AddVertex(node3); node1.neighbors.Add(node2); node1.neighbors.Add(node3); graph.AddEdge(new Edge <PathFinderNode>(node1, node2)); graph.AddEdge(new Edge <PathFinderNode>(node1, node3)); node2.neighbors.Add(node1); node2.neighbors.Add(node3); graph.AddEdge(new Edge <PathFinderNode>(node2, node3)); node3.neighbors.Add(node1); node3.neighbors.Add(node2); NodeTriangle nodeTriangle = new NodeTriangle(); nodeTriangle.p1 = node1; nodeTriangle.p2 = node2; nodeTriangle.p3 = node3; allTriangle.Add(nodeTriangle); } DeleteInvalidLink(); ThickenessCorrection(); }