Пример #1
0
        // 테스크 진행 처리 하자...
        public IEnumerable DoPerform(BVT_FSM fsmTask)
        {
            // 테스크 처리다...
            while (TaskId.EndOfTask != curr_task.state)
            {
                Debug.Log("[Start] Task : " + curr_task.state);
                if (!fsmTask.Advance(curr_task.state))
                {
                    yield break;
                }

                ActionContext context = new ActionContext(fsmTask.routine)
                {
                    _jobTaskRun = this
                };
                BotSystem.DoCoroutine(context);

                // 일하는 중이면 끝...
                while (!context.isDone)
                {
                    if (!BotSystem.IsEnable)
                    {
                        yield break;
                    }
                    yield return(null);
                }

                // 일 끝났으니 지워~
                var  lastTask = curr_task;
                bool removed  = RemoveTask(lastTask);
                // 내 꺼라면 맞으면 상태에 따라서 처리
                // - 실패 한거면 앞으로 할것들 모두 클리어
                if (lastTask.err_code != ERROR_CODE.SUCCESS || false == removed)
                {
                    Debug.LogFormat(">> Task have an error : {0} , (Clear Task !!)", lastTask.err_code);
                    listTask.Clear();

                    // 에러 상태를 알아야 한다.
                    this.err_code = lastTask.err_code;
                }
                else if (TaskId.EndOfTask == curr_task.state && this.err_code == ERROR_CODE.NONE)                       // 문제 없이 모두 끝마쳤으면 Success
                {
                    this.err_code = ERROR_CODE.SUCCESS;
                }

                yield return(null);
            }
        }
Пример #2
0
 // 초기화는 여기서.
 public TaskManager(BVT_FSM _fsmTask)
 {
     fsmTask = _fsmTask;
 }