// Update is called once per frame
    void Update()
    {
        mc.ListClear();
        //if (factor > 1) { inc = false; }
        //if (factor < -1) { inc = true; }
        /*if (inc) {*/
        factor   += Time.deltaTime * 0.4f;
        keyTimer += Time.deltaTime;
        //}
        //else if (!inc) { factor -= 0.005f; }
        for (int i = 0; i < 40; ++i)
        {
            for (int j = 0; j < 40; ++j)
            {
                cubeSize = size * 0.5f;
                key(i, j);
                if (!MusicOn)
                {
                    NoiseAnim(i, j);
                    this.GetComponent <AudioSource>().enabled = false;
                }
                if (MusicOn)
                {
                    this.GetComponent <AudioSource>().enabled = true;
                    SoundAnim(i, j);
                }

                // top of the cube
                // t0 is top left point
                Vector3 t0 = new Vector3(cubeSize.x + size.x * i * 1.2f, coordy, -cubeSize.z + size.z * j * 1.2f);
                Vector3 t1 = new Vector3(-cubeSize.x + size.x * i * 1.2f, coordy, -cubeSize.z + size.z * j * 1.2f);
                Vector3 t2 = new Vector3(-cubeSize.x + size.x * i * 1.2f, coordy, cubeSize.z + size.z * j * 1.2f);
                Vector3 t3 = new Vector3(cubeSize.x + size.x * i * 1.2f, coordy, cubeSize.z + size.z * j * 1.2f);
                // bottom of the cube
                Vector3 b0 = new Vector3(cubeSize.x + size.x * i * 1.2f, -cubeSize.y, -cubeSize.z + size.z * j * 1.2f);
                Vector3 b1 = new Vector3(-cubeSize.x + size.x * i * 1.2f, -cubeSize.y, -cubeSize.z + size.z * j * 1.2f);
                Vector3 b2 = new Vector3(-cubeSize.x + size.x * i * 1.2f, -cubeSize.y, cubeSize.z + size.z * j * 1.2f);
                Vector3 b3 = new Vector3(cubeSize.x + size.x * i * 1.2f, -cubeSize.y, cubeSize.z + size.z * j * 1.2f);
                //Debug.Log(t0);
                //Debug.Log(Perlin.Noise(t0));
                //Debug.Log(Perlin.Noise(100, 100, Random.Range(0, 1000) * 0.1f));

                // Top square
                mc.BuildTriangle(t0, t1, t2);
                mc.BuildTriangle(t0, t2, t3);
                // Bottom square
                mc.BuildTriangle(b2, b1, b0);
                mc.BuildTriangle(b3, b2, b0);
                // Back square
                mc.BuildTriangle(b0, t1, t0);
                mc.BuildTriangle(b0, b1, t1);
                mc.BuildTriangle(b1, t2, t1);
                mc.BuildTriangle(b1, b2, t2);
                mc.BuildTriangle(b2, t3, t2);
                mc.BuildTriangle(b2, b3, t3);
                mc.BuildTriangle(b3, t0, t3);
                mc.BuildTriangle(b3, b0, t0);
            }
        }

        if (coordy > 20f)
        {
            GameObject instR = Instantiate(ring, new Vector3(-50, coordy, 0), Quaternion.identity);
            Destroy(instR, 5f);
            if (coordy > 30f)
            {
                GameObject instF = Instantiate(firework, new Vector3(-50, coordy, 0), Quaternion.identity);
                Destroy(instF, 10f);
            }
        }
        meshFilter.mesh = mc.CreateMesh();
    }