Ejemplo n.º 1
0
    /// <summary>
    /// 获取一个任务
    /// </summary>
    /// <returns></returns>
    public RunTaskStruct GetRunTaskStruct()
    {
        RunTaskStruct.RunTaskStructHandle runTaskStructHandle = null;
        RunTaskStruct runTaskStruct = new RunTaskStruct(nextID++, (handle) => runTaskStructHandle = handle);

        if (runTaskStructHandle != null)
        {
            taskHandleDic.Add(runTaskStruct, runTaskStructHandle);
            runTaskStructHandle.runTaskStateAction = RunTaskState;
        }
        taskDic.Add(runTaskStruct.id, runTaskStruct);
        return(runTaskStruct);
    }
Ejemplo n.º 2
0
    public void Update()
    {
        if (taskList.Count <= 0)
        {
            return;
        }
        RunTaskStruct[] tempTaskArray = taskList.ToArray();
        foreach (RunTaskStruct runTaskStruct in tempTaskArray)
        {
            RunTaskStruct.RunTaskStructHandle runTaskStructHandle = null;
            if (taskHandleDic.TryGetValue(runTaskStruct, out runTaskStructHandle))
            {
                switch (runTaskStructHandle.RunTaskType)
                {
                case EnumRunTaskType.Frame:
                    float nowFrame = runTaskStructHandle.NowFrame;
                    runTaskStructHandle.NowFrame -= runTaskStructHandle.SpeedRate;
                    if (nowFrame > 0)
                    {
                        continue;
                    }
                    else
                    {
                        if (!runTaskStructHandle.HasNext)    //不存在下一次直接移除
                        {
                            removeTaskList.Add(runTaskStruct);
                        }
                        else if (runTaskStructHandle.Conditions != null && !runTaskStructHandle.Conditions())    //存在则判断条件存在且条件不通过,移除
                        {
                            removeTaskList.Add(runTaskStruct);
                        }
                        if (runTaskStructHandle.Callback != null)
                        {
                            runTaskStructHandle.Callback();
                        }
                    }
                    break;

                case EnumRunTaskType.Time:
                    float nowTime = runTaskStructHandle.NowTime;
                    runTaskStructHandle.NowTime -= runTaskStructHandle.SpeedRate * Time.deltaTime;
                    if (nowTime > 0)
                    {
                        continue;
                    }
                    else
                    {
                        if (!runTaskStructHandle.HasNext)    //不存在下一次直接移除
                        {
                            removeTaskList.Add(runTaskStruct);
                        }
                        else if (runTaskStructHandle.Conditions != null && !runTaskStructHandle.Conditions())    //存在则判断条件存在且条件不通过,移除
                        {
                            removeTaskList.Add(runTaskStruct);
                        }
                        if (runTaskStructHandle.Callback != null)
                        {
                            runTaskStructHandle.Callback();
                        }
                    }
                    break;
                }
            }
        }
        foreach (RunTaskStruct runTaskStruct in removeTaskList)
        {
            RunTaskStruct.RunTaskStructHandle runTaskStructHandle = null;
            if (taskHandleDic.TryGetValue(runTaskStruct, out runTaskStructHandle))
            {
            }
            taskList.Remove(runTaskStruct);
        }
        removeTaskList.Clear();
    }