/* ボタンクリック式 */ IEnumerator DoSelectTarget2(int sumKnockback) { // カーソルオブジェクトを作成 GameObject cursorObj = MakeCursorObj(); string FilePath = "Prefabs\\Battle\\SelectTarget"; GameObject tObj = (GameObject)Instantiate(Resources.Load(FilePath), new Vector3(400, 0, 0), Quaternion.identity); tObj.GetComponent <SelectTarget>().SetParameter(enemyCd); tObj.GetComponent <SelectTarget>().SetEnableButtonFromKnockout(enemyCd); tObj.transform.SetParent(canvas.transform, false); // プレイヤの予測オブジェクトを表示 OpeCharaList.SetPredictActionableCharacter(cd); int charaNum = OpeCharaList.CountActionableCharacter(cd); // コマンドを選ぶまでループ int _mouseOver = -1; int mouseOver = 0; while (true) { // 予測表示 mouseOver = tObj.GetComponent <SelectTarget>().mouseOverId; if (_mouseOver != mouseOver) { SetCursorObj(mouseOver, cursorObj); // カーソルオブジェクトの座標移動 PredictObject.SetInactiveAllPredictObj(null, enemyCd); enemyCd[mouseOver].predictObj.SetFromCharacterStatus(enemyCd[mouseOver], sumKnockback, charaNum); _mouseOver = mouseOver; } // 終了判定 if (tObj.GetComponent <SelectTarget>().selectId != -1) { selectedTarget = tObj.GetComponent <SelectTarget>().selectId; if (selectedTarget < 0) { selectedTarget = -1; // キャンセルした } break; } yield return(0); } Destroy(tObj); Destroy(cursorObj); PredictObject.SetInactiveAllPredictObj(cd, enemyCd); }
// 行動できるキャラクターが出るまでループを回す IEnumerator DecideNextActionCharacter() { Vector2 tmp = OpeCharaList.CountActionableCharacter(cd, enemyCd); int isActionableChara = (int)tmp.x + (int)tmp.y; while (isActionableChara == 0) { Debug.Log("OK"); // CTBメータを 1 つ進める isActionableChara += CtbManager.SubCtbNum(cd); isActionableChara += CtbManager.SubCtbNum(enemyCd); CtbManager.SubStun(cd, enemyCd); // メモ: CTB値の更新⇒スタン値の更新の順番である必要がある // 移動演出のコルーチンを呼び出す yield return(CtbMove()); // メモ: 処理終了後に CTB値・STUN値をもとにした位置に再描画 // yield return Utility._Wait.WaitKey(); } } // --- DecideNextActionCharacter()
} // --- DecideNextActionCharacter() // 誰かが動ける状況になると呼ばれる処理 // ( ランブル・通常アクション・ユニゾンに振り分ける ) IEnumerator PlayAction() { // ランブル判定。( ユニゾン中のキャラは数えない ) Vector2 countActionCharacterInfo = OpeCharaList.CountActionableCharacter(cd, enemyCd); // ランブル・ユニゾン・通常アクションの 3 パターンがありえる if (countActionCharacterInfo.x * countActionCharacterInfo.y == 0) { // ランブルでない場合の処理 yield return(PlayActionNoRamble(countActionCharacterInfo)); } else { // ランブル yield return(PlayActionRamble(countActionCharacterInfo)); } yield return(0); }
/* * ================================================ * PlayAction の内部処理 * ================================================ */ // 通常攻撃・ユニゾンの場合に呼ばれる処理 // ( コマンド入力を行い、処理を実行する ) IEnumerator PlayActionNoRamble(Vector2 countActionCharacterInfo) { // 行動サイドのユニゾン待機を終了 bool isPlayer = (countActionCharacterInfo.x >= 1); if (isPlayer) { OpeCharaList.EndWaitUnison(cd); } else { OpeCharaList.EndWaitUnison(enemyCd); } // 行動人数の情報を再度取得( コマンド選択前に ) countActionCharacterInfo = OpeCharaList.CountActionableCharacter(cd, enemyCd); // コマンド選択・リーダー決定・ターゲット選択を行う selectedCommand = -1; selectedLeader = -1; selectedTarget = -1; while (true) { if (selectedCommand == -1) { // コマンド選択を行う( 攻撃・待機・詠唱など ) yield return(SelectCommand(countActionCharacterInfo)); continue; } if (selectedLeader == -1) { // リーダーキャラクターの選択 yield return(SelectLeader(countActionCharacterInfo)); if (selectedLeader == -1) { selectedCommand = -1; } continue; } if (selectedTarget == -1) { // ターゲットキャラクターの選択 yield return(SelectTarget(countActionCharacterInfo)); if (selectedTarget == -1) // ターゲット選択でキャンセル { selectedLeader = -1; if (countActionCharacterInfo.x == 1 || countActionCharacterInfo.y == 1 || selectedCommand == (int)Command.Magic) { // リーダー選択が存在しないならば 2 ステップ戻す // ( 単体攻撃・詠唱の場合 ) selectedCommand = -1; } } continue; } break; } // 入力内容に応じて、処理を実行する yield return(CallCharacterAction()); }