void Awake() { thisLoggingID = loggingID++; //transform.Find("Background").GetComponent<MeshRenderer>().material.color = new Color(1, 0.1f, 0.1f); ButtonTL.GetComponent <MeshRenderer>().material.color = new Color(0, 0, 0); ButtonTR.GetComponent <MeshRenderer>().material.color = new Color(0, 0, 0); ButtonBL.GetComponent <MeshRenderer>().material.color = new Color(0, 0, 0); ButtonBR.GetComponent <MeshRenderer>().material.color = new Color(0, 0, 0); GetComponent <KMBombModule>().OnActivate += Init; }
void Init() { ButtonTL.OnInteract += delegate() { ButtonTL.AddInteractionPunch(); return(false); }; ButtonTR.OnInteract += delegate() { ButtonTR.AddInteractionPunch(); return(false); }; ButtonBL.OnInteract += delegate() { ButtonBL.AddInteractionPunch(); return(false); }; ButtonBR.OnInteract += delegate() { ButtonBR.AddInteractionPunch(); return(false); }; List <KMSelectable> buttons = new List <KMSelectable>() { ButtonTL, ButtonTR, ButtonBL, ButtonBR }; int i = 0; int TLtype = -1; while (buttons.Count > 0) { int pos = Random.Range(0, buttons.Count); if (pos == 0 && TLtype == -1) { Debug.Log("[Simon States #" + thisLoggingID + "] Dominant: " + COL_LIST[i]); TLtype = i; } KMSelectable b = buttons[pos]; if (i == 0) { ButtonRed = b; b.GetComponent <MeshRenderer>().material.color = DARKRED; b.OnInteract += HandleRed; } else if (i == 1) { ButtonYellow = b; b.GetComponent <MeshRenderer>().material.color = DARKYELLOW; b.OnInteract += HandleYellow; } else if (i == 2) { ButtonGreen = b; b.GetComponent <MeshRenderer>().material.color = DARKGREEN; b.OnInteract += HandleGreen; } else { ButtonBlue = b; b.GetComponent <MeshRenderer>().material.color = DARKBLUE; b.OnInteract += HandleBlue; } i++; buttons.RemoveAt(pos); } int len = 4; PuzzleDisplay = new bool[len][]; for (int a = 0; a < len; a++) { PuzzleDisplay[a] = new bool[4]; int num = Random.Range(1, 5); if (num > 2) { num = Random.Range(2, 5); } List <int> posList = new List <int>() { 0, 1, 2, 3 }; while (num > 0) { num--; int pos = Random.Range(0, posList.Count); PuzzleDisplay[a][posList[pos]] = true; posList.RemoveAt(pos); } string col = ""; if (PuzzleDisplay[a][0]) { col += COL_LIST[0]; } else { col += "-"; } if (PuzzleDisplay[a][1]) { col += COL_LIST[1]; } else { col += "-"; } if (PuzzleDisplay[a][2]) { col += COL_LIST[2]; } else { col += "-"; } if (PuzzleDisplay[a][3]) { col += COL_LIST[3]; } else { col += "-"; } Debug.Log("[Simon States #" + thisLoggingID + "] Stage " + (a + 1) + " colours: " + col); } Answer = new int[len]; bool R = false, Y = false, B = false, G = false; for (int a = 0; a < len; a++) { int numFlashed = 0; for (int z = 0; z < 4; z++) { if (PuzzleDisplay[a][z]) { numFlashed++; } } int numUniquePressed = 0; if (R) { numUniquePressed++; } if (Y) { numUniquePressed++; } if (G) { numUniquePressed++; } if (B) { numUniquePressed++; } if (a == 0) { if (numFlashed == 1) { if (PuzzleDisplay[0][0]) { Answer[0] = 0; } else if (PuzzleDisplay[0][1]) { Answer[0] = 1; } else if (PuzzleDisplay[0][2]) { Answer[0] = 2; } else { Answer[0] = 3; } Debug.Log("[Simon States #" + thisLoggingID + "] Stage 1: One flashed, press it (" + Answer[0] + ":" + COL_LIST[Answer[0]] + ")"); } else if (numFlashed == 2) { if (PuzzleDisplay[0][3]) { for (int z = 0; z < 4; z++) { if (PuzzleDisplay[0][PRIORITY[TLtype][z]]) { Answer[0] = PRIORITY[TLtype][z]; break; } } Debug.Log("[Simon States #" + thisLoggingID + "] Stage 1: Two flashed with blue, press highest (" + Answer[0] + ":" + COL_LIST[Answer[0]] + ")"); } else { Answer[0] = 3; Debug.Log("[Simon States #" + thisLoggingID + "] Stage 1: Two flashed without blue, press blue (3:B)"); } } else if (numFlashed == 3) { if (PuzzleDisplay[0][0]) { for (int z = 3; z >= 0; z--) { if (PuzzleDisplay[0][PRIORITY[TLtype][z]]) { Answer[0] = PRIORITY[TLtype][z]; break; } } Debug.Log("[Simon States #" + thisLoggingID + "] Stage 1: Three flashed including red, press lowest (" + Answer[0] + ":" + COL_LIST[Answer[0]] + ")"); } else { Answer[0] = 0; Debug.Log("[Simon States #" + thisLoggingID + "] Stage 1: Three flashed excluding red, press red (0:R)"); } } else { Answer[0] = PRIORITY[TLtype][1]; Debug.Log("[Simon States #" + thisLoggingID + "] Stage 1: Four flashed, press second highest (" + Answer[0] + ":" + COL_LIST[Answer[0]] + ")"); } } else if (a == 1) { if (numFlashed == 2) { if (PuzzleDisplay[1][0] && PuzzleDisplay[1][3]) { for (int z = 0; z < 4; z++) { if (!PuzzleDisplay[1][PRIORITY[TLtype][z]]) { Answer[1] = PRIORITY[TLtype][z]; break; } } Debug.Log("[Simon States #" + thisLoggingID + "] Stage 2: Red and blue flashed, press highest out of yellow and green (" + Answer[1] + ":" + COL_LIST[Answer[1]] + ")"); } else { for (int z = 3; z >= 0; z--) { if (!PuzzleDisplay[1][PRIORITY[TLtype][z]]) { Answer[1] = PRIORITY[TLtype][z]; break; } } Debug.Log("[Simon States #" + thisLoggingID + "] Stage 2: Two flashed including yellow or green, press lowest that didn't flash (" + Answer[1] + ":" + COL_LIST[Answer[1]] + ")"); } } else if (numFlashed == 1) { if (!PuzzleDisplay[1][3]) { Answer[1] = 3; Debug.Log("[Simon States #" + thisLoggingID + "] Stage 2: One flashed but not blue, press blue (3:B)"); } else { Answer[1] = 1; Debug.Log("[Simon States #" + thisLoggingID + "] Stage 2: Blue flashed, press yellow (1:Y)"); } } else if (numFlashed == 4) { Answer[1] = Answer[0]; Debug.Log("[Simon States #" + thisLoggingID + "] Stage 2: Four flashed, press stage 1 (" + Answer[1] + ":" + COL_LIST[Answer[1]] + ")"); } else { if (!PuzzleDisplay[1][0]) { Answer[1] = 0; } else if (!PuzzleDisplay[1][1]) { Answer[1] = 1; } else if (!PuzzleDisplay[1][2]) { Answer[1] = 2; } else { Answer[1] = 3; } Debug.Log("[Simon States #" + thisLoggingID + "] Stage 2: Three flashed, press whatever didn't flash (" + Answer[1] + ":" + COL_LIST[Answer[1]] + ")"); } } else if (a == 2) { if (numFlashed == 3) { if ((PuzzleDisplay[2][0] && R) || (PuzzleDisplay[2][1] && Y) || (PuzzleDisplay[2][2] && G) || (PuzzleDisplay[2][3] && B)) { for (int z = 0; z < 4; z++) { int trueVal = PRIORITY[TLtype][z]; if (PuzzleDisplay[2][trueVal]) { if (trueVal == 0 && !R) { Answer[2] = 0; break; } else if (trueVal == 1 && !Y) { Answer[2] = 1; break; } else if (trueVal == 2 && !G) { Answer[2] = 2; break; } else if (trueVal == 3 && !B) { Answer[2] = 3; break; } } } Debug.Log("[Simon States #" + thisLoggingID + "] Stage 3: Three flashed and one was pressed, press highest unpressed that flashed (" + Answer[2] + ":" + COL_LIST[Answer[2]] + ")"); } else { for (int z = 0; z < 4; z++) { if (PuzzleDisplay[2][PRIORITY[TLtype][z]]) { Answer[2] = PRIORITY[TLtype][z]; break; } } Debug.Log("[Simon States #" + thisLoggingID + "] Stage 3: Three flashed and weren't pressed, press highest that flashes (" + Answer[2] + ":" + COL_LIST[Answer[2]] + ")"); } } else if (numFlashed == 2) { if ((PuzzleDisplay[2][0] && !R) || (PuzzleDisplay[2][1] && !Y) || (PuzzleDisplay[2][2] && !G) || (PuzzleDisplay[2][3] && !B)) { Answer[2] = Answer[0]; Debug.Log("[Simon States #" + thisLoggingID + "] Stage 3: Two flashed and at least one unpressed, press stage 1 (" + Answer[2] + ":" + COL_LIST[Answer[2]] + ")"); } else { for (int z = 3; z >= 0; z--) { if (!PuzzleDisplay[2][PRIORITY[TLtype][z]]) { Answer[2] = PRIORITY[TLtype][z]; break; } } Debug.Log("[Simon States #" + thisLoggingID + "] Stage 3: Two flashed and both pressed, press lowest no-flash (" + Answer[2] + ":" + COL_LIST[Answer[2]] + ")"); } } else if (numFlashed == 1) { if (PuzzleDisplay[2][0]) { Answer[2] = 0; } else if (PuzzleDisplay[2][1]) { Answer[2] = 1; } else if (PuzzleDisplay[2][2]) { Answer[2] = 2; } else { Answer[2] = 3; } Debug.Log("[Simon States #" + thisLoggingID + "] Stage 3: One flashed, press it (" + Answer[2] + ":" + COL_LIST[Answer[2]] + ")"); } else { Answer[2] = PRIORITY[TLtype][2]; Debug.Log("[Simon States #" + thisLoggingID + "] Stage 3: Four flashed, press second lowest (" + Answer[2] + ":" + COL_LIST[Answer[2]] + ")"); } } else if (a == 3) { if (numUniquePressed == 3) { if (!R) { Answer[3] = 0; } else if (!Y) { Answer[3] = 1; } else if (!G) { Answer[3] = 2; } else { Answer[3] = 3; } Debug.Log("[Simon States #" + thisLoggingID + "] Stage 4: Three unique pressed, press other (" + Answer[3] + ":" + COL_LIST[Answer[3]] + ")"); } else if (numFlashed == 3) { int unpressed = 4; if (!R && PuzzleDisplay[3][0]) { unpressed = 0; } if (!Y && PuzzleDisplay[3][1]) { if (unpressed == 4) { unpressed = 1; } else { unpressed = -1; } } if (unpressed != -1 && !G && PuzzleDisplay[3][2]) { if (unpressed == 4) { unpressed = 2; } else { unpressed = -1; } } if (unpressed != -1 && !B && PuzzleDisplay[3][3]) { if (unpressed == 4) { unpressed = 3; } else { unpressed = -1; } } if (unpressed >= 0 && unpressed < 4) { Answer[3] = unpressed; Debug.Log("[Simon States #" + thisLoggingID + "] Stage 4: Three flashed and exactly one unpressed, press it (" + Answer[3] + ":" + COL_LIST[Answer[3]] + ")"); } else { Answer[3] = PRIORITY[TLtype][3]; Debug.Log("[Simon States #" + thisLoggingID + "] Stage 4: Three flashed and not exactly one unpressed, press lowest (" + Answer[3] + ":" + COL_LIST[Answer[3]] + ")"); } } else if (numFlashed == 4) { Answer[3] = PRIORITY[TLtype][3]; Debug.Log("[Simon States #" + thisLoggingID + "] Stage 4: Four flashed, press lowest (" + Answer[3] + ":" + COL_LIST[Answer[3]] + ")"); } else if (numFlashed == 1) { if (PuzzleDisplay[3][0]) { Answer[3] = 0; } else if (PuzzleDisplay[3][1]) { Answer[3] = 1; } else if (PuzzleDisplay[3][2]) { Answer[3] = 2; } else { Answer[3] = 3; } Debug.Log("[Simon States #" + thisLoggingID + "] Stage 4: One flashed, press it (" + Answer[3] + ":" + COL_LIST[Answer[3]] + ")"); } else { Answer[3] = 2; Debug.Log("[Simon States #" + thisLoggingID + "] Stage 4: Two flashed, press green (2:G)"); } } if (Answer[a] == 0) { R = true; } if (Answer[a] == 1) { Y = true; } if (Answer[a] == 2) { G = true; } if (Answer[a] == 3) { B = true; } } }