void EnemyFoucusPhase() { // ユニットの移動前の座標を保存 oldFocusUnitPos = focusUnitObj.transform.position; // 移動できる範囲で、ターゲットに攻撃できる場所のリストを取得する List <Vector3> attackLocationList = Main.GameManager.GetEnemyAI().GetAttackLocationList(phaseManager.activeAreaManager.activeAreaList, focusUnitObj, playerUnitObj); // 攻撃対象に対して、攻撃できる場所がなかった場合、行動終了とする if (attackLocationList.Count < 1) { // このターンは移動しない focusUnitObj.GetComponent <UnitInfo>().Moving(true); // 行動済み focusUnitObj = null; phase = Enums.PHASE.RESULT; return; } // TODO とりあえず一つ目を目的地とする Vector3 movePos = attackLocationList[0]; Debug.Log("movePos:" + movePos); // 目標までのルートを取得し設定 Main.GameManager.GetRoute().CheckShortestRoute(ref phaseManager, movePos); focusUnitObj.GetComponent <MoveController>().SetMoveRoots(moveRoot); // ターンとUI切り替え phase = Enums.PHASE.MOVE; }
void EnemyStartPhase() { // ターン終了ボタンの無効化 turnEndBtn.interactable = false; if (turnImageAnim == null) { // ターン切り替えSE↓ audioManager.TurnChengeSE(); // ターン開始アニメーションの再生 turnImageAnim = enemyTurnImage.gameObject.GetComponent <Animator>(); enemyTurnImage.gameObject.SetActive(true); } else { // アニメーションが終了したらターンを開始する if (!(turnImageAnim.GetCurrentAnimatorStateInfo(0).normalizedTime < 1.0f)) { // 敵のターンBGMへ変更↓ audioManager.EnemyTurnBGM(); // ターンとUI切り替え phase = Enums.PHASE.STANDBY; //selectUnitInfoUI.SetActive(false); //cellInfoUI.SetActive(false); enemyTurnImage.gameObject.SetActive(false); //cursorObj.SetActive(false); turnImageAnim = null; } } }
void EnemyEndPhase() { // 自軍ユニットを全て未行動に戻す Main.GameManager.GetUnit().UnBehaviorUnitAll(Enums.ARMY.ENEMY); // プレイヤーターンに切り替える TurnChange(Enums.ARMY.ALLY); phase = Enums.PHASE.START; }
// 攻撃ボタン処理 public void OnAttackBtn() { // ターンとUI切り替え phase = Enums.PHASE.BATTLE_STANDBY; activeArea.SetActive(false); //activeUI.SetActive(false); //rootArea.SetActive(false); cursorObj.SetActive(true); }
/// <summary> /// バトルキャンセル処理 /// </summary> void OnCancelBattleStandby() { activeAreaManager.RemoveAttackArea(); // ターンとUIの切り替え phase = Enums.PHASE.MOVE; battleStandbyUI.SetActive(false); //cursorObj.SetActive(false); moveMarkerManager.SetActive(true); }
void MyStandbyPhase() { turnEndBtn.interactable = true; // カーソルが更新されたら if (cursorPos != oldCursorPos) { // カーソルの更新 oldCursorPos = cursorPos; // セル情報の更新 cellInfoUI.GetComponent <CellInfo>().SetData(Main.GameManager.GetMap().field.cells[-(int)cursorPos.y, (int)cursorPos.x]); // ユニット情報の更新 if (Main.GameManager.GetUnit().GetMapUnitInfo(cursorPos)) { selectUnitInfoUI.GetComponent <SelectUnitInfo>().ShowUnitInfo(Main.GameManager.GetUnit().GetMapUnitInfo(cursorPos)); } //else //selectUnitInfoUI.GetComponent<SelectUnitInfo>().CloseUnitInfo(); } // クリック処理 if (Input.GetMouseButtonDown(0)) { // シーン削除 //SceneManager.UnloadScene("conversation"); // 未行動の自軍ユニットであればフォーカスし、アクティブエリアを表示する if (Main.GameManager.GetUnit().GetMapUnitInfo(cursorPos) != null && activeAreaManager.activeAreaList == null) { if (Main.GameManager.GetUnit().GetMapUnitInfo(cursorPos).aRMY == Enums.ARMY.ALLY) { if (!Main.GameManager.GetUnit().GetMapUnitInfo(cursorPos).isMoving()) { // フォーカスユニットの取得 focusUnitObj = Main.GameManager.GetUnit().GetMapUnitObj(cursorPos); activeAreaManager.CreateActiveArea(focusUnitObj, true); // クリック時SE↓ audioManager.ClickSE(); // ターンとUIの切り替え phase = Enums.PHASE.FOCUS; //selectUnitInfoUI.SetActive(false); cellInfoUI.SetActive(false); activeAreaManager.activeAreaObj.SetActive(true); moveMarkerManager.SetActive(true); } } } } }
void EnemyMovePhase() { // 移動が終わったらフェイズを切り替える if (focusUnitObj.GetComponent <MoveController>().IsMoved()) { // Unitリストの座標を更新 focusUnitObj.GetComponent <UnitInfo>().Moving(true); Main.GameManager.GetUnit().MoveMapUnitObj(oldFocusUnitPos, focusUnitObj.transform.position); //Debug.Log(focusUnitObj); //Debug.Log(focusUnitObj.transform.position); // フェイズの切り替え phase = Enums.PHASE.BATTLE_STANDBY; } }
/// <summary> /// ターン開始時 /// </summary> void MyStartPhase() { // ターン終了ボタンの有効化 turnEndBtn.interactable = true; if (turnImageAnim == null) { // ターン開始アニメーションの再生 turnImageAnim = playerTurnImage.gameObject.GetComponent <Animator>(); playerTurnImage.gameObject.SetActive(true); // ターン切り替えSE↓ audioManager.TurnChengeSE(); // ランダムな未行動ユニット1体の座標にカーソルを合わせる focusUnitObj = Main.GameManager.GetUnit().GetUnBehaviorRandomUnit(Enums.ARMY.ALLY); cursorPos = focusUnitObj.transform.position; cursorObj.transform.position = cursorPos; } else { // アニメーションが終了したらターンを開始する if (!(turnImageAnim.GetCurrentAnimatorStateInfo(0).normalizedTime < 1.0f)) { // 自軍のターンBGM再生 audioManager.PlayerTurnBGM(); // ターンとUIの切り替え List <GameObject> list = Main.GameManager.GetUnit().GetUnBehaviorUnits(Enums.ARMY.ALLY); if (list.Count == 0) { phase = Enums.PHASE.END; } else { phase = Enums.PHASE.STANDBY; } selectUnitInfoUI.SetActive(true); cellInfoUI.SetActive(true); playerTurnImage.gameObject.SetActive(false); activeAreaManager.activeAreaObj.SetActive(true); cursorObj.SetActive(true); turnImageAnim = null; } } }
/// <summary> /// ユニット同士の戦闘終了後 /// </summary> void MyResultPhase() { // アニメーションを元に戻す if (focusUnitObj) { focusUnitObj.GetComponent <MoveController>().PlayAnim(Enums.MOVE.DOWN); } // 未移動であれば移動済みとする if (!focusUnitObj.GetComponent <UnitInfo>().isMoving()) { Main.GameManager.GetUnit().MoveMapUnitObj(oldFocusUnitPos, focusUnitObj.transform.position); focusUnitObj.GetComponent <UnitInfo>().Moving(true); // 行動済み } // グレースケールにする focusUnitObj.GetComponent <EffectController>().GrayScale(true); activeAreaManager.RemoveActiveArea(); activeAreaManager.RemoveAttackArea(); moveMarkerManager.RemoveMarker(); focusUnitObj = null; // ターンとUIの切り替え List <GameObject> list = Main.GameManager.GetUnit().GetUnBehaviorUnits(Enums.ARMY.ALLY); if (list.Count == 0) { phase = Enums.PHASE.END; } else { phase = Enums.PHASE.STANDBY; } //activeMenuUI.SetActive(false); battleStandbyUI.SetActive(false); cursorObj.SetActive(true); // 各ボタンの無効化 attackBtn.interactable = false; recoveryBtn.interactable = false; waitingBtn.interactable = false; // 敵キャラ数チェック //EnemyCheck(); }
void MyFoucusPhase() { // 移動マーカの更新 if (cursorPos != oldCursorPos) { // カーソルの更新 oldCursorPos = cursorPos; moveMarkerManager.AddMarker(ref phaseManager); } if (Input.GetMouseButtonDown(0)) { // アクティブエリア(移動可能マス)を選択されたら移動する if (activeAreaManager.activeAreaList[-(int)cursorPos.y, (int)cursorPos.x].aREA == Enums.AREA.MOVE) { // 他ユニットがいなければ if (!Main.GameManager.GetUnit().GetMapUnitInfo(cursorPos)) { // ユニットの移動前の座標を保存 oldFocusUnitPos = focusUnitObj.transform.position; // 移動可能エリアがクリックされたら移動する focusUnitObj.GetComponent <MoveController>().SetMoveRoots(moveRoot); // ターンとUI切り替え phase = Enums.PHASE.MOVE; moveMarkerManager.SetActive(false); //cursorObj.SetActive(false); activeAreaManager.activeAreaObj.SetActive(false); } } else // アクティブエリア外をクリックされたらフォーカスを外す { // アニメーションを元に戻す focusUnitObj.GetComponent <MoveController>().PlayAnim(Enums.MOVE.DOWN); focusUnitObj = null; // ターンとUI切り替え phase = Enums.PHASE.STANDBY; moveMarkerManager.RemoveMarker(); activeAreaManager.RemoveActiveArea(); } } }
/// <summary> /// 行動終了ボタン処理 /// </summary> public void MoveCansel() { // アニメーションを元に戻す //if (focusUnit) focusUnit.GetComponent<MoveController>().NotFocuse(); // ユニットの座標を元に戻す focusUnitObj.GetComponent <MoveController>().DirectMove(oldFocusUnitPos); activeAreaManager.RemoveActiveArea(); activeAreaManager.RemoveAttackArea(); moveMarkerManager.RemoveMarker(); focusUnitObj = null; // ターンとUIの切り替え Debug.Log("TURN.SELECT"); phase = Enums.PHASE.STANDBY; //activeUI.SetActive(false); cursorObj.SetActive(true); }
void EnemyResultPhase() { // 敵の向きを元に戻す if (playerUnitObj) { playerUnitObj.GetComponent <MoveController>().PlayAnim(Enums.MOVE.DOWN); } if (focusUnitObj) { // アニメーションを元に戻す focusUnitObj.GetComponent <MoveController>().PlayAnim(Enums.MOVE.DOWN); // グレースケールにする focusUnitObj.GetComponent <EffectController>().GrayScale(true); // 未移動であれば移動済みとする if (!focusUnitObj.GetComponent <UnitInfo>().isMoving()) { Main.GameManager.GetUnit().MoveMapUnitObj(oldFocusUnitPos, focusUnitObj.transform.position); focusUnitObj.GetComponent <UnitInfo>().Moving(true); // 行動済み } } activeAreaManager.RemoveActiveArea(); activeAreaManager.RemoveAttackArea(); focusUnitObj = null; // ターンとUIの切り替え List <GameObject> list = Main.GameManager.GetUnit().GetUnBehaviorUnits(Enums.ARMY.ENEMY); if (list.Count == 0) { phase = Enums.PHASE.END; } else { phase = Enums.PHASE.STANDBY; } //Main.GameManager.GetUnit().CheckEnemyUnits(); //Main.GameManager.GetUnit().CheckPlayerUnits(); }
void EnemyStandbyPhase() { GameObject checkUnitObj = Main.GameManager.GetUnit().GetUnBehaviorRandomUnit(Enums.ARMY.ENEMY); if (checkUnitObj != null) { // アクティブエリアの取得 activeAreaManager.CreateActiveArea(checkUnitObj, true); // 行動範囲内にて攻撃できるプレイヤーUnitを探索する List <GameObject> targetList = Main.GameManager.GetEnemyAI().GetAttackTargetList(phaseManager.activeAreaManager.activeAreaList); playerUnitObj = Main.GameManager.GetEnemyAI().GetAttackTargetSelection(checkUnitObj.GetComponent <UnitInfo>(), targetList); if (playerUnitObj != null) { // 行動範囲内に攻撃できる対象がいる場合は、移動して攻撃する focusUnitObj = checkUnitObj; phase = Enums.PHASE.FOCUS; } else if (false) { // TODO 攻撃が届かないので、一番近いプレイヤーユニットに近づく } else { // このターンは移動しない checkUnitObj.GetComponent <UnitInfo>().Moving(true); // 行動済み focusUnitObj = null; phase = Enums.PHASE.RESULT; } } else { phase = Enums.PHASE.END; } }
void EnemyBattlePhase() { if (!isBattle) { while (true) { // こちらの攻撃 if (0 < enemyAttackCount) { // 必殺の検証 enemyAttackState = Main.GameManager.GetCommonCalc().ProbabilityDecision(enemyDeathblow) ? Enums.BATTLE.DEATH_BLOW : Enums.BATTLE.NORMAL; // 通常攻撃命中判定 if (enemyAttackState != Enums.BATTLE.DEATH_BLOW) { enemyAttackState = Main.GameManager.GetCommonCalc().GetHitDecision(enemyAccuracy) ? Enums.BATTLE.NORMAL : Enums.BATTLE.MISS; } // 通常攻撃か必殺が発生したら攻撃イベントとして登録する AttackEvent attackEvent = gameObject.AddComponent <AttackEvent>(); attackEvent.phaseManager = this; attackEvent.myUnitObj = enemyUnitObj; attackEvent.myAttackPower = enemyAttackPower; attackEvent.myAttackState = enemyAttackState; attackEvent.targetUnitObj = playerUnitObj; attackEvent.targetHPText = textMyHP; battleManager.AddEvent(attackEvent); // SEの再生 //audioManager.AttackSE(); enemyAttackCount--; } // プレイヤーUnitの反撃 if (0 < myAttackCount) { // 必殺の検証 myAttackState = Main.GameManager.GetCommonCalc().ProbabilityDecision(myDeathblow) ? Enums.BATTLE.DEATH_BLOW : Enums.BATTLE.NORMAL; // 通常攻撃命中判定 if (myAttackState != Enums.BATTLE.DEATH_BLOW) { myAttackState = Main.GameManager.GetCommonCalc().GetHitDecision(myAccuracy) ? Enums.BATTLE.NORMAL : Enums.BATTLE.MISS; } // 通常攻撃か必殺が発生したら攻撃イベントとして登録する AttackEvent attackEvent = gameObject.AddComponent <AttackEvent>(); attackEvent.phaseManager = this; attackEvent.myUnitObj = playerUnitObj; attackEvent.myAttackPower = myAttackPower; attackEvent.myAttackState = myAttackState; attackEvent.targetUnitObj = enemyUnitObj; attackEvent.targetHPText = textEnemyHP; battleManager.AddEvent(attackEvent); // SEの再生 //audioManager.AttackSE(); myAttackCount--; } // 戦闘イベント登録終了 if (myAttackCount <= 0 && enemyAttackCount <= 0) { break; } } // 敵をこちらに向かせる //Vector3 distance = playerUnitObj.transform.position - focusUnitObj.transform.position; //if (Mathf.Abs(distance.y) <= Mathf.Abs(distance.x)) //{ // if (playerUnitObj.transform.position.x < focusUnitObj.transform.position.x) // playerUnitObj.GetComponent<MoveController>().PlayAnim(Enums.MOVE.RIGHT); // else // playerUnitObj.GetComponent<MoveController>().PlayAnim(Enums.MOVE.LEFT); //} //else //{ // if (playerUnitObj.transform.position.y < focusUnitObj.transform.position.y) // playerUnitObj.GetComponent<MoveController>().PlayAnim(Enums.MOVE.UP); // else // playerUnitObj.GetComponent<MoveController>().PlayAnim(Enums.MOVE.DOWN); //} // バトルの実行 battleManager.StartEvent(); isBattle = true; } else if (!battleManager.isBattle()) { // バトル終了 isBattle = false; // プレイヤーUnitが生存していれば経験値取得処理を行う if (playerUnitObj) { // 経験値処理が終わるまでフェーズを停止 phase = Enums.PHASE.STOP; // Exp取得処理の開始 expGaugeController.GaugeUpdate(3000, playerUnitObj.GetComponent <UnitInfo>(), () => { phase = Enums.PHASE.RESULT; }); } else { phase = Enums.PHASE.RESULT; } } }
void EnemyBattleStandbyPhase() { // バトルパラメータのセット enemyUnitObj = focusUnitObj; textEnemyHP = battleStandbyUI.GetComponent <BattleStandby>().textEnemyHP; textMyHP = battleStandbyUI.GetComponent <BattleStandby>().textMyHP; // 敵ユニット(攻撃する側) enemyAttackPower = Main.GameManager.GetCommonCalc().GetAttackDamage(focusUnitObj.GetComponent <UnitInfo>(), playerUnitObj.GetComponent <UnitInfo>()); enemyAccuracy = Main.GameManager.GetCommonCalc().GetHitRate(focusUnitObj.GetComponent <UnitInfo>(), playerUnitObj.GetComponent <UnitInfo>()); enemyDeathblow = Main.GameManager.GetCommonCalc().GetDeathBlowRete(focusUnitObj.GetComponent <UnitInfo>(), playerUnitObj.GetComponent <UnitInfo>()); enemyAttackCount = Main.GameManager.GetCommonCalc().GetAttackCount(focusUnitObj.GetComponent <UnitInfo>(), playerUnitObj.GetComponent <UnitInfo>()); // TODO //enemyAttackCount = 1; // プレイヤーユニット if (Main.GameManager.GetCommonCalc().GetCellDistance( playerUnitObj.transform.position, focusUnitObj.transform.position) <= playerUnitObj.GetComponent <UnitInfo>().attackRange) { // 反撃可能 myAttackPower = Main.GameManager.GetCommonCalc().GetAttackDamage(playerUnitObj.GetComponent <UnitInfo>(), focusUnitObj.GetComponent <UnitInfo>()); myAccuracy = Main.GameManager.GetCommonCalc().GetHitRate(playerUnitObj.GetComponent <UnitInfo>(), focusUnitObj.GetComponent <UnitInfo>()); myDeathblow = Main.GameManager.GetCommonCalc().GetDeathBlowRete(playerUnitObj.GetComponent <UnitInfo>(), focusUnitObj.GetComponent <UnitInfo>()); myAttackCount = Main.GameManager.GetCommonCalc().GetAttackCount(playerUnitObj.GetComponent <UnitInfo>(), focusUnitObj.GetComponent <UnitInfo>()); } else { // 反撃不可 myAttackPower = -1; myAccuracy = -1; myDeathblow = -1; myAttackCount = 0; } // 敵の向きに合わせてUnitのアニメーション変更 Vector3 distance = playerUnitObj.transform.position - focusUnitObj.transform.position; if (Mathf.Abs(distance.y) <= Mathf.Abs(distance.x)) { if (playerUnitObj.transform.position.x > focusUnitObj.transform.position.x) { focusUnitObj.GetComponent <MoveController>().PlayAnim(Enums.MOVE.RIGHT); } else { focusUnitObj.GetComponent <MoveController>().PlayAnim(Enums.MOVE.LEFT); } } else { if (playerUnitObj.transform.position.y > focusUnitObj.transform.position.y) { focusUnitObj.GetComponent <MoveController>().PlayAnim(Enums.MOVE.UP); } else { focusUnitObj.GetComponent <MoveController>().PlayAnim(Enums.MOVE.DOWN); } } phase = Enums.PHASE.BATTLE; }
/// <summary> /// 外部変更用 /// </summary> /// <param name="player"></param> public void ChangePhase(Enums.PHASE newPhase) { phase = newPhase; }
void MyBattleStandbyPhase() { // 攻撃範囲の描画 if (activeAreaManager.attackAreaList == null) { activeAreaManager.CreateAttackArea(focusUnitObj.transform.position, focusUnitObj.GetComponent <UnitInfo>().attackRange); } else { // カーソルを敵ユニットに合わせた時の処理 if (Main.GameManager.GetUnit().GetMapUnitInfo(cursorPos) && Main.GameManager.GetUnit().GetMapUnitInfo(cursorPos).aRMY == Enums.ARMY.ENEMY && activeAreaManager.attackAreaList[-(int)cursorPos.y, (int)cursorPos.x].aREA == Enums.AREA.ATTACK) { // バトルパラメータのセット playerUnitObj = focusUnitObj; enemyUnitObj = Main.GameManager.GetUnit().GetMapUnitObj(cursorPos); textMyHP = battleStandbyUI.GetComponent <BattleStandby>().textMyHP; textEnemyHP = battleStandbyUI.GetComponent <BattleStandby>().textEnemyHP; myAttackPower = Main.GameManager.GetCommonCalc().GetAttackDamage(focusUnitObj.GetComponent <UnitInfo>(), enemyUnitObj.GetComponent <UnitInfo>()); myAccuracy = Main.GameManager.GetCommonCalc().GetHitRate(focusUnitObj.GetComponent <UnitInfo>(), enemyUnitObj.GetComponent <UnitInfo>()); myDeathblow = Main.GameManager.GetCommonCalc().GetDeathBlowRete(focusUnitObj.GetComponent <UnitInfo>(), enemyUnitObj.GetComponent <UnitInfo>()); myAttackCount = Main.GameManager.GetCommonCalc().GetAttackCount(focusUnitObj.GetComponent <UnitInfo>(), enemyUnitObj.GetComponent <UnitInfo>()); enemyAttackPower = Main.GameManager.GetCommonCalc().GetAttackDamage(enemyUnitObj.GetComponent <UnitInfo>(), focusUnitObj.GetComponent <UnitInfo>()); enemyAccuracy = Main.GameManager.GetCommonCalc().GetHitRate(enemyUnitObj.GetComponent <UnitInfo>(), focusUnitObj.GetComponent <UnitInfo>()); enemyDeathblow = Main.GameManager.GetCommonCalc().GetDeathBlowRete(enemyUnitObj.GetComponent <UnitInfo>(), focusUnitObj.GetComponent <UnitInfo>()); enemyAttackCount = Main.GameManager.GetCommonCalc().GetAttackCount(enemyUnitObj.GetComponent <UnitInfo>(), focusUnitObj.GetComponent <UnitInfo>()); // 敵の向きに合わせてUnitのアニメーション変更 if (Mathf.Abs(focusUnitObj.transform.position.x - enemyUnitObj.transform.position.x) <= 0f) { if (focusUnitObj.transform.position.y < enemyUnitObj.transform.position.y) { focusUnitObj.GetComponent <MoveController>().PlayAnim(Enums.MOVE.UP); } else { focusUnitObj.GetComponent <MoveController>().PlayAnim(Enums.MOVE.DOWN); } } else if (focusUnitObj.transform.position.x < enemyUnitObj.transform.position.x) { focusUnitObj.GetComponent <MoveController>().PlayAnim(Enums.MOVE.RIGHT); } else { focusUnitObj.GetComponent <MoveController>().PlayAnim(Enums.MOVE.LEFT); } // UIの切り替え if (!battleStandbyUI.activeSelf) { battleStandbyUI.SetActive(true); } battleStandbyUI.GetComponent <BattleStandby>().SetMyUnitData( focusUnitObj.GetComponent <UnitInfo>(), myAttackPower, myAccuracy, myDeathblow); battleStandbyUI.GetComponent <BattleStandby>().SetEnemyUnitData( enemyUnitObj.GetComponent <UnitInfo>(), enemyAttackPower, enemyAccuracy, enemyDeathblow); } else if (battleStandbyUI.activeSelf) { battleStandbyUI.SetActive(false); // UIの切り替え } // クリック処理 if (Input.GetMouseButtonDown(0)) { // アクティブエリア(攻撃可能マス)で攻撃対象を選択する if (activeAreaManager.attackAreaList[-(int)cursorPos.y, (int)cursorPos.x].aREA == Enums.AREA.ATTACK && Main.GameManager.GetUnit().GetMapUnitInfo(cursorPos) && Main.GameManager.GetUnit().GetMapUnitInfo(cursorPos).aRMY == Enums.ARMY.ENEMY) { // 移動完了 Main.GameManager.GetUnit().MoveMapUnitObj(oldFocusUnitPos, focusUnitObj.transform.position); focusUnitObj.GetComponent <UnitInfo>().Moving(true); // 行動済み // 戦闘開始 // ターンとUIの切り替え //cursorObj.SetActive(false); activeAreaManager.attackAreaObj.SetActive(false); phase = Enums.PHASE.BATTLE; } else { OnCancelBattleStandby(); // UIの切り替え } } } }