private void AddDiscToFace(GenMesh genmesh, GenMeshFace fac) { var faceWidth = fac.Width; var faceHeight = fac.Height; var depth = 0.125f * Mathf.Min(faceWidth, faceHeight); genmesh.CreateCylinder( 32, depth * 3, depth * 4, depth, GetFaceMatrix(fac, fac.CalculateCenterBounds() + fac.Normal * depth * 0.5f)); genmesh.CreateCylinder( 32, depth * 1.25f, depth * 2.25f, 0.0f, GetFaceMatrix(fac, fac.CalculateCenterBounds() + fac.Normal * depth * 1.05f)); /* * for vert in result['verts']: * for face in vert.link_faces: * face.material_index = Material.glow_disc * */ }
private void AddSurfaceAntennaToFace(GenMesh genmesh, GenMeshFace fac) { var horizontalStep = Random.Range(4, 10); var verticalStep = Random.Range(4, 10); for (var h = 0; h < horizontalStep; h++) { var top = Vector3.Lerp(fac.LeftTop.Coordinates, fac.RightTop.Coordinates, ((float)h + 1) / (horizontalStep + 1)); var bottom = Vector3.Lerp(fac.LeftBottom.Coordinates, fac.RightBottom.Coordinates, ((float)h + 1) / (horizontalStep + 1)); for (var v = 0; v < verticalStep; v++) { if (Random.value > 0.9f) { var pos = Vector3.Lerp(top, bottom, ((float)v + 1) / (verticalStep + 1)); var faceSize = Mathf.Sqrt(fac.Area()); var depth = Random.Range(0.1f, 1.5f) * faceSize; var depthShort = depth * Random.Range(0.02f, 0.15f); var baseDiameter = Random.Range(0.005f, 0.05f); var materialIndex = Random.value > 0.5f ? 0 /*Material.hull*/ : 1;/*Material.hull_dark*/ // Spire var numSegments = Random.Range(3, 6); genmesh.CreateCylinder(numSegments, 0, baseDiameter, depth, GetFaceMatrix(fac, pos + fac.Normal * depth * 0.5f)); //for vert in result['verts']: // for vert_face in vert.link_faces: // vert_face.material_index = material_index // } // Base genmesh.CreateCylinder( numSegments, baseDiameter * Random.Range(1f, 1.5f), baseDiameter * Random.Range(1.5f, 2f), depthShort, GetFaceMatrix(fac, pos + fac.Normal * depthShort * 0.45f)); // for vert in result['verts']: //for vert_face in vert.link_faces: // vert_face.material_index = material_index } } } }
private void AddWeaponsToFace(GenMesh genmesh, GenMeshFace fac) { var horizontalStep = Random.Range(1, 3); var verticalStep = Random.Range(1, 3); var numSegments = 16; var weaponSize = 0.5f * Mathf.Min(fac.Width / (horizontalStep + 2), fac.Height / (verticalStep + 2)); var weaponDepth = weaponSize * 0.2f; for (var h = 0; h < horizontalStep; h++) { var top = Vector3.Lerp(fac.LeftTop.Coordinates, fac.RightTop.Coordinates, (float)(h + 1) / (horizontalStep + 1)); var bottom = Vector3.Lerp(fac.LeftBottom.Coordinates, fac.RightBottom.Coordinates, (float)(h + 1) / (horizontalStep + 1)); for (var v = 0; v < verticalStep; v++) { var pos = Vector3.Lerp(top, bottom, (float)(v + 1) / (verticalStep + 1)); var faceMatrix = GetFaceMatrix(fac, pos + fac.Normal * weaponDepth * 0.5f) * Matrix4x4.Rotate(Quaternion.AngleAxis(Random.Range(0, 90), new Vector3(0, 0, 1))); // Turret foundation genmesh.CreateCylinder(numSegments, weaponSize * 0.9f, weaponSize, weaponDepth, faceMatrix); // Turret left guard var leftGuardMat = faceMatrix * Matrix4x4.Rotate(Quaternion.AngleAxis(90, new Vector3(0, 1, 0))) * Matrix4x4.Translate(new Vector3(0, 0, weaponSize * 0.6f)); genmesh.CreateCylinder(numSegments, weaponSize * 0.6f, weaponSize * 0.5f, weaponDepth * 2, leftGuardMat); // Turret right guard var rightGuardMat = faceMatrix * Matrix4x4.Rotate(Quaternion.AngleAxis(90, new Vector3(0, 1, 0))) * Matrix4x4.Translate(new Vector3(0, 0, weaponSize * -0.6f)); genmesh.CreateCylinder(numSegments, weaponSize * 0.5f, weaponSize * 0.6f, weaponDepth * 2, rightGuardMat); // Turret housing var upwardAngle = Random.Range(0, 45); var turretHouseMat = faceMatrix * Matrix4x4.Rotate(Quaternion.AngleAxis(upwardAngle, new Vector3(1, 0, 0))) * Matrix4x4.Translate(new Vector3(0, weaponSize * -0.4f, 0)); genmesh.CreateCylinder(8, weaponSize * 0.4f, weaponSize * 0.4f, weaponDepth * 5, turretHouseMat); // Turret barrels L + R genmesh.CreateCylinder(8, weaponSize * 0.1f, weaponSize * 0.1f, weaponDepth * 6, turretHouseMat * Matrix4x4.Translate(new Vector3(weaponSize * 0.2f, 0, -weaponSize))); genmesh.CreateCylinder(8, weaponSize * 0.1f, weaponSize * 0.1f, weaponDepth * 6, turretHouseMat * Matrix4x4.Translate(new Vector3(weaponSize * -0.2f, 0, -weaponSize))); } } }
private void AddCylindersToFace(GenMesh genmesh, GenMeshFace fac) { var horizontalStep = Random.Range(1, 3); var verticalStep = Random.Range(1, 3); var numberOfSegments = Random.Range(6, 12); var faceWidth = fac.Width; var faceHeight = fac.Height; var cylinderDepth = 1.3f * Mathf.Min(faceWidth / (horizontalStep + 2), faceHeight / (verticalStep + 2)); var cylinderSize = cylinderDepth * 0.5f; for (var h = 0; h < horizontalStep; h++) { var top = Vector3.Lerp(fac.LeftTop.Coordinates, fac.RightTop.Coordinates, ((float)h + 1) / (horizontalStep + 1)); var bottom = Vector3.Lerp(fac.LeftBottom.Coordinates, fac.RightBottom.Coordinates, ((float)h + 1) / (horizontalStep + 1)); for (var v = 0; v < verticalStep; v++) { var pos = Vector3.Lerp(top, bottom, ((float)v + 1) / (verticalStep + 1)); var cylinderMatrix = GetFaceMatrix(fac, pos) * Matrix4x4.Rotate(Quaternion.AngleAxis(90, new Vector3(0, 1, 0))); genmesh.CreateCylinder(numberOfSegments, cylinderSize, cylinderSize, cylinderDepth, cylinderMatrix); } } }