/// <summary> /// オートプレイ処理 /// </summary> public void AutoPlay() { // オートプレイは 0.5Hz var hz = 0.5f; time += Time.deltaTime; if (time > hz) { time -= hz; } else { return; } // 全部止まってるならコイン投入&リール回して抜ける if (IsAllReelStopped()) { // オートプレイ設定をクリア currentAutoPlayPattern = null; KeyInput(5); return; } // オートプレイ設定が未確定なら抜ける if (currentAutoPlayPattern == null) return; // 自動停止順に基づき停止対象リールを選択 int targetReel = -1; int[] stopOrder; if (currentAutoPlayPattern.isStopReverse) { stopOrder = new int[] { 2, 1, 0 }; } else { stopOrder = new int[] { 0, 1, 2 }; } for (int idx = 0; idx < 3; idx++) { if (!mOmatsuri.IsReelStopped(stopOrder[idx])) { targetReel = stopOrder[idx]; break; } } // 目押し処理 if (currentAutoPlayPattern.targetRow[targetReel] == -1) { // -1なら連打 KeyInput(targetReel + 1); } else { // 目当ての場所を狙って止める // 偶にリール番号が跳ぶ(1フレームあたりの回転数が早すぎ?)なので条件を甘く float allowSlip = 0; // 許容する面のズレ for (int cnt = 0; cnt < 1 + allowSlip; cnt++) { int faceIdx = mOmatsuri.ANGLE2INDEX(mOmatsuri.int_s_value[Defines.DEF_INT_REEL_ANGLE_R0 + targetReel]); int idxCorrectValue = 7; // 仕様の面番号と実際の面番号がズレてるので補正する int targetIdx = currentAutoPlayPattern.targetRow[targetReel] + idxCorrectValue; targetIdx += cnt; if (targetIdx >= 21) targetIdx -= 21; if (faceIdx == targetIdx) { KeyInput(targetReel + 1); break; } } } }
/// <summary> /// オートプレイパターン設定 /// オートプレイ定義と現在の状態を参照してリール停止パターンを決定する /// </summary> void SetAutoPlayPattern() { AutoPlayPatternDefine.AutoPlayPatternValue[] patterns; switch (clOHHB_V23.getWork(Defines.DEF_GMLVSTS)) { case 1: // RB中 patterns = currentAutoPlaySetting.regular; break; case 2: // BB中 // 4th青ドン状態チェック bool isAodon = mOmatsuri.int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] == 237; // リプレイずらし判定 if (currentAutoPlaySetting == autoPlayFull && clOHHB_V23.getWork(Defines.DEF_BIGBCTR) == 1 && clOHHB_V23.getWork(Defines.DEF_BBGMCTR) >= 8 ) { // フルなら4th青ドン&残JAC回数1&残ボーナスゲーム8回以上 // 4thが確定するまで待つ if (!Is4thReelStopped()) { Debug.Log("リプレイずらし・4th停止待機"); return; } else { // 4thが青ドンならリプレイずらし if (isAodon) { Debug.Log("リプレイずらし・BB逆(FULL)"); patterns = currentAutoPlaySetting.bigReverse; } else { Debug.Log("リプレイずらし無し"); patterns = currentAutoPlaySetting.big; } } Debug.Log( "オート判定:青ドン=" + isAodon.ToString() + " 残B=" + clOHHB_V23.getWork(Defines.DEF_BIGBCTR) + " 残JAC=" + clOHHB_V23.getWork(Defines.DEF_BBGMCTR)); } else if ( currentAutoPlaySetting == autoPlaySelf && ((clOHHB_V23.getWork(Defines.DEF_BIGBCTR) == 2 && clOHHB_V23.getWork(Defines.DEF_BBGMCTR) >= 16) || (clOHHB_V23.getWork(Defines.DEF_BIGBCTR) == 1 && clOHHB_V23.getWork(Defines.DEF_BBGMCTR) >= 10))) { // セルフなら4th青ドン& // ((残JAC回数2&残ボーナスゲーム16回以上) || // (残JAC回数1&残ボーナスゲーム10回以上)) // 4thが確定するまで待つ if (!Is4thReelStopped()) { Debug.Log("リプレイずらし・4th停止待機"); return; } else { // 4thが青ドンならリプレイずらし if (isAodon) { Debug.Log("リプレイずらし・BB逆(FULL)"); patterns = currentAutoPlaySetting.bigReverse; } else { Debug.Log("リプレイずらし無し"); patterns = currentAutoPlaySetting.big; } } } else { Debug.Log("オート判定:BB"); patterns = currentAutoPlaySetting.big; } Debug.Log( "オート判定:青ドン=" + isAodon.ToString() + " 残B=" + clOHHB_V23.getWork(Defines.DEF_BIGBCTR) + " 残JAC=" + clOHHB_V23.getWork(Defines.DEF_BBGMCTR)); break; case 4: // 通常 patterns = currentAutoPlaySetting.normal; break; case 8: // RB内部あたり patterns = currentAutoPlaySetting.regReach; break; case 16: // BB内部あたり patterns = currentAutoPlaySetting.bigReach; break; default: Debug.LogError("オート判定:想定外の値:" + clOHHB_V23.getWork(Defines.DEF_GMLVSTS)); patterns = currentAutoPlaySetting.normal; break; } currentAutoPlayPattern = patterns[UnityEngine.Random.Range(0, 100) % patterns.Length]; //Debug.Log("自動プレイパターン:" + // (currentAutoPlayPattern.isStopReverse ? "右から" : "左から") + // currentAutoPlayPattern.targetRow[0] + "-" + // currentAutoPlayPattern.targetRow[1] + "-" + // currentAutoPlayPattern.targetRow[2]); }