コード例 #1
0
ファイル: CharaControl.cs プロジェクト: Toshizabeth/Ling
        /// <summary>
        /// どういう行動をするか攻撃、移動AIクラスから思考し、決定する。
        /// </summary>
        public async UniTask ThinkAIProcess(Utility.Async.WorkTimeAwaiter timeAwaiter)
        {
            // 自分が状態異常で行動できない場合はスキップ

            // 第一優先として、自分が「特技」「攻撃」ができるか。
            // 特技の思考
            await ThinkActionStartAsync();

            // 特技が使える場合はその処理に進む
            if (_model.ActionThinkCore.Result != null)
            {
                return;
            }

            // 攻撃
            await _model.AttackAI.ExecuteAsync(this, timeAwaiter);

            if (_model.AttackAI.CanActable)
            {
                return;
            }

            // それができない場合、「移動」をする。
            await _model.MoveAI.ExecuteAsync(this, timeAwaiter);
        }
コード例 #2
0
        public virtual async UniTask ExecuteAsync(Chara.ICharaController unit, Utility.Async.WorkTimeAwaiter timeAwaiter)
        {
            _unit        = unit;
            _tileDataMap = null;
            _roomData    = null;

            await ExexuteInternalAsync(timeAwaiter);
        }
コード例 #3
0
        public override void PhaseStart()
        {
            _argment = Argument as Arg;

            _timeAwaiter = new Utility.Async.WorkTimeAwaiter();
            _timeAwaiter.Setup(0.1f);

            ThinkAIProcessesAsync().Forget();
        }
コード例 #4
0
        private List <Chara.ICharaController> _targets = new List <Chara.ICharaController>();       // ターゲット

        #endregion


        #region プロパティ

        #endregion


        #region コンストラクタ, デストラクタ

        #endregion


        #region public, protected 関数

        protected override async UniTask ExexuteInternalAsync(Utility.Async.WorkTimeAwaiter timeAwaiter)
        {
            // 自分の8方向のマスにターゲットが存在するか
            // なければもう何もしない
            if (TryGetAttackTargetPosition(_masterAIData.FirstTarget, out var targetPos))
            {
                // 目的地を取得したターゲットに更新する(部屋から逃げたときに追跡できるように)
                _unit.Model.MoveAI.SetDestination(targetPos);

                SetAttackProcess(targetPos);
                CanActable = true;
            }
        }
コード例 #5
0
 protected virtual UniTask ExexuteInternalAsync(Utility.Async.WorkTimeAwaiter timeAwaiter) =>
 default(UniTask);