コード例 #1
0
        public override void PhaseStart()
        {
            // アイテムによって処理を変更する
            var arg = Argument as Arg;

            // 手持ちから使ったらアイテムを減らす
            _userDataHolder.ItemRepository.RemoveByUniq(arg.Item.Uniq);

            // スキル
            var skill        = arg.Item.Skill;
            var player       = _charaManager.Player;
            var skillProcess = player.AddAttackProcess <Skill.SkillProcess>();

            skillProcess.Setup(player, skill);

            // キャラアクションに移動する
            var process = new Process.ProcessCharaAction(player);

            Scene.ProcessContainer.Add(ProcessType.PlayerSkill, process);

            Change(Phase.PlayerActionProcess, new BattlePhasePlayerAction.Arg
            {
                ActionProcessType = ProcessType.PlayerSkill,
                TargetGetter      = skillProcess
            });
        }
コード例 #2
0
        private async UniTask ThinkAIProcessesAsync()
        {
            if (_argment?.Targets?.IsNullOrEmpty() ?? false)
            {
                var targets = _argment.Targets;

                // 特定のターゲットのみ思考させる
                foreach (var target in targets)
                {
                    // 敵じゃなければ何もしない
                    if (target is Chara.EnemyControl enemy)
                    {
                        await enemy.ThinkAIProcess(_timeAwaiter);

                        // スキルプロセスを引っ付ける
                        if (enemy.ActionThinkCore.Result != null)
                        {
                            var skillProcess = enemy.AddAttackProcess <Skill.SkillProcess>();
                            skillProcess.Setup(enemy, enemy.ActionThinkCore.SkillMaster);
                        }
                    }
                }

                // すべて終わったら次に行く
                Change(_argment.nextPhase);
            }
            else
            {
                // 敵は生成された順番から思考する
                // 階層の浅い順から思考を開始する
                foreach (var pair in _charaManager.EnemyControlDict)
                {
                    foreach (var enemy in pair.Value)
                    {
                        // 敵が持つAIによって行動を自由に変更する
                        await enemy.ThinkAIProcess(_timeAwaiter);

                        // スキルプロセスを引っ付ける
                        if (enemy.ActionThinkCore.Result != null)
                        {
                            var skillProcess = enemy.AddAttackProcess <Skill.SkillProcess>();
                            skillProcess.Setup(enemy, enemy.ActionThinkCore.SkillMaster, enemy.ActionThinkCore.Result);
                        }

                        // プロセスを格納する
                        if (enemy.ExistsAttackProcess)
                        {
                            var process = new Process.ProcessCharaAction(enemy);
                            Scene.ProcessContainer.Add(ProcessType.Action, process);
                        }
                    }
                }

                // すべて終わったら次に行く
                Change(Phase.Move);
            }
        }
コード例 #3
0
        /// <summary>
        /// 通常攻撃
        /// </summary>
        private bool Attack()
        {
            /// 攻撃対象がいるかどうか関わらず攻撃に移行する
            var player        = _charaManager.Player;
            var attackProcess = player.AddAttackProcess <Process.ProcessPlayerAttack>();

            attackProcess.Setup();

            // キャラアクションに移動する
            var process = new Process.ProcessCharaAction(player);

            Scene.ProcessContainer.Add(ProcessType.PlayerAttack, process);

            Change(Phase.PlayerActionProcess, new BattlePhasePlayerAction.Arg
            {
                ActionProcessType = ProcessType.PlayerAttack,
                TargetGetter      = attackProcess
            });

            return(true);
        }