예제 #1
0
 /// <summary>
 /// DON'T FORGET TO IMPOSE OWNERSHIP AFTER CREATION!
 /// </summary>
 /// <param name="nodes"></param>
 public Polygon(List<MeshNode> nodes)
 {
     mEdges = new List<Edge>();
     int length = nodes.Count;
     for (int i = 0; i < length; i++)
     {
         Edge e = new Edge(nodes[i % length], nodes[(i + 1) % length]);
         e.ImposeOwnership();
         mEdges.Add(e);
     }
 }
예제 #2
0
        /// <summary>
        /// For code testing purpose:
        /// Returns a new special-shaped mesh instance.
        /// </summary>
        public static NavigationMesh[] GetTestInstanceForCleanUp()
        {
            NavigationMesh[] result = new NavigationMesh[3];
            for (int x = 0; x < 3; x++)
            {
                MeshNode a = new MeshNode(0, 0);
                MeshNode b = new MeshNode(0, 10);
                MeshNode c = new MeshNode(5, 10);
                MeshNode d = new MeshNode(5, 0);
                MeshNode e = new MeshNode(0, 15);
                MeshNode f = new MeshNode(10, 15);
                MeshNode g = new MeshNode(10, 10);
                MeshNode h = new MeshNode(15, 15);
                MeshNode i = new MeshNode(15, 0);
                MeshNode j = new MeshNode(10, 0);
                Edge ab = new Edge(a, b);
                ab.ImposeOwnership();
                Edge bc = new Edge(b, c);
                bc.ImposeOwnership();
                Edge cd = new Edge(c, d);
                cd.ImposeOwnership();
                Edge da = new Edge(d, a);
                da.ImposeOwnership();

                Edge be = new Edge(b, e); be.ImposeOwnership();
                Edge ef = new Edge(e, f); ef.ImposeOwnership();
                Edge fg = new Edge(f, g); fg.ImposeOwnership();
                Edge gc = new Edge(g, c); gc.ImposeOwnership();
                Edge cb = new Edge(c, b); cb.ImposeOwnership();

                Edge fh = new Edge(f, h); fh.ImposeOwnership();
                Edge hi = new Edge(h, i); hi.ImposeOwnership();
                Edge ij = new Edge(i, j); ij.ImposeOwnership();
                Edge jg = new Edge(j, g); jg.ImposeOwnership();
                Edge gf = new Edge(g, f); gf.ImposeOwnership();

                Polygon pA = new Polygon(new List<Edge> { ab, bc, cd, da });
                pA.ImposeOwnership();
                Polygon pB = new Polygon(new List<Edge> { be, ef, fg, gc, cb });
                pB.ImposeOwnership();
                Polygon pC = new Polygon(new List<Edge> { fh, hi, ij, jg, gf });
                pC.ImposeOwnership();

                result[x] = new NavigationMesh(15,15);
                result[x].AddPolygon(pA);
                result[x].AddPolygon(pB);
                result[x].AddPolygon(pC);
            }
            return result;
        }
예제 #3
0
파일: Edge.cs 프로젝트: bethge/GalaticChaos
 /// <summary>
 /// pure function
 /// </summary>
 /// <param name="edge2"></param>
 /// <returns></returns>
 public Edge GetUnion(Edge edge2)
 {
     Debug.Assert(mEndNode == edge2.mStartNode, "Edge union failed!");
     Edge result = new Edge(mStartNode, edge2.mEndNode);
     result.ImposeOwnership();
     return result;
 }
예제 #4
0
파일: Edge.cs 프로젝트: bethge/GalaticChaos
 public List<Edge> GetSplit(MeshNode node)
 {
     Debug.Assert(mStartNode != node && mEndNode != node);
     Debug.Assert(HelperMethods.PointOnLine(node.mVector, mStartNode.mVector, mEndNode.mVector, 0));
     Edge e1 = new Edge(mStartNode, node);
     Edge e2 = new Edge(node, mEndNode);
     e1.ImposeOwnership();
     e2.ImposeOwnership();
     return new List<Edge>{e1, e2};
 }