// キャラクターのデータ読み込み // 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(); // 画像オブジェクトの定義など }
/* ボタンクリック式 */ 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); }
/* * =========================================================== * 表示関係 * =========================================================== */ // 顔グラ(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()
} // ---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); }
// コマンド内容をもとに // 動けるキャラクターすべての行動(攻撃・ユニゾン・詠唱)を行う // ( 吹き飛び処理もこの中で処理する ) // ┗ 呼出元: 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; } }