Exemple #1
0
    /*
     * ===========================================================
     *  対象キャラクターの選択
     * ===========================================================
     */
    // ターゲットの選択を行う
    //  ┗ 呼出元: PlayActionNoRamble
    //  ┗ 条件: selectedCommand selectedLeader が決定済
    IEnumerator SelectTarget(Vector2 countActionCharacterInfo)
    {
        // 味方キャラが行動できないなら処理終了( 敵キャラの値を設定 )
        if (countActionCharacterInfo.x == 0)
        {
            for (int i = 0; i < 10000; i++)
            {
                selectedTarget = UnityEngine.Random.Range(0, cd.Length);
                if (cd[selectedTarget].cs != null && !cd[selectedTarget].isknockout)
                {
                    break;
                }
            }
            yield break;
        }

        // ノックバック値の和を求める
        int knockback = OpeCharaList.GetSumKnockback(cd);

        // 攻撃コマンドの場合のみターゲット選択を行う
        if (selectedCommand == (int)Command.Attack)
        {
            yield return(DoSelectTarget2(knockback));
        }
        else
        {
            selectedTarget = 0; // 攻撃コマンドでない場合、決定済として扱う
        }
    }
Exemple #2
0
    // コマンド内容をもとに
    // 動けるキャラクターすべての行動(攻撃・ユニゾン・詠唱)を行う
    // ( 吹き飛び処理もこの中で処理する )
    //  ┗ 呼出元: PlayActionNoRamble
    //  ┗ 条件: selectedCommand selectedLeader selectedTarget が決定済
    IEnumerator CallCharacterAction()
    {
        // 詠唱中キャラの平均待機値を求めておく
        int           avePlayerMagWait   = OpeCharaList.GetAverageMagWait(cd);
        int           aveEnemyMagWait    = OpeCharaList.GetAverageMagWait(enemyCd);
        int           actionCharacterNum = 0;
        bool          isPlayerTurn       = true;
        BaseCharacter targetChara        = null;

        for (int i = 0; i < cd.Length; i++)
        {
            // 味方キャラクター。CTB ゲージが 0 の場合。
            if (cd[i].ctbNum <= 0 && !cd[i].isWaitUnison)
            {
                // コマンドに応じた行動を行う
                if (selectedCommand == (int)Command.Attack)
                {
                    targetChara = enemyCd[selectedTarget];
                    actionCharacterNum++;
                    isPlayerTurn = true;

                    mCombo.AddPlayerCombo();
                    yield return(cd[i].PlayAction(
                                     selectedTarget,
                                     enemyCd,
                                     mCombo));
                }
                else if (selectedCommand == (int)Command.Unison)
                {
                    cd[i].StartUnison();
                }
                else if (selectedCommand == (int)Command.Magic)
                {
                    cd[i].StartMagic(avePlayerMagWait);
                }
            }
        }
        for (int i = 0; i < enemyCd.Length; i++)
        {
            // 敵キャラクター。CTB ゲージが 0 の場合。
            if (enemyCd[i].ctbNum <= 0 && !enemyCd[i].isWaitUnison)
            {
                if (selectedCommand == (int)Command.Attack)
                {
                    targetChara = cd[selectedTarget];
                    actionCharacterNum++;
                    isPlayerTurn = false;

                    mCombo.AddEnemyCombo();
                    yield return(enemyCd[i].PlayAction(
                                     selectedTarget,
                                     cd,
                                     mCombo));
                }
                else if (selectedCommand == (int)Command.Unison)
                {
                    enemyCd[i].StartUnison();
                }
                else if (selectedCommand == (int)Command.Magic)
                {
                    enemyCd[i].StartMagic(aveEnemyMagWait);
                }
            }
        }

        // 複数人が攻撃に参加している場合はユニゾンの追撃処理を行う
        if (actionCharacterNum >= 2)
        {
            // あらかじめコンボの値を増やしておく
            // ( どちらが攻撃したかをUnison内で知る術はないので )
            if (isPlayerTurn)
            {
                mCombo.AddPlayerCombo();
            }
            else
            {
                mCombo.AddEnemyCombo();
            }
            // ユニゾンの処理を呼び出す
            if (isPlayerTurn)
            {
                yield return(Unison.DoUnison(cd, enemyCd[selectedTarget], mCombo));
            }
            else
            {
                yield return(Unison.DoUnison(enemyCd, cd[selectedTarget], mCombo));
            }
        }

        // 対象キャラを吹き飛ばす
        if (targetChara != null) // 対象キャラがいない(≒詠唱・ユニゾン)なら無視
        {
            int sumKnockback;
            if (isPlayerTurn)
            {
                sumKnockback = OpeCharaList.GetSumKnockback(cd);
            }
            else
            {
                sumKnockback = OpeCharaList.GetSumKnockback(enemyCd);
            }
            int knockback = PredictObject.CalcBlowNum(targetChara, sumKnockback, actionCharacterNum);
            targetChara.ctbNum += knockback;
        }
    }