示例#1
0
    /*********************************
    * 函数说明: 删除回调
    * 返 回 值: 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;
    }
示例#2
0
    /*********************************
    * 函数说明: 添加一个延时回调
    * 返 回 值: 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;
    }
示例#3
0
 /*********************************
 * 函数说明: 删除回调
 * 返 回 值: void
 * 参数说明: callbackRepeat
 * 注意事项: 无
 *********************************/
 public void RemoveDelay(MsgCallbackRepeat callbackRepeat)
 {
     RemoveDelay(null, callbackRepeat);
 }
示例#4
0
 /*********************************
 * 函数说明: 添加一个延时回调
 * 返 回 值: 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);
 }