// Given a face, splits it into a uniform grid and extrudes each grid face // out and back in again, making an exhaust shape. private void AddExhaustToFace(GenMesh genmesh, GenMeshFace faceForExhaust) { // The more square the face is, the more grid divisions it might have var num_cuts = Random.Range(1, (int)(4 - faceForExhaust.AspectRatio)); var result = genmesh.Subdivide(faceForExhaust, num_cuts); var exhaust_length = Random.Range(0.1f, 0.2f); var scaleOuter = 1f / Random.Range(1.3f, 1.6f); var scale_inner = 1f / Random.Range(1.05f, 1.1f); for (var i = 0; i < result.Count(); i++) { var face = result[i]; face.MaterialIndex = 2;// Material.hull_dark; face = ExtrudeFace(genmesh, face, exhaust_length); ScaleFace(genmesh, face, scaleOuter, scaleOuter, scaleOuter); face = ExtrudeFace(genmesh, face, 0); ScaleFace(genmesh, face, scaleOuter * 0.9f, scaleOuter * 0.9f, scaleOuter * 0.9f); var extruded_face_list = new List <GenMeshFace>(); face = ExtrudeFace(genmesh, face, -exhaust_length * 0.9f, extruded_face_list); foreach (var extruded_face in extruded_face_list) { extruded_face.MaterialIndex = 3;// Material.exhaust_burn } ScaleFace(genmesh, face, scale_inner, scale_inner, scale_inner); } }
private void AddGridToFace(GenMesh genmesh, GenMeshFace fac) { var result = genmesh.Subdivide(fac, Random.Range(2, 4)); var gridLength = Random.Range(0.025f, 0.15f); var scale = 0.8f; for (var i = 0; i < result.Length; i++) { var face = result[i]; var materialIndex = Random.value > 0.5f ? 1 /*Material.hull_lights*/ : 4 /*Material.hull*/; var extrudedFaceList = new List <GenMeshFace>(); face = ExtrudeFace(genmesh, face, gridLength, extrudedFaceList); foreach (var f in extrudedFaceList) { if (Mathf.Abs(face.Normal.z) < 0.707) // # side face { f.MaterialIndex = materialIndex; } } ScaleFace(genmesh, face, scale, scale, scale); } }