/// <summary>
    /// 是否数据一致
    /// </summary>
    protected override bool toDataEquals(BaseData data)
    {
        if (!base.toDataEquals(data))
        {
            return(false);
        }

        TriggerFuncListData mData = (TriggerFuncListData)data;

        if (mData.funcList != null)
        {
            if (this.funcList == null)
            {
                return(false);
            }
            if (this.funcList.Length != mData.funcList.Length)
            {
                return(false);
            }
            TriggerFuncData[] funcListT = this.funcList;
            TriggerFuncData[] funcListR = mData.funcList;
            int funcListLen             = funcListT.Length;
            for (int funcListI = 0; funcListI < funcListLen; ++funcListI)
            {
                TriggerFuncData funcListU = funcListT[funcListI];
                TriggerFuncData funcListV = funcListR[funcListI];
                if (funcListV != null)
                {
                    if (funcListU == null)
                    {
                        return(false);
                    }
                    if (!funcListU.dataEquals(funcListV))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (funcListU != null)
                    {
                        return(false);
                    }
                }
            }
        }
        else
        {
            if (this.funcList != null)
            {
                return(false);
            }
        }

        return(true);
    }
    /// <summary>
    /// 复制(潜拷贝)
    /// </summary>
    protected override void toShadowCopy(BaseData data)
    {
        base.toShadowCopy(data);

        if (!(data is TriggerFuncListData))
        {
            return;
        }

        TriggerFuncListData mData = (TriggerFuncListData)data;

        this.funcList = mData.funcList;
    }
    /// <summary>
    /// 复制(深拷贝)
    /// </summary>
    protected override void toCopy(BaseData data)
    {
        base.toCopy(data);

        if (!(data is TriggerFuncListData))
        {
            return;
        }

        TriggerFuncListData mData = (TriggerFuncListData)data;

        if (mData.funcList != null)
        {
            TriggerFuncData[] funcListR = mData.funcList;
            int funcListLen             = funcListR.Length;
            if (this.funcList == null || this.funcList.Length != funcListLen)
            {
                this.funcList = new TriggerFuncData[funcListLen];
            }
            TriggerFuncData[] funcListT = this.funcList;
            for (int funcListI = 0; funcListI < funcListLen; ++funcListI)
            {
                TriggerFuncData funcListV = funcListR[funcListI];
                TriggerFuncData funcListU;
                if (funcListV != null)
                {
                    funcListU = (TriggerFuncData)funcListV.clone();
                }
                else
                {
                    funcListU = null;
                    nullObjError("funcListU");
                }

                funcListT[funcListI] = funcListU;
            }
        }
        else
        {
            this.funcList = null;
            nullObjError("funcList");
        }
    }
Exemple #4
0
    /** 执行异步方法 */
    protected virtual bool toDoAsyncActionFunc(TriggerFuncData func, TriggerArg arg)
    {
        switch (func.id)
        {
        case TriggerFunctionType.If:
        {
            if (getBoolean(func.args[0], arg))
            {
                TriggerFuncListData listFunc = (TriggerFuncListData)func.args[1];

                runChildActions(TriggerChildRunnerType.If, listFunc.funcList, arg.runner);
            }
            else
            {
                if (func.args.Length > 2)
                {
                    TriggerFuncListData listFunc = (TriggerFuncListData)func.args[2];

                    if (listFunc.funcList.Length > 0)
                    {
                        runChildActions(TriggerChildRunnerType.If, listFunc.funcList, arg.runner);
                    }
                    else
                    {
                        //直接下一个
                        runNextAction(arg.runner);
                    }
                }
                else
                {
                    //直接下一个
                    runNextAction(arg.runner);
                }
            }
        }
        break;

        case TriggerFunctionType.While:
        {
            if (getBoolean(func.args[0], arg))
            {
                TriggerFuncListData listFunc = (TriggerFuncListData)func.args[1];

                runChildActions(TriggerChildRunnerType.While, listFunc.funcList, arg.runner);
            }
            else
            {
                //直接下一个
                runNextAction(arg.runner);
            }
        }
        break;

        case TriggerFunctionType.ForLoop:
        {
            int loop = getInt(func.args[0], arg.runner.arg);

            if (loop <= 0)
            {
                //直接下一个
                runNextAction(arg.runner);
            }
            else
            {
                arg.runner.loopCount = loop;
                arg.runner.loop      = 0;

                TriggerFuncListData listFunc = (TriggerFuncListData)func.args[1];

                runChildActions(TriggerChildRunnerType.ForLoop, listFunc.funcList, arg.runner);
            }
        }
        break;

        case TriggerFunctionType.RunTrigger:
        {
            runTrigger(getInt(func.args[0], arg), arg.runner);
        }
        break;

        case TriggerFunctionType.RunTriggerAbs:
        {
            runTriggerAbs(getInt(func.args[0], arg), arg.runner);
        }
        break;

        case TriggerFunctionType.BreakTrigger:
        {
            //直接完成根节点
            completeCurrentAction(arg.runner.root);
        }
        break;

        case TriggerFunctionType.BreakLoop:
        {
            if (arg.runner.isInLoop())
            {
                TriggerActionRunner parent = arg.runner.parent;
                if (parent == null)
                {
                    throwError("不该找不到父");
                    return(false);
                }

                disposeActionRunner(arg.runner);
                parent.arg.runner = parent;
                runNextAction(parent);
            }
            else
            {
                warnLog("breakLoop时,不是循环");
                runNextAction(arg.runner);
            }
        }
        break;

        case TriggerFunctionType.ContinueLoop:
        {
            if (arg.runner.isInLoop())
            {
                completeCurrentAction(arg.runner);
            }
            else
            {
                warnLog("continueLoop时,不是循环");
                runNextAction(arg.runner);
            }
        }
        break;

        case TriggerFunctionType.Wait:
        {
            arg.runner.timerType   = TriggerActionTimerType.Wait;
            arg.runner.currentTime = arg.runner.timeMax = getInt(func.args[0], arg);
            addTimeRunner(arg.runner);
        }
        break;

        case TriggerFunctionType.WaitUtil:
        {
            //判定成功直接过
            if (getBoolean(arg.runner.getCurrentAction().args[0], arg))
            {
                runNextAction(arg.runner);
            }
            else
            {
                //加入等待
                arg.runner.timerType   = TriggerActionTimerType.WaitUtil;
                arg.runner.currentTime = arg.runner.timeMax = getInt(func.args[1], arg);
                addTimeRunner(arg.runner);
            }
        }
        break;

        case TriggerFunctionType.ForeachList:
        {
            SList <Object> list = getList(func.args[0], arg);

            if (list.isEmpty())
            {
                //直接下一个
                runNextAction(arg.runner);
            }
            else
            {
                arg.runner.foreachList = list;
                arg.runner.loop        = 0;

                TriggerFuncListData listFunc = (TriggerFuncListData)func.args[1];
                runChildActions(TriggerChildRunnerType.ForEachList, listFunc.funcList, arg.runner);
            }
        }
        break;

        default:
        {
            return(false);
        }
        }

        return(true);
    }