Buildings.AddBuildingMesh C# (CSharp) Method

AddBuildingMesh() private method

Adds a building mesh
private AddBuildingMesh ( Building, building ) : void
building Building,
return void
    private void AddBuildingMesh(Building building)
    {
        building.MyGameObject.GetComponent<MeshFilter> ().mesh = new Mesh ();

        Mesh mesh = building.MyGameObject.GetComponent<MeshFilter>().mesh;
        //Quaternion rot = Quaternion.Euler(0, rotation, 0);

        //get mesh details
        List<int> triangles = mesh.vertexCount == 0 ? new List<int>() : new List<int> (mesh.GetTriangles (0));
        List<Vector3> vertices = new List<Vector3> (mesh.vertices);
        List<Vector3> normals = new List<Vector3> (mesh.normals);
        List<Vector2> uvs = new List<Vector2> (mesh.uv);

        //get last triangle
        int last = vertices.Count;

        //front quad
        Vector3 TL = new Vector3 (+building.Size.x, + building.Size.z, -building.Size.y);
        Vector3 TR = new Vector3 (-building.Size.x, + building.Size.z, -building.Size.y);
        Vector3 BL = new Vector3 (+building.Size.x, 0f, -building.Size.y);
        Vector3 BR = new Vector3 (-building.Size.x, 0f, -building.Size.y);

        int[] tris = null;
        Vector3[] norms = null;
        Vector2[] uv = null;
        this.GetQuad(new Vector3[]{TL,TR,BL,BR},ref last,out tris,out norms, out uv);

        triangles.AddRange (tris);
        normals.AddRange (norms);
        vertices.AddRange (new Vector3[]{TL,TR,BL,BR});
        uvs.AddRange (uv);

        //right quad
        TL = new Vector3 (+building.Size.x, +building.Size.z, +building.Size.y);
        TR = new Vector3 (+building.Size.x, +building.Size.z, -building.Size.y);
        BL = new Vector3 (+building.Size.x, 0f, +building.Size.y);
        BR = new Vector3 (+building.Size.x, 0f, -building.Size.y);

        tris = null;
        norms = null;
        uv = null;
        this.GetQuad(new Vector3[]{TL,TR,BL,BR},ref last,out tris,out norms, out uv);

        triangles.AddRange (tris);
        normals.AddRange (norms);
        vertices.AddRange (new Vector3[]{TL,TR,BL,BR});
        uvs.AddRange (uv);

        //left quad
        TL = new Vector3 (-building.Size.x, +building.Size.z, -building.Size.y);
        TR = new Vector3 (-building.Size.x, +building.Size.z, +building.Size.y);
        BL = new Vector3 (-building.Size.x, 0f, -building.Size.y);
        BR = new Vector3 (-building.Size.x, 0f, +building.Size.y);

        tris = null;
        norms = null;
        uv = null;
        this.GetQuad(new Vector3[]{TL,TR,BL,BR},ref last,out tris,out norms, out uv);

        triangles.AddRange (tris);
        normals.AddRange (norms);
        vertices.AddRange (new Vector3[]{TL,TR,BL,BR});
        uvs.AddRange (uv);

        //back quad
        TL = new Vector3 (-building.Size.x, +building.Size.z, +building.Size.y);
        TR = new Vector3 (+building.Size.x, +building.Size.z, +building.Size.y);
        BL = new Vector3 (-building.Size.x, 0f, +building.Size.y);
        BR = new Vector3 (+building.Size.x, 0f, +building.Size.y);

        tris = null;
        norms = null;
        uv = null;
        this.GetQuad(new Vector3[]{TL,TR,BL,BR},ref last,out tris,out norms, out uv);

        triangles.AddRange (tris);
        normals.AddRange (norms);
        vertices.AddRange (new Vector3[]{TL,TR,BL,BR});
        uvs.AddRange (uv);

        //top quad
        TL = new Vector3 (+building.Size.x, +building.Size.z, +building.Size.y);
        TR = new Vector3 (-building.Size.x, +building.Size.z, +building.Size.y);
        BL = new Vector3 (+building.Size.x, +building.Size.z, -building.Size.y);
        BR = new Vector3 (-building.Size.x, +building.Size.z, -building.Size.y);

        tris = null;
        norms = null;
        uv = null;
        this.GetQuad(new Vector3[]{TL,TR,BL,BR},ref last,out tris,out norms, out uv);

        triangles.AddRange (tris);
        normals.AddRange (norms);
        vertices.AddRange (new Vector3[]{TL,TR,BL,BR});
        uvs.AddRange (uv);

        mesh.vertices = vertices.ToArray();
        mesh.triangles = triangles.ToArray();
        mesh.uv = uvs.ToArray();
        mesh.RecalculateNormals ();
        //mesh.normals = normals.ToArray();
    }