/// <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));
            }
        }
Example #3
0
 /// <summary>
 /// 終了後、敵の行動に移動する
 /// </summary>
 public static Arg CreateAtEnemyThink(BattlePhaseEnemyThink.Arg enemyThinkArg) =>
 new Arg
 {
     NextPhase = Phase.EnemyTink, EnemyThinkArg = enemyThinkArg
 };