private List <int> MinosNuberList = new List <int>(); //ミノの出てくる順番を決めるリスト private void Awake() { //Listの初期設定 for (int i = 0; i < NUBER_UPPER; i++) { MinosNuberList.Insert(i, i); } //Listのランダム化 MinosNuberList = MinosNuberList.OrderBy(i => Guid.NewGuid()).ToList(); //オリジナルミノを作ってないならこの後の処理へはいけない設定 if (!OriginalCreate_Manager.getCreateBool()) { return; } //オリジナルミノの配列を受け取る Mino_Original = OriginalCreate_Manager.getCreateArray(); string MINO_OriginalType = OriginalCreate_Manager.getArrayType(); //MINO_OriginalTypeの値に従って、ミノの配列を置き換える switch (MINO_OriginalType) { case "MINO_I": Array.Copy(Mino_Original, 0, Mino_I, 0, Mino_Original.Length); break; case "MINO_O": Array.Copy(Mino_Original, 0, Mino_O, 0, Mino_Original.Length); break; case "MINO_S": Array.Copy(Mino_Original, 0, Mino_S, 0, Mino_Original.Length); break; case "MINO_Z": Array.Copy(Mino_Original, 0, Mino_Z, 0, Mino_Original.Length); break; case "MINO_J": Array.Copy(Mino_Original, 0, Mino_J, 0, Mino_Original.Length); break; case "MINO_L": Array.Copy(Mino_Original, 0, Mino_L, 0, Mino_Original.Length); break; case "MINO_T": Array.Copy(Mino_Original, 0, Mino_T, 0, Mino_Original.Length); break; default: break; } }
MOVE_THREE = 3; //ミノ3つ分の移動量 /// <summary> /// ミノの回転処理 /// </summary> public void Minos_Rotate(ref int[,] Stage, ref int Yheight, ref int XSidePos, Mino_Controller.MINOs_Array Mino, GameObject MINOs, GameObject GHOSTMINOs, ref bool Lrotation, ref bool Rrotation) { if (Mino.MinoType == MINO_O && !OriginalCreate_Manager.getCreateBool()) { return; } int Checked = 0; int MINOsAngles = Mathf.FloorToInt(MINOs.transform.localEulerAngles.z); //ミノの角度の調整 if (Rrotation) { switch (MINOsAngles) { case 0: MINOsAngles = ANGLE_B; break; case 90: MINOsAngles = ANGLE_A; break; case 180: MINOsAngles = ANGLE_D; break; case 270: MINOsAngles = ANGLE_C; break; } } if (Lrotation) { switch (MINOsAngles) { case 0: MINOsAngles = ANGLE_D; break; case 90: MINOsAngles = ANGLE_C; break; case 180: MINOsAngles = ANGLE_B; break; case 270: MINOsAngles = ANGLE_A; break; } } //配列のクローン配列を作成 Array.Copy(Stage, 0, StageClone, 0, Stage.Length); var Objclone = new GameObject[MINOARRAY_MAXSIZE, MINOARRAY_MAXSIZE]; var GhostObjclone = new GameObject[MINOARRAY_MAXSIZE, MINOARRAY_MAXSIZE]; //右回転 if (Rrotation) { //NowArray配列(NowMinoのクローン配列)に右回転させたNowMino配列を入れる for (int i = 0; i < Mino.NowMino.GetLength(0); i++) { for (int j = 0; j < Mino.NowMino.GetLength(1); j++) { NowArray[j, Mino.NowMino.GetLength(1) - 1 - i] = Mino.NowMino[i, j]; } } //Iミノの位置調節 if (Mino.MinoType == MINO_I && !OriginalCreate_Manager.getCreateBool()) { if (MINOsAngles == ANGLE_B) { XSidePos--; } if (MINOsAngles == ANGLE_D) { XSidePos++; } } Checked = 0; //ゲームオブジェクトの位置調節 for (int i = 0; i < NowArray.GetLength(0); i++) { for (int j = 0; j < NowArray.GetLength(1); j++) { if (NowArray[i, j] == ARRAY_MINO) { Objclone[i, j] = Mino.UseMino[Checked]; GhostObjclone[i, j] = Mino.UseMinoGhost[Checked]; Checked++; } } } //回転後に壁やミノに埋まってないかチェックする Check_Rotation(Yheight, XSidePos, ref Rrotation); if (!Rrotation && !OriginalCreate_Manager.getCreateBool()) { Rrotation = true; SuperRotationSystemCheck(MINOs, Mino.MinoType, ref Yheight, ref XSidePos, ref Lrotation, ref Rrotation); } //チェック後回転が出来なかったら終わり if (!Rrotation) { return; } //配列コピー Array.Copy(StageClone, 0, Stage, 0, StageClone.Length); Array.Copy(NowArray, 0, Mino.NowMino, 0, Mino.NowMino.Length); //ミノのゲームオブジェクト右回転 MINOs.transform.eulerAngles += new Vector3(0, 0, -ANGEL); GHOSTMINOs.transform.eulerAngles += new Vector3(0, 0, -ANGEL); Rrotation = false; //回転後のミノ(ゲームオブジェクト)の位置と角度の調節 Placement_Adjustment(Stage, MINOs, GHOSTMINOs, Mino); } //左回転 if (Lrotation) { //NowArray配列(NowMinoのクローン配列)に左回転させたNowMino配列を入れる for (int i = 0; i < Mino.NowMino.GetLength(0); i++) { for (int j = 0; j < Mino.NowMino.GetLength(1); j++) { NowArray[j, i] = Mino.NowMino[i, Mino.NowMino.GetLength(1) - 1 - j]; } } //Iミノの位置調節 if (Mino.MinoType == MINO_I && !OriginalCreate_Manager.getCreateBool()) { if (MINOsAngles == ANGLE_A) { XSidePos++; } if (MINOsAngles == ANGLE_C) { XSidePos--; } } Checked = 0; //ゲームオブジェクトの位置調節 for (int i = 0; i < NowArray.GetLength(0); i++) { for (int j = 0; j < NowArray.GetLength(1); j++) { if (NowArray[i, j] == ARRAY_MINO) { Objclone[i, j] = Mino.UseMino[Checked]; GhostObjclone[i, j] = Mino.UseMinoGhost[Checked]; Checked++; } } } //回転後に壁やミノに埋まってないかチェックする Check_Rotation(Yheight, XSidePos, ref Lrotation); if (!Lrotation && !OriginalCreate_Manager.getCreateBool()) { Lrotation = true; SuperRotationSystemCheck(MINOs, Mino.MinoType, ref Yheight, ref XSidePos, ref Lrotation, ref Rrotation); } //チェック後回転が出来なかったら終わり if (!Lrotation) { return; } //配列コピー Array.Copy(StageClone, 0, Stage, 0, StageClone.Length); Array.Copy(NowArray, 0, Mino.NowMino, 0, Mino.NowMino.Length); //ミノのゲームオブジェクト左回転 MINOs.transform.eulerAngles += new Vector3(0, 0, ANGEL); GHOSTMINOs.transform.eulerAngles += new Vector3(0, 0, ANGEL); Lrotation = false; //回転後のミノ(ゲームオブジェクト)の位置と角度の調節 Placement_Adjustment(Stage, MINOs, GHOSTMINOs, Mino); } }