// 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; } }
// 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; } }