/// <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"); } }
/** 执行异步方法 */ 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); }