// Should only build once!
    public RenderGeometry Build()
    {
        RenderGeometry g = new RenderGeometry();

        foreach (Face f in faces)
        {
            g.CombineGeometry(surfaceComponents[f]);
        }
        foreach (Halfedge e in halfedges)
        {
            if (connections.ContainsKey(e) && connections.ContainsKey(e.opposite))
            {
                List <Halfedge> list1 = connections[e];
                List <Halfedge> list2 = connections[e.opposite];
                if (list1.Count != list2.Count)
                {
                    throw new Exception("Cannot connect two surface blocks, segment count doesn't match.");
                }
                for (int i = 0; i < list1.Count; i++)
                {
                    g.ConnectEdges(list1[i], list2[list1.Count - 1 - i]);
                }
                connections.Remove(e);
                connections.Remove(e.opposite);
            }
        }
        return(g);
    }
Ejemplo n.º 2
0
        private RenderGeometry BuildTileBaseColliderGeometry()
        {
            RenderGeometry geometry1 = BuildTileBaseGeometry();
            RenderGeometry geometry2 = BuildTileBaseGeometry();

            geometry2.ApplyScale(0.5f * Vector3.one);
            geometry2.ApplyOffset(-0.01f * parent.faceNormal);
            geometry1.CombineGeometry(geometry2);

            return(geometry1);
        }