Example #1
0
 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);
 }
Example #2
0
        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();
        }