public override List<MeshFilter> apply (Corner corner) { List<MeshFilter> meshes = new List<MeshFilter> (); Vector3 normal = corner.getNormal (); Vector3 p = corner.getVertex ().getPoint (); p = parent.TransformPoint (p); Vector3 scale = this.getCornerScale (); foreach (HighLevelEdge e in corner.getEdges()) { Vector3 direction = e.getDirection (corner).normalized; // Debug.DrawRay (p, direction * 0.2f, Color.cyan, 200); Quaternion rotation = Quaternion.FromToRotation(Vector3.forward, direction); Vector3 location = p + direction * scale.z / 2 + e.getNormal () * scale.x / 2; Cell c = new Cell (parent, location, scale, rotation, "BrickCorner"); meshes.Add(c.getCell ().GetComponent<MeshFilter> ()); } // 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); return meshes; }
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; }