public void CheckFrameTack() { currentFrame++; for (int i = 0; i < tempFrameTaskList.Count; i++) { frameTaskList.Add(tempFrameTaskList[i]); } tempFrameTaskList.Clear(); for (int i = 0; i < frameTaskList.Count; i++) { CyFrameTask frameTask = frameTaskList[i]; if (currentFrame < frameTask.FinishedFrame) { continue; } Action action = frameTask.CallBack; action?.Invoke(); if (frameTask.Count == 1) { frameTaskList.RemoveAt(i); taskIDSet.Remove(frameTask.TaskID); i--; } else { frameTask.FinishedFrame += frameTask.Delay; if (frameTask.Count != 0) { frameTask.Count--; } } } }
public int AddFrameTask(Action callBack, int delay, int count = 1) { int taskID = GetTaskID(); CyFrameTask timeTask = new CyFrameTask(taskID, callBack, currentFrame + delay, delay, count >= 0 ? count : 1); tempFrameTaskList.Add(timeTask); taskIDSet.Add(taskID); return(taskID); }