// 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); }
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); }