/// <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); }
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(); }