public static List<MeshFilter> fillCell(Vector3 start, Vector3 end, Vector3 size, Vector3 dimensions, Transform parent, Color color, Vector3 normal) { List<MeshFilter> meshes = new List<MeshFilter> (); // Calculate edge and it's magnitude Vector3 edge = end-start; Vector3 direction = edge.normalized; float magnitude = edge.magnitude; Quaternion rotation = Quaternion.FromToRotation (Vector3.forward, direction); int numCells = (int) Mathf.Floor(magnitude / dimensions.z) + 1; // Floor the number of cells and add one (no Roof method is available) float magnitudeOvershoot = -(magnitude - numCells * dimensions.z); Vector3 startCenter = start + direction * dimensions.z / 2; float overshootSize = dimensions.z - magnitudeOvershoot; for (int i = 0; i < numCells; i++) { Vector3 p = startCenter + i * direction * dimensions.z; if (i == numCells - 1) { if (overshootSize > 0.01f) { size.z = overshootSize; p -= magnitudeOvershoot / 2 * direction; Cell c = new Cell (parent, p, size, rotation, "CellOvershoot", normal); c.setColor(color); meshes.Add(c.getCell ().GetComponent<MeshFilter> ()); } } else { Cell c = new Cell (parent, p, size, rotation, "Cell", normal); c.setColor(color); meshes.Add (c.getCell ().GetComponent<MeshFilter> ()); } } return meshes; }
public override List<MeshFilter> apply (Corner corner) { List<MeshFilter> meshes = new List<MeshFilter>(); Vector3 translateVector = corner.getTranslateVector (); Vector3 p = corner.getVertex ().getPoint (); p = parent.TransformPoint (p); Vector3 scale = this.getCornerScale (); p += Vector3.Scale(translateVector, dimensions / 2); Cell c = new Cell (parent, p, scale, Quaternion.identity, "BrickCorner"); Color finalColor = Color.Lerp (color, Color.black, UnityEngine.Random.value * 0.3f); c.setColor (finalColor); meshes.Add (c.getCell ().GetComponent<MeshFilter> ()); return meshes; }