/********************************* * 函数说明: 删除回调 * 返 回 值: void * 参数说明: callback * 参数说明: callbackRepeat * 注意事项: 无 *********************************/ void RemoveDelay(MsgCallback callback, MsgCallbackRepeat callbackRepeat) { // 定义一个延时回调句柄 DelayMsgHandler delayMsgHandler = default(DelayMsgHandler); // 检查参数 if (callback == null && callbackRepeat == null) { return; } // 检查是否已经添加过 int iCount = delayHandlerList.Count; for (int i = 0; i < iCount; i++) { delayMsgHandler = delayHandlerList[i]; // 销毁状态的话不处理 if (delayMsgHandler.state == OperateState.Remove) { continue; } // 检查回调的状态 if ((callback != null && delayMsgHandler.callback == callback) || (callbackRepeat != null && delayMsgHandler.callbackRepeat == callbackRepeat)) { // 移除上一条消息 而不是直接更新消息是因为 防止在Update的时候添加消息,造成同一帧执行 delayMsgHandler.state = OperateState.Remove; continue; } } // 启用脚本 this.enabled = true; }
/********************************* * 函数说明: 添加一个延时回调 * 返 回 值: void * 参数说明: callback 回调函数 * 参数说明: callbackRepeat 回调函数 * 参数说明: msgArg 回调函数的参数 * 参数说明: delayFrame 延时帧数 最少一帧 * 参数说明: isSameFunctionCallOnce 在上一个回调函数还没有执行的是时候忽略同一个回调函数 * 参数说明: isSameFunctionChangeArg 如果一帧之内的同一个回调函数 那么我们是否更新参数 * 参数说明: isResetDelay 如果上一个回调函数等待执行,是否重置延时回调 * 注意事项: 无 *********************************/ void AddDelay(MsgCallback callback, MsgCallbackRepeat callbackRepeat, object msgArg, int delayFrame = 1, bool isSameFunctionCallOnce = true, bool isSameFunctionChangeArg = false, bool isReSetDelay = true) { // 定义一个延时回调句柄 DelayMsgHandler delayMsgHandler = default(DelayMsgHandler); // 检查参数 if (callback == null && callbackRepeat == null) { Debug.LogError("You can not add a null Delay Callback , check your args!"); return; } // 检查是否已经添加过 if (isSameFunctionCallOnce == true) { int iCount = delayHandlerList.Count; for (int i = 0; i < iCount; i++) { delayMsgHandler = delayHandlerList[i]; // 销毁状态的话不处理 if (delayMsgHandler.state == OperateState.Remove) { continue; } // 检查回调的状态 if ((callback != null && delayMsgHandler.callback == callback) || (callbackRepeat != null && delayMsgHandler.callbackRepeat == callbackRepeat)) { // 移除上一条消息 而不是直接更新消息是因为 防止在Update的时候添加消息,造成同一帧执行 delayMsgHandler.state = OperateState.Remove; // 更新消息参数 msgArg = isSameFunctionChangeArg == true ? msgArg : delayMsgHandler.msgArg; // 是否重置延时 delayFrame = isReSetDelay == true ? delayFrame : delayMsgHandler.delayframe; break; } } } // 添加一条新的消息到结尾 delayMsgHandler = new DelayMsgHandler(); delayMsgHandler.callback = callback; delayMsgHandler.callbackRepeat = callbackRepeat; delayMsgHandler.msgArg = msgArg; delayMsgHandler.state = OperateState.None; delayMsgHandler.delayframe = Mathf.Max(1, delayFrame); delayMsgHandler.maxframe = delayMsgHandler.delayframe; delayMsgHandler.Initialization(); delayHandlerList.Add(delayMsgHandler); // 启用脚本 this.enabled = true; }
/********************************* * 函数说明: 删除回调 * 返 回 值: void * 参数说明: callbackRepeat * 注意事项: 无 *********************************/ public void RemoveDelay(MsgCallbackRepeat callbackRepeat) { RemoveDelay(null, callbackRepeat); }
/********************************* * 函数说明: 添加一个延时回调 * 返 回 值: void * 参数说明: callbackRepeat 回调函数(根据返回值确认是否重复回调 返回Repeat.Destroy 销毁 返回Repeat.Continue 继续间隔多少帧执行) * 参数说明: msgArg 回调函数的参数 * 参数说明: delayFrame 延时帧数 最少一帧 * 参数说明: isSameFunctionCallOnce 在上一个回调函数还没有执行的是时候忽略同一个回调函数 * 参数说明: isSameFunctionChangeArg 如果一帧之内的同一个回调函数 那么我们是否更新参数 * 参数说明: isResetDelay 如果上一个回调函数等待执行,是否重置延时回调 * 注意事项: 无 *********************************/ public void AddDelay(MsgCallbackRepeat callbackRepeat, object msgArg, int delayFrame = 1, bool isSameFunctionCallOnce = true, bool isSameFunctionChangeArg = false, bool isResetDelay = true) { AddDelay(null, callbackRepeat, msgArg, delayFrame, isSameFunctionCallOnce, isSameFunctionChangeArg, isResetDelay); }