Beispiel #1
0
    // キャラクターのデータ読み込み
    // FalePath: 設定フォルダの在り処
    //  ┗キャラクターデータ設定フォルダへのパス
    // characterId; キャラクターのID
    protected void LoadCharacterData()
    {
        // 編成されていない場合に利用される値
        // ( null値のままになるので、nullチェックで弾く )
        ctbNum     = 999999;
        ctbFaceObj = null;
        predictObj = null;
        StatusObj  = null;

        /* 詠唱・ユニゾン・戦闘不能・スタンなどの初期状態 */
        isMagic      = false;
        isWaitUnison = false;
        isknockout   = false;
        isStun       = false;

        /* 編成されていない場合は処理終了 */
        if (cs == null)
        {
            return;
        }
        SetWaitTime();
        ctbNum = (int)UnityEngine.Random.Range(3, 10); // CTB値初期値
        hp     = cs.maxHp;                             // ウェイトのBase値をもとに計算
        MakeCharacterGraphic();                        // 画像オブジェクトの定義など
    }
Beispiel #2
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);
    }
Beispiel #3
0
    /*
     * ===========================================================
     *  表示関係
     * ===========================================================
     */
    // 顔グラ(CTB)のオブジェクトをインスタンス化する
    public void MakeCharacterGraphic()
    {
        // CTB 顔グラオブジェの追加
        // ctbFaceObj = new CtbFaceObj();
        ctbFaceObj = gameObject.AddComponent <CtbFaceObj>();
        ctbFaceObj.Init(this);                          // 初期化(3オブジェクトインスタンス化)
        ctbFaceObj.SetPosY(isPlayerCharacter, partyId); // Y座標セット

        /*
         * ステータスオブジェクトの生成(CTB 顔グラオブジェ生成後)
         */
        // 予測オブジェクトの追加
        predictObj = gameObject.AddComponent <PredictObject>();
        predictObj.Init(this);
        // ステータスオブジェクトの生成(CTB 顔グラオブジェ生成後)
        MakeStatusObj();
    } // --- MakeCharacterGraphic()
Beispiel #4
0
    } // ---SetCursorObj

    /*
     * ================================================
     * コマンド選択 / リーダーキャラクター選択
     * ================================================
     */
    // 行動内容選択(アタック・ユニゾン・攻撃)
    //  設定方法: vec( int, int, int ) で選択肢を
    //             表示するか否かを示す
    private IEnumerator DoSelectCommand(Vector3 vec)
    {
        string     FilePath = "Prefabs\\Battle\\SelectAction";
        GameObject selObj   = (GameObject)Instantiate(Resources.Load(FilePath),
                                                      new Vector3(400, 0, 0),
                                                      Quaternion.identity);

        selObj.GetComponent <SelectAction>().SetParameter(vec);
        selObj.transform.SetParent(canvas.transform, false);

        // コマンドを選ぶまでループ
        int mouseOverId  = 0;
        int _mouseOverId = -1;

        while (true)
        {
            // マウスオーバーに基づく予測表示処理
            if (mouseOverId != _mouseOverId)
            {
                PredictObject.SetInactiveAllPredictObj(cd, null);
                if (mouseOverId == 0)
                {
                    OpeCharaList.SetPredictActionableCharacter(cd);
                }
                if (mouseOverId == 2)
                {
                    OpeCharaList.SetMagPredictActionableCharacter(cd);
                }
            }
            mouseOverId = selObj.GetComponent <SelectAction>().mouseOverId;

            // 決定処理
            if (selObj.GetComponent <SelectAction>().selectId >= 0)
            {
                selectedCommand = selObj.GetComponent <SelectAction>().selectId;
                break;
            }
            yield return(0);
        }
        Destroy(selObj);
        PredictObject.SetInactiveAllPredictObj(cd, null);
    }
Beispiel #5
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;
        }
    }