/// <summary> /// 运行任务 /// </summary> /// <param name="task">任务</param> /// <param name="deltaTime">一帧的时间</param> /// <returns>是否完成</returns> private bool RunTask(TimeTask task, ref float deltaTime) { var action = task.TimeLine[task.TimeLineIndex]; switch (action.Type) { case TimeTaskActionTypes.DelayFrame: return(TaskDelayFrame(task, ref deltaTime)); case TimeTaskActionTypes.DelayTime: return(TaskDelayTime(task, ref deltaTime)); case TimeTaskActionTypes.LoopFunc: return(TaskLoopFunc(task, ref deltaTime)); case TimeTaskActionTypes.LoopTime: return(TaskLoopTime(task, ref deltaTime)); case TimeTaskActionTypes.LoopFrame: return(TaskLoopFrame(task, ref deltaTime)); default: return(true); } }
public ITimeTask Task(Action <object> task) { TimeTask timeTask = new TimeTask(this) { ActionTaskWithContext = task }; return(timeTask); }
public ITimeTask Task(Action task) { TimeTask timeTask = new TimeTask(this) { ActionTask = task }; return(timeTask); }
protected void CallTask(TimeTask task) { if (task.ActionTask != null) { task.ActionTask(); } if (task.ActionTaskWithContext != null) { task.ActionTaskWithContext(context); } }
protected void CallTask(TimeTask task) { if (task.TaskCall != null) { task.TaskCall.Invoke(); } if (task.TaskCallWithContext != null) { task.TaskCallWithContext.Invoke(context); } }
protected void CallTaskComplete(TimeTask task) { task.IsComplete = true; if (task.OnCompleteTask != null) { task.OnCompleteTask.Invoke(); } if (task.OnCompleteTaskWithContext != null) { task.OnCompleteTaskWithContext.Invoke(context); } }
protected bool TaskLoopFunc(TimeTask task, ref float deltaTime) { TimeTaskAction action = task.TimeLine[task.TimeLineIndex]; if (!action.FuncBoolArg()) { task.TimeLineIndex++; return(true); } CallTask(task); return(false); }
protected bool TaskDelayFrame(TimeTask task, ref float deltaTime) { TimeTaskAction action = task.TimeLine[task.TimeLineIndex]; if (action.IntArgs[0] >= 0 && action.IntArgs[1] < action.IntArgs[0]) { action.IntArgs[1] += 1; deltaTime = 0; if (action.IntArgs[1] >= action.IntArgs[0]) { task.TimeLineIndex++; CallTask(task); return(true); } } return(false); }
/// <summary> /// 循环执行指定帧数 /// </summary> /// <param name="task">任务</param> /// <param name="deltaTime">一帧的时间</param> /// <returns>是否完成</returns> private bool TaskLoopFrame(TimeTask task, ref float deltaTime) { var action = task.TimeLine[task.TimeLineIndex]; if (action.IntArgs[0] >= 0 && action.IntArgs[1] <= action.IntArgs[0]) { action.IntArgs[1] += 1; deltaTime = 0; if (action.IntArgs[1] > action.IntArgs[0]) { task.TimeLineIndex++; return(true); } } CallTask(task); return(false); }
/// <summary> /// 延迟帧执行 /// </summary> /// <param name="task">任务</param> /// <param name="deltaTime">一帧的时间</param> /// <returns>是否完成</returns> private bool TaskDelayFrame(TimeTask task, ref float deltaTime) { var action = task.TimeLine[task.TimeLineIndex]; if (action.IntArgs[0] < 0 || action.IntArgs[1] >= action.IntArgs[0]) { return(false); } action.IntArgs[1] += 1; deltaTime = 0; if (action.IntArgs[1] < action.IntArgs[0]) { return(false); } task.TimeLineIndex++; CallTask(task); return(true); }
protected bool TaskLoopTime(TimeTask task, ref float deltaTime) { TimeTaskAction action = task.TimeLine[task.TimeLineIndex]; if (action.FloatArgs[0] >= 0 && action.FloatArgs[1] <= action.FloatArgs[0]) { action.FloatArgs[1] += deltaTime; if (action.FloatArgs[1] > action.FloatArgs[0]) { deltaTime = action.FloatArgs[1] - action.FloatArgs[0]; task.TimeLineIndex++; return(true); } } CallTask(task); return(false); }
/// <summary> /// 延迟时间执行 /// </summary> /// <param name="task">任务</param> /// <param name="deltaTime">一帧的时间</param> /// <returns>是否完成</returns> private bool TaskDelayTime(TimeTask task, ref float deltaTime) { var action = task.TimeLine[task.TimeLineIndex]; if (!(action.FloatArgs[0] >= 0) || !(action.FloatArgs[1] < action.FloatArgs[0])) { return(false); } action.FloatArgs[1] += deltaTime; if (!(action.FloatArgs[1] >= action.FloatArgs[0])) { return(false); } deltaTime = action.FloatArgs[1] - action.FloatArgs[0]; task.TimeLineIndex++; CallTask(task); return(true); }
public void Cancel(TimeTask task) { queueTasks.Remove(task); }
public ITimeTaskHandler Push(TimeTask task) { queueTasks.Add(task); return(task); }