Ejemplo n.º 1
0
    // Update is called once per frame
    void Update()
    {
        //rotate head :D
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            head.transform.Rotate(0, -0.5f, 0);
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            head.transform.Rotate(0, 0.5f, 0);
        }
        if (Input.GetKey(KeyCode.UpArrow) && (head.transform.eulerAngles.x > 270 || head.transform.eulerAngles.x < 10))
        {
            head.transform.Rotate(-0.5f, 0, 0);
        }
        if (Input.GetKey(KeyCode.DownArrow) && (head.transform.eulerAngles.x >= 260 && head.transform.eulerAngles.x < 360))
        {
            head.transform.Rotate(0.5f, 0, 0);
        }

        //set init
        if (isDone == true)
        {
            dots[init_x, init_y, init_z].GetComponent <DotManage>().dotGenerate();
            dots[init_x, init_y, init_z].GetComponent <DotManage>().state = init;
            alives.Add(dots[init_x, init_y, init_z]);

            switch (dots[init_x, init_y, init_z].GetComponent <DotManage>().state)
            {
            case 0:
                dots[init_x, init_y, init_z].GetComponent <DotManage>().dotDestroy();
                deads.Add(dots[init_x, init_y, init_z]);
                break;

            case 1:
                dots[init_x, init_y, init_z].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = Color.red;
                break;

            case 2:
                dots[init_x, init_y, init_z].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = new Color(1f, 0.64f, 0f);
                break;

            case 3:
                dots[init_x, init_y, init_z].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = Color.yellow;
                break;

            case 4:
                dots[init_x, init_y, init_z].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = Color.green;
                break;

            case 5:
                dots[init_x, init_y, init_z].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = Color.cyan;
                break;

            case 6:
                dots[init_x, init_y, init_z].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = new Color(0.5f, 0f, 0.5f);
                break;

            default:
                dots[init_x, init_y, init_z].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = new Color(0, 0, 0);
                break;
            }

            isDone = false;
        }

        bar  = 4f / (bpm / 60f);
        beat = 1f / ((bpm / 60f) * 2f);

        if (isRun)
        {
            if (sequential)
            {
                follower.GetComponent <Renderer>().enabled = true;
            }
            else
            {
                follower.GetComponent <Renderer>().enabled = false;
            }

            //timeRecent += Time.deltaTime;
            timeRecent2 += Time.deltaTime;

            if (timeRecent == 0)
            {
                timeRecent++;

                cp_dots = new int[n, n, n];

                foreach (GameObject e in alives)
                {
                    DotManage temp = e.GetComponent <DotManage>();

                    if (temp.state < 6)
                    {
                        cp_dots[temp.x, temp.y, temp.z] += temp.state;
                    }

                    if (temp.state >= 6)
                    {
                        cp_dots[temp.x, temp.y, temp.z] += (temp.state - 6);
                        if (temp.x + 1 < n)
                        {
                            cp_dots[temp.x + 1, temp.y, temp.z]++;
                        }
                        if (temp.y + 1 < n)
                        {
                            cp_dots[temp.x, temp.y + 1, temp.z]++;
                        }
                        if (temp.z + 1 < n)
                        {
                            cp_dots[temp.x, temp.y, temp.z + 1]++;
                        }
                        if (temp.x - 1 >= 0)
                        {
                            cp_dots[temp.x - 1, temp.y, temp.z]++;
                        }
                        if (temp.y - 1 >= 0)
                        {
                            cp_dots[temp.x, temp.y - 1, temp.z]++;
                        }
                        if (temp.z - 1 >= 0)
                        {
                            cp_dots[temp.x, temp.y, temp.z - 1]++;
                        }
                    }
                }

                alives.Clear();

                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < n; j++)
                    {
                        for (int k = 0; k < n; k++)
                        {
                            dots[i, j, k].GetComponent <DotManage>().state = cp_dots[i, j, k];

                            if (dots[i, j, k].GetComponent <DotManage>().state >= 0)
                            {
                                dots[i, j, k].GetComponent <DotManage>().dotGenerate();
                                alives.Add(dots[i, j, k]);

                                switch (dots[i, j, k].GetComponent <DotManage>().state)
                                {
                                case 0:
                                    dots[i, j, k].GetComponent <DotManage>().dotDestroy();
                                    deads.Add(dots[i, j, k]);
                                    break;

                                case 1:
                                    dots[i, j, k].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = Color.red;
                                    break;

                                case 2:
                                    dots[i, j, k].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = new Color(1f, 0.64f, 0f);
                                    break;

                                case 3:
                                    dots[i, j, k].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = Color.yellow;
                                    break;

                                case 4:
                                    dots[i, j, k].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = Color.green;
                                    break;

                                case 5:
                                    dots[i, j, k].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = Color.cyan;
                                    break;

                                case 6:
                                    dots[i, j, k].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = new Color(0.5f, 0f, 0.5f);
                                    break;

                                default:
                                    dots[i, j, k].transform.GetChild(0).gameObject.GetComponent <Renderer>().material.color = new Color(0, 0, 0);
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            //matlab_sound
            if (timeRecent2 >= beat && sequential)
            {
                time = time % n;

                if (time == 0)
                {
                    timeRecent = 0;
                }

                timeRecent2 = 0;

                for (int j = 0; j < n; j++)
                {
                    for (int k = 0; k < n; k++)
                    {
                        int l;

                        //please dont change this part...
                        if (dots[j, k, time].GetComponent <DotManage>().isAlive)
                        {
                            switch (dots[j, k, time].GetComponent <DotManage>().state)
                            {
                            case 1:
                                l = 1;
                                break;

                            case 2:
                                l = 2;
                                break;

                            case 3:
                                l = 3;
                                break;

                            case 4:
                                l = 4;
                                break;

                            case 5:
                                l = 5;
                                break;

                            case 6:
                                l = 6;
                                break;

                            default:
                                l = 6;
                                break;
                            }

                            dots[j, k, time].GetComponent <AudioSource>().clip = sounds_matlab[j, k, time, l - 1];
                            dots[j, k, time].GetComponent <AudioSource>().Play();
                        }
                    }
                }

                //please dont change this part...
                follower.transform.localPosition = new Vector3(follower.transform.localPosition.x, follower.transform.localPosition.y, dots[0, 0, time].transform.localPosition.z);
                time++;
            }

            if (timeRecent2 >= (bar / 4.0) && !sequential)
            {
                timeRecent  = 0;
                timeRecent2 = 0;

                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < n; j++)
                    {
                        for (int k = 0; k < n; k++)
                        {
                            int l;

                            if (dots[j, i, k].GetComponent <DotManage>().isAlive)
                            {
                                switch (dots[j, k, time].GetComponent <DotManage>().state)
                                {
                                case 1:
                                    l = 1;
                                    break;

                                case 2:
                                    l = 2;
                                    break;

                                case 3:
                                    l = 3;
                                    break;

                                case 4:
                                    l = 4;
                                    break;

                                case 5:
                                    l = 5;
                                    break;

                                case 6:
                                    l = 6;
                                    break;

                                default:
                                    l = 6;
                                    break;
                                }

                                dots[j, i, k].GetComponent <AudioSource>().clip = sounds_matlab[j, i, k, l - 1];
                                dots[j, i, k].GetComponent <AudioSource>().Play();
                            }
                        }
                    }
                }
            }
        }
        else
        {
            follower.GetComponent <Renderer>().enabled = false;
        }
    }
Ejemplo n.º 2
0
    // Update is called once per frame
    void Update()
    {
        Data.Instance.referer = "GoL";

        //rotate head :D
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            head.transform.Rotate(0, -0.5f, 0);
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            head.transform.Rotate(0, 0.5f, 0);
        }
        if (Input.GetKey(KeyCode.UpArrow) && (head.transform.eulerAngles.x > 270 || head.transform.eulerAngles.x < 10))
        {
            head.transform.Rotate(-0.5f, 0, 0);
        }
        if (Input.GetKey(KeyCode.DownArrow) && (head.transform.eulerAngles.x >= 260 && head.transform.eulerAngles.x < 360))
        {
            head.transform.Rotate(0.5f, 0, 0);
        }

        bar  = 4f / (bpm / 60f);
        beat = 1f / ((bpm / 60f) * 2f);

        if (isRun)
        {
            if (sequential)
            {
                follower.GetComponent <Renderer>().enabled = true;
            }
            else
            {
                follower.GetComponent <Renderer>().enabled = false;
            }

            timeRecent2 += Time.deltaTime;

            if (timeRecent == 0)
            {
                timeRecent++;

                foreach (GameObject e in alives)
                {
                    DotManage temp = e.GetComponent <DotManage>();

                    if (isOn)
                    {
                        for (int i = -1; i < 2; i++)
                        {
                            for (int j = -1; j < 2; j++)
                            {
                                for (int k = -1; k < 2; k++)
                                {
                                    int x = temp.x + i, y = temp.y + j, z = temp.z + k;

                                    if (x < 0)
                                    {
                                        x += n;
                                    }
                                    else if (x >= n)
                                    {
                                        x -= n;
                                    }

                                    if (y < 0)
                                    {
                                        y += n;
                                    }
                                    else if (y >= n)
                                    {
                                        y -= n;
                                    }

                                    if (z < 0)
                                    {
                                        z += n;
                                    }
                                    else if (z >= n)
                                    {
                                        z -= n;
                                    }

                                    dots[x, y, z].GetComponent <DotManage>().neighbor++;
                                }
                            }
                        }
                    }
                    else
                    {
                        for (int i = -1; i < 2; i++)
                        {
                            for (int j = -1; j < 2; j++)
                            {
                                for (int k = -1; k < 2; k++)
                                {
                                    //if ((temp.x + i < 0 || temp.x + i >= n || temp.y + j < 0 || temp.y + j >= n || temp.z + k < 0 || temp.z + k >= n)
                                    //    || (temp.x + i == 0 && temp.y + j == 0 && temp.z + k == 0))

                                    if ((temp.x + i < 0 || temp.x + i >= n || temp.y + j < 0 || temp.y + j >= n || temp.z + k < 0 || temp.z + k >= n))
                                    {
                                        //DO NOTHING
                                    }
                                    else
                                    {
                                        dots[temp.x + i, temp.y + j, temp.z + k].GetComponent <DotManage>().neighbor++;
                                    }
                                }
                            }
                        }

                        //if (temp.neighbor > r3 || temp.neighbor < r4)
                        //{
                        //    temp.dotDestroy();
                        //}
                    }
                }

                foreach (GameObject e in alives)
                {
                    DotManage temp = e.GetComponent <DotManage>();

                    if (temp.neighbor > r3 || temp.neighbor < r4)
                    {
                        temp.dotDestroy();
                    }

                    e.GetComponent <DotManage>().neighbor = 0;  //次ループのために初期化
                }

                foreach (GameObject e in deads)
                {
                    DotManage tmp = e.GetComponent <DotManage>();

                    if (tmp.neighbor <= r2 && tmp.neighbor >= r1)
                    {
                        tmp.dotGenerate();
                    }

                    tmp.neighbor = 0; //次ループのために初期化
                }

                alives.Clear();
                deads.Clear();

                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < n; j++)
                    {
                        for (int k = 0; k < n; k++)
                        {
                            if (dots[i, j, k].GetComponent <DotManage>().isAlive)
                            {
                                alives.Add(dots[i, j, k]); //List in
                            }
                            else
                            {
                                deads.Add(dots[i, j, k]); //List in
                            }
                        }
                    }
                }
            }


            //matlab_sound
            if (timeRecent2 >= beat && sequential)
            {
                time = time % n;

                if (time == 0)
                {
                    timeRecent = 0;
                }

                timeRecent2 = 0;

                for (int j = 0; j < n; j++)
                {
                    for (int k = 0; k < n; k++)
                    {
                        if (dots[j, k, time].GetComponent <DotManage>().isAlive)
                        {
                            //PLEASE DONT CHNAGE THIS PART
                            dots[j, k, time].GetComponent <AudioSource>().clip = sounds_matlab[j, k, time];
                            dots[j, k, time].GetComponent <AudioSource>().Play();
                        }
                    }
                }

                //PLEASE DONT CHNAGE THIS PART
                follower.transform.localPosition = new Vector3(follower.transform.localPosition.x, follower.transform.localPosition.y, dots[0, 0, time].transform.localPosition.z);
                time++;
            }

            if (timeRecent2 >= (bar / 4.0) && !sequential)
            {
                timeRecent  = 0;
                timeRecent2 = 0;

                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < n; j++)
                    {
                        for (int k = 0; k < n; k++)
                        {
                            if (dots[j, i, k].GetComponent <DotManage>().isAlive)
                            {
                                dots[j, i, k].GetComponent <AudioSource>().clip = sounds_matlab[j, i, k];
                                dots[j, i, k].GetComponent <AudioSource>().Play();
                            }
                        }
                    }
                }

                Debug.Log(alives.Count());
            }

            /**
             * For the brave souls who get this far: You are the chosen ones,
             * the valiant knights of programming who toil away, without rest,
             * fixing our most awful code. To you, true saviors, kings of men,
             * I say this: never gonna give you up, never gonna let you down,
             * never gonna run around and desert you. Never gonna make you cry,
             * never gonna say goodbye. Never gonna tell a lie and hurt you.
             */
        }
        else
        {
            follower.GetComponent <Renderer>().enabled = false;
        }
    }