// 테스크 진행 처리 하자... 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); } }
// 초기화는 여기서. public TaskManager(BVT_FSM _fsmTask) { fsmTask = _fsmTask; }