Beispiel #1
0
 public MeshMember(Vertex vertex, Triangle triangle, Material material, SmoothingGroup sG)
 {
     this.Vertex         = vertex;
     this.Triangle       = triangle;
     this.Material       = material;
     this.SmoothingGroup = sG;
 }
Beispiel #2
0
 public void RemoveSmoothingGroup(SmoothingGroup sG)
 {
     for (int i = 0; i < triangles.Count; i++)
     {
         triangles[i].RemoveSmoothingGroup(sG);
     }
 }
Beispiel #3
0
 public void AddSmoothingGroup(SmoothingGroup sG)
 {
     if (!smoothingGroups.Contains(sG))
     {
         smoothingGroups.Add(sG);
         sG.Add(this);
     }
 }
Beispiel #4
0
 public void RemoveSmoothingGroup(SmoothingGroup sG)
 {
     smoothingGroups.Remove(sG);
     sG.Remove(this);
 }
Beispiel #5
0
 public void RemoveSmoothingGroup(SmoothingGroup sG)
 {
     triangles[0].RemoveSmoothingGroup(sG);
 }
Beispiel #6
0
 public void AddSmoothingGroup(SmoothingGroup sG)
 {
     triangles[0].AddSmoothingGroup(sG);
 }
Beispiel #7
0
    public void Generate()
    {
        Debug.Log("Generating");
        polygon.Clear();
        rotatedPolygons.Clear();
        strips.Clear();
        ModularMesh mesh = new ModularMesh((ModularMesh)null);


        for (int i = 0; i < vertexObjects.Length; i++)
        {
            polygon.Add(new Vertex(vertexObjects[i].transform.position));
        }
        polygon.MakeClockwise();
        rotatedPolygons.Add(polygon);

        if (thisOrThat == buildingType.version1)
        {
            for (int i = 1; i <= times; i++)
            {
                if (i % 10 == 0)
                {
                    rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Rotate(angle * 10));
                }
                else
                {
                    rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Rotate(angle));
                }

                rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Translate(Vector3.up * height));

                strips.Add(new QuadStrip(rotatedPolygons[rotatedPolygons.Count - 1], rotatedPolygons[rotatedPolygons.Count - 2], mesh, MaterialManager.GetMaterial("diffuseWhite")));
            }

            ceiling = rotatedPolygons[rotatedPolygons.Count - 1].Triangulate(mesh, MaterialManager.GetMaterial("diffuseWhite"));
        }
        if (thisOrThat == buildingType.version2)
        {
            for (int i = 1; i <= times; i++)
            {
                if (i % 10 == 0)
                {
                    rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Rotate(angle * 10).Translate(height * Vector3.up));
                }
                else
                {
                    rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Rotate(angle).Translate(height * Vector3.up));
                }

                strips.Add(new QuadStrip(rotatedPolygons[rotatedPolygons.Count - 1], rotatedPolygons[rotatedPolygons.Count - 2], mesh, MaterialManager.GetMaterial("diffuseWhite")));
            }

            ceiling = rotatedPolygons[rotatedPolygons.Count - 1].Triangulate(mesh, MaterialManager.GetMaterial("diffuseWhite"));
        }
        if (thisOrThat == buildingType.version3)
        {
            for (int i = 1; i <= times; i++)
            {
                rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Rotate(angle).Translate(height * Vector3.up));

                strips.Add(new QuadStrip(rotatedPolygons[rotatedPolygons.Count - 1], rotatedPolygons[rotatedPolygons.Count - 2], mesh, MaterialManager.GetMaterial("diffuseWhite")));
            }

            for (int i = 0; i < wallSmoothingGroups.Length; i++)
            {
                wallSmoothingGroups[i] = new SmoothingGroup();
            }

            for (int i = 0; i < strips.Count; i++)
            {
                for (int j = 0; j < strips[i].Quads.Count; j++)
                {
                    strips[j].AddSmoothingGroup(wallSmoothingGroups[i]);
                }
            }

            ceiling = rotatedPolygons[rotatedPolygons.Count - 1].Triangulate(mesh, MaterialManager.GetMaterial("diffuseWhite"));

            ceiling.AddSmoothingGroup(new SmoothingGroup());
        }
        if (thisOrThat == buildingType.version4)
        {
            for (int i = 1; i <= times; i++)
            {
                rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Rotate(angle).Translate(height * Vector3.up).Inset(amount));

                strips.Add(new QuadStrip(rotatedPolygons[rotatedPolygons.Count - 1], rotatedPolygons[rotatedPolygons.Count - 2], mesh, MaterialManager.GetMaterial("diffuseWhite")));
            }

            ceiling = rotatedPolygons[rotatedPolygons.Count - 1].Triangulate(mesh, MaterialManager.GetMaterial("diffuseWhite"));
        }
        if (thisOrThat == buildingType.version5)
        {
            rotatedPolygons.Add(rotatedPolygons[0].Translate(height * Vector3.up));
            strips.Add(new QuadStrip(rotatedPolygons[rotatedPolygons.Count - 1], rotatedPolygons[0], mesh, MaterialManager.GetMaterial("diffuseWhite")));

            ceiling = rotatedPolygons[rotatedPolygons.Count - 1].Triangulate(mesh, MaterialManager.GetMaterial("diffuseWhite"));
        }


        mesh.FillMesh(transform, false);

        rotatedPolygons.Clear();
        strips.Clear();
        ceiling = null;
        Debug.Log("Generating done");
    }