/// <summary> /// 非同期 /// </summary> public async override UniTask PhaseStartAsync(CancellationToken token) { await _player.WaitAttackProcess(); // メッセージが出ている場合は待機 await _battleManager.WaitMessageSending(); _player.SetFollowCameraEnable(true); // 死んでいる敵は除外する _targets.RemoveAll(target => target.Status.IsDead.Value); // ターゲットがいない場合は普通に敵思考に回す if (!_targets.IsNullOrEmpty()) { // 攻撃した敵が生きている場合、最優先で行動させる // 敵思考に移行する var argument = new BattlePhaseEnemyThink.Arg(); argument.Targets = _targets; argument.nextPhase = Phase.PlayerActionStart; // 経験値処理に移動 Change(Phase.Exp, BattlePhaseExp.Arg.CreateAtEnemyThink(argument)); } else { Change(Phase.Exp, BattlePhaseExp.Arg.CreateAtEnemyThink(null)); } }
public override async UniTask PhaseStartAsync(CancellationToken token) { await Scene.ProcessContainer.UniTaskExecuteOnceAsync(_arg.ActionProcessType, token : token); // メッセージが出ている場合は待機 await _battleManager.WaitMessageSending(); // プレイヤーのフォローカメラを戻す _player.SetFollowCameraEnable(true); // 終了時、攻撃した敵が生きていたらその敵から優先して行動する var targets = _arg.TargetGetter.Targets; // 死んでいる敵は除外する targets.RemoveAll(target => target.Status.IsDead.Value); // ターゲットがいない場合は普通に敵思考に回す if (!targets.IsNullOrEmpty()) { // 攻撃した敵が生きている場合、最優先で行動させる // 敵思考に移行する var argument = new BattlePhaseEnemyThink.Arg(); argument.Targets = targets; argument.nextPhase = Phase.PlayerActionStart; // 経験値処理に移動 Change(Phase.Exp, BattlePhaseExp.Arg.CreateAtEnemyThink(argument)); } else { Change(Phase.Exp, BattlePhaseExp.Arg.CreateAtEnemyThink(null)); } }
/// <summary> /// 終了後、敵の行動に移動する /// </summary> public static Arg CreateAtEnemyThink(BattlePhaseEnemyThink.Arg enemyThinkArg) => new Arg { NextPhase = Phase.EnemyTink, EnemyThinkArg = enemyThinkArg };