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();
}