Ejemplo n.º 1
0
    /* ボタンクリック式 */
    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);
    }
Ejemplo n.º 2
0
    // 行動できるキャラクターが出るまでループを回す
    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()
Ejemplo n.º 3
0
    } // --- 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);
    }
Ejemplo n.º 4
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());
    }