コード例 #1
0
        private IEnumerator CoJobHandle(string key)
        {
            yield return(null);

            JobRepeatBase findJob = JobList.Find(x => x.key == key);

            if (findJob == null)
            {
                yield break;
            }

            switch (findJob.state)
            {
            case JOB_STATE.JOB_EMPTY:
                yield break;

            case JOB_STATE.JOB_STANDBY:
                if (findJob.jobToDoCheck != null)
                {
                    if (findJob.jobToDoCheck(findJob.parameter))
                    {
                        findJob.state = JOB_STATE.JOB_WORKING;

                        findJob.jobTodo?.Invoke(findJob.parameter);
                        if (findJob.jobCoroutine != null)
                        {
                            yield return(StartCoroutine(findJob.jobCoroutine));
                        }

                        findJob.excuteCount++;
                        if (findJob.excuteCount >= findJob.repeatCount && findJob.repeatCount != 0)
                        {
                            findJob.state = JOB_STATE.JOB_DROP;
                        }
                        else
                        {
                            findJob.state = JOB_STATE.JOB_WAITING;
                        }
                    }
                }
                else
                {
                    findJob.state = JOB_STATE.JOB_WORKING;
                    findJob.jobTodo?.Invoke(findJob.parameter);
                    if (findJob.jobCoroutine != null)
                    {
                        yield return(StartCoroutine(findJob.jobCoroutine));
                    }

                    findJob.excuteCount++;
                    if (findJob.excuteCount >= findJob.repeatCount && findJob.repeatCount != 0)
                    {
                        findJob.state = JOB_STATE.JOB_DROP;
                    }
                    else
                    {
                        findJob.state = JOB_STATE.JOB_WAITING;
                    }
                }

                if (findJob.jobAutoDropCheck != null)
                {
                    if (findJob.jobAutoDropCheck(findJob.parameter))
                    {
                        findJob.state = JOB_STATE.JOB_DROP;
                        break;
                    }
                }
                break;

            case JOB_STATE.JOB_WAITING:
                WaitForSeconds WaitForDelay = new WaitForSeconds(findJob.repeatDelay);
                yield return(WaitForDelay);

                findJob.state = JOB_STATE.JOB_STANDBY;
                break;

            case JOB_STATE.JOB_DROP:
                yield break;
            }

            yield return(StartCoroutine(CoJobHandle(findJob.key)));
        }