/// <summary>
        /// 核心功能,所有任务靠这个推进度
        /// 执行下个任务
        /// </summary>
        void DoNextTask()
        {
            if (isDoing)
            {
                return;
            }

            //没有东西的时候 跳出
            if (currentTaskGroup == null && this.allTaskList.Count == 0)
            {
                BDebug.Log("---------无任务组,退出----------");
                return;
            }
            else if (currentTaskGroup == null && this.allTaskList.Count > 0)
            {
                BDebug.Log("---------开始执行任务组----------");
                currentTaskGroup = this.allTaskList[0];
            }

            LoadTask task = null;

            //获取一个任务
            for (;;)
            {
                task = currentTaskGroup.GetTask();
                //task为空,或者任务可以执行,跳出
                if (task == null || willDoTaskSet.Contains(task.Id))
                {
                    break;
                }
            }


            //当前任务组已经全部完成
            if (task == null)
            {
                BDebug.Log("---------一组加载任务组已完成----------");
                currentTaskGroup = null;
                this.allTaskList.RemoveAt(0);

                DoNextTask();
            }
            else
            {
                BDebug.Log("执行任务组中task:" + task.Id + " - " + task.ResourcePath);
                isDoing = true;
                //执行任务
                AsyncLoadAssetBundle(task.ResourcePath, b =>
                {
                    //移除任务
                    this.willDoTaskSet.Remove(task.Id);
                    //
                    var path = "assets/resource/runtime/" + task.ResourcePath.ToLower();
                    path     = GetExistPath(path);
                    var obj  = LoadFormAssetBundle <Object>(path, path);
                    //任务完成
                    currentTaskGroup.OnOneTaskComplete(task.Id, task.ResourcePath, obj);
                    isDoing = false;
                    //继续执行
                    DoNextTask();
                });
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 核心功能,所有任务靠这个推进度
        /// 执行下个任务
        /// </summary>
        void DoNextTask()
        {
            if (isDoing)
            {
                return;
            }

            //没有东西的时候 跳出
            if (currentTaskGroup == null && this.allTaskList.Count == 0)
            {
                BDebug.Log("---------无任务组,退出----------");
                return;
            }
            else if (currentTaskGroup == null && this.allTaskList.Count > 0)
            {
                currentTaskGroup = this.allTaskList[0];
                BDebug.Log("---------开始执行任务组----------  |" + currentTaskGroup.GetHashCode());
                foreach (var t in currentTaskGroup.TaskIdList)
                {
                    BDebug.Log("--->" + t.ResourcePath);
                }
            }

            LoadTaskData taskData = null;

            //获取一个任务
            while (true)
            {
                taskData = currentTaskGroup.GetTask();

                //任务不存在当前可执行列表中
                if (taskData != null && !willDoTaskSet.Contains(taskData.Id))
                {
                    currentTaskGroup.RemoveTask(taskData.Id);
                    continue;
                }
                //task为空,或者任务可以执行,跳出
                if (taskData == null || willDoTaskSet.Contains(taskData.Id))
                {
                    break;
                }
            }


            //当前任务组已经全部完成
            if (taskData == null)
            {
                BDebug.Log("---------加载任务组已完成---------- |" + currentTaskGroup.GetHashCode());
                currentTaskGroup = null;
                this.allTaskList.RemoveAt(0);

                DoNextTask();
            }
            else
            {
                //
                BDebug.Log("执行任务组中task:" + taskData.Id + " - " + taskData.ResourcePath);
                isDoing = true;
                //执行任务
                AsyncLoadAssetBundle(taskData.ResourcePath, b =>
                {
                    //移除任务
                    this.willDoTaskSet.Remove(taskData.Id);
                    //

                    var path = GetAssetRealPath(taskData.ResourcePath);
                    var obj  = LoadFormAssetBundle(path, taskData.LoadType);
                    //任务完成
                    currentTaskGroup.OnOneTaskComplete(taskData.Id, taskData.ResourcePath, obj);
                    isDoing = false;
                    //继续执行
                    DoNextTask();
                });
            }
        }