public void GenerateMesh() { _vertices.Clear(); _triangles.Clear(); if (ParamCubeSize == null) { return; } // we need to determine the outline of the form float size = ParamCubeSize.Value; foreach (LinkPos curr in LinkPosList) { Face mask = curr.Mask; UnitPos currPos = curr.Center; // read mask from linkPos if ((mask & Face.Top) == Face.None) { int deb = _vertices.Count; _vertices.Add(new Vector3(currPos.x, currPos.y + size, currPos.z)); _vertices.Add(new Vector3(currPos.x + size, currPos.y + size, currPos.z)); _vertices.Add(new Vector3(currPos.x + size, currPos.y + size, currPos.z + size)); _vertices.Add(new Vector3(currPos.x, currPos.y + size, currPos.z + size)); AddTriangles(deb); } if ((mask & Face.Bot) == Face.None) { int deb = _vertices.Count; _vertices.Add(new Vector3(currPos.x + size, currPos.y, currPos.z + size)); _vertices.Add(new Vector3(currPos.x + size, currPos.y, currPos.z)); _vertices.Add(new Vector3(currPos.x, currPos.y, currPos.z)); _vertices.Add(new Vector3(currPos.x, currPos.y, currPos.z + size)); AddTriangles(deb); } if ((mask & Face.Right) == Face.None) { int deb = _vertices.Count; _vertices.Add(new Vector3(currPos.x + size, currPos.y, currPos.z + size)); _vertices.Add(new Vector3(currPos.x + size, currPos.y + size, currPos.z + size)); _vertices.Add(new Vector3(currPos.x + size, currPos.y + size, currPos.z)); _vertices.Add(new Vector3(currPos.x + size, currPos.y, currPos.z)); AddTriangles(deb); } if ((mask & Face.Left) == Face.None) { int deb = _vertices.Count; _vertices.Add(new Vector3(currPos.x, currPos.y, currPos.z + size)); _vertices.Add(new Vector3(currPos.x, currPos.y, currPos.z)); _vertices.Add(new Vector3(currPos.x, currPos.y + size, currPos.z)); _vertices.Add(new Vector3(currPos.x, currPos.y + size, currPos.z + size)); AddTriangles(deb); } if ((mask & Face.Front) == Face.None) { int deb = _vertices.Count; _vertices.Add(new Vector3(currPos.x, currPos.y + size, currPos.z)); _vertices.Add(new Vector3(currPos.x, currPos.y, currPos.z)); _vertices.Add(new Vector3(currPos.x + size, currPos.y, currPos.z)); _vertices.Add(new Vector3(currPos.x + size, currPos.y + size, currPos.z)); AddTriangles(deb); } if ((mask & Face.Back) == Face.None) { int deb = _vertices.Count; _vertices.Add(new Vector3(currPos.x + size, currPos.y, currPos.z + size)); _vertices.Add(new Vector3(currPos.x, currPos.y, currPos.z + size)); _vertices.Add(new Vector3(currPos.x, currPos.y + size, currPos.z + size)); _vertices.Add(new Vector3(currPos.x + size, currPos.y + size, currPos.z + size)); AddTriangles(deb); } } CustomMesh.Clear(); CustomMesh.vertices = _vertices.ToArray(); CustomMesh.triangles = _triangles.ToArray(); CustomMesh.RecalculateNormals(); }