예제 #1
0
        public static void If(Pseudocode Pseudocode, string funcName, Action <object> callback, object[] parameters)
        {
            bool             isTrue     = (bool)parameters[0];
            PseudocodeAction TrueDoSth  = (PseudocodeAction)parameters[1];
            PseudocodeAction FalseDoSth = (PseudocodeAction)parameters[2];

            if (isTrue)
            {
                if (TrueDoSth != null)
                {
                    Pseudocode.RunQueue(Pseudocode.GetFuncParamFuncsQueue(TrueDoSth.funcs),
                                        () => { callback?.Invoke(null); });
                }
                else
                {
                    callback?.Invoke(null);
                }
            }
            else
            {
                if (FalseDoSth != null)
                {
                    Pseudocode.RunQueue(Pseudocode.GetFuncParamFuncsQueue(FalseDoSth.funcs),
                                        () => { callback?.Invoke(null); });
                }
                else
                {
                    callback?.Invoke(null);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// 并行处理多个动作,非多线程
        /// </summary>
        public static void Parallel(Pseudocode Pseudocode, string funcName, Action <object> callback,
                                    object[] parameters, object[] commonParameters)
        {
            var count = parameters.Length;
            var cur   = 0;

            for (int i = 0; i < parameters.Length; i++)
            {
                PseudocodeAction act = (PseudocodeAction)parameters[i];
                if (!act)
                {
                    Debug.LogError("Parallel 方法只接受NewAction方法返回的参数!");
                    cur++;
                    if (cur == count)
                    {
                        // 全部并行处理完,再返回
                        callback?.Invoke(null);
                    }
                    continue;
                }
                Pseudocode.RunQueue(Pseudocode.GetFuncParamFuncsQueue(act.funcs), () =>
                {
                    // 单线程处理,不用担心
                    cur++;
                    if (cur == count)
                    {
                        // 全部并行处理完,再返回
                        callback?.Invoke(null);
                    }
                }, commonParameters);
            }
        }
예제 #3
0
        public static void While(Pseudocode Pseudocode, string funcName, Action <object> callback, object[] parameters)
        {
            if (parameters[0] is bool)
            {
                throw new Exception("定义While方法的条件参数,需要使用方法: NewFunc(表达式)");
            }
            PseudocodeFunc   isTruePseudocodeFunc = (PseudocodeFunc)parameters[0];
            PseudocodeAction LoopDoSth            = (PseudocodeAction)parameters[1];

            Pseudocode.Run(isTruePseudocodeFunc, () =>
            {
                if ((bool)isTruePseudocodeFunc.result)
                {
                    if (LoopDoSth != null)
                    {
                        Pseudocode.RunQueue(Pseudocode.GetFuncParamFuncsQueue(LoopDoSth.funcs),
                                            () => { While(Pseudocode, funcName, callback, parameters); });
                    }
                    else
                    {
                        callback?.Invoke(null);
                    }
                }
                else
                {
                    callback?.Invoke(null);
                }
            });
        }
예제 #4
0
        /// <summary>
        /// 指定循环次数连续做几次某事
        /// </summary>
        public static void Foreach(Pseudocode Pseudocode, string funcName, Action <object> callback, object[] parameters, object[] commonParameters)
        {
            IList <object>   list   = parameters[0].GetList();
            var              mList  = list.ToList();
            PseudocodeAction act    = (PseudocodeAction)parameters[1];
            string           loopId = parameters.GetItem(2).GetStr();

            if (mList.Count > 0)
            {
                if (act != null)
                {
                    var one = mList[0];
                    if (loopId != null)
                    {
                        Pseudocode.vars[loopId] = one;
                    }
                    mList.RemoveAt(0);
                    parameters[0] = mList;
                    Pseudocode.RunQueue(Pseudocode.GetFuncParamFuncsQueue(act.funcs),
                                        () => { Foreach(Pseudocode, funcName, callback, parameters, commonParameters); }, commonParameters);
                }
                else
                {
                    callback?.Invoke(null);
                }
            }
            else
            {
                callback?.Invoke(null);
            }
        }
예제 #5
0
        /// <summary>
        /// 指定循环次数连续做几次某事
        /// </summary>
        public static void For(Pseudocode Pseudocode, string funcName, Action <object> callback, object[] parameters, object[] commonParameters)
        {
            int loopCount = parameters[0].GetInt();
            PseudocodeAction LoopDoSth = (PseudocodeAction)parameters[1];
            string           loopId    = parameters.GetItem(2).GetStr();

            if (loopCount > 0)
            {
                loopCount--;
                parameters[0] = loopCount;

                if (loopId != null)
                {
                    Pseudocode.vars[loopId] = loopCount;
                }

                if (LoopDoSth != null)
                {
                    Pseudocode.RunQueue(Pseudocode.GetFuncParamFuncsQueue(LoopDoSth.funcs),
                                        () => { For(Pseudocode, funcName, callback, parameters, commonParameters); }, commonParameters);
                }
                else
                {
                    callback?.Invoke(null);
                }
            }
            else
            {
                callback?.Invoke(null);
            }
        }
예제 #6
0
        private static IEnumerator DelayCor(Pseudocode Pseudocode, string funcName, Action <object> callback,
                                            float duration, PseudocodeAction act, object[] commonParameters)
        {
            yield return(new WaitForSeconds(duration));

            Pseudocode.RunQueue(Pseudocode.GetFuncParamFuncsQueue(act.funcs), () =>
            {
                callback?.Invoke(null);
            }, commonParameters);
        }
예제 #7
0
        public static void IF(Pseudocode Pseudocode, string funcName, Action <object> callback, object[] parameters, object[] commonParameters)
        {
            if (parameters[0] is bool)
            {
                throw new Exception("定义IF方法的条件参数,需要使用方法: NewFunc(表达式)");
            }
            PseudocodeFunc   isTruePseudocodeFunc = (PseudocodeFunc)parameters[0];
            PseudocodeAction TrueDoSth            = (PseudocodeAction)parameters[1];
            PseudocodeAction FalseDoSth           = (PseudocodeAction)parameters[2];

            Pseudocode.Run(isTruePseudocodeFunc, () =>
            {
                if ((bool)isTruePseudocodeFunc.result)
                {
                    if (TrueDoSth != null)
                    {
                        Pseudocode.RunQueue(Pseudocode.GetFuncParamFuncsQueue(TrueDoSth.funcs),
                                            () => { callback?.Invoke(null); }, commonParameters);
                    }
                    else
                    {
                        callback?.Invoke(null);
                    }
                }
                else
                {
                    if (FalseDoSth != null)
                    {
                        Pseudocode.RunQueue(Pseudocode.GetFuncParamFuncsQueue(FalseDoSth.funcs),
                                            () => { callback?.Invoke(null); }, commonParameters);
                    }
                    else
                    {
                        callback?.Invoke(null);
                    }
                }
            });
        }
예제 #8
0
        private static IEnumerator LoopCor(Pseudocode Pseudocode, string funcName, Action <object> callback,
                                           int loopCount, float startTime, float duration, PseudocodeAction act, string loopId, object[] commonParameters)
        {
            yield return(new WaitForSeconds(startTime));

            var cur = 0;

            while (cur < loopCount || loopCount == -1)
            {
                if (loopId != null)
                {
                    Pseudocode.vars[loopId] = cur;
                }
                cur++;
                Pseudocode.RunQueue(Pseudocode.GetFuncParamFuncsQueue(act.funcs), () =>
                {
                    // 单线程处理,不用担心
                }, commonParameters);
                yield return(new WaitForSeconds(duration));
            }
            callback?.Invoke(null);
        }