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 }); }
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); } }
/// <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); }