示例#1
0
    public static int StopCoroutine(System.IntPtr L)
    {
        int nargs = LuaAPI.GetTop(L);

        if (nargs == 2 && LuaAPI.IsObject(L, 1) && LuaAPI.IsObject(L, 2))
        {
            UnityEngine.MonoBehaviour      arg0 = (UnityEngine.MonoBehaviour)LuaCallback.ToObject(L, 1);
            System.Collections.IEnumerator arg1 = (System.Collections.IEnumerator)LuaCallback.ToObject(L, 2);
            arg0.StopCoroutine(arg1);

            return(0);
        }
        if (nargs == 2 && LuaAPI.IsObject(L, 1) && LuaAPI.IsObject(L, 2))
        {
            UnityEngine.MonoBehaviour arg0 = (UnityEngine.MonoBehaviour)LuaCallback.ToObject(L, 1);
            UnityEngine.Coroutine     arg1 = (UnityEngine.Coroutine)LuaCallback.ToObject(L, 2);
            arg0.StopCoroutine(arg1);

            return(0);
        }
        if (nargs == 2 && LuaAPI.IsObject(L, 1) && LuaAPI.IsString(L, 2))
        {
            UnityEngine.MonoBehaviour arg0 = (UnityEngine.MonoBehaviour)LuaCallback.ToObject(L, 1);
            System.String             arg1 = (System.String)LuaCallback.ToString(L, 2);
            arg0.StopCoroutine(arg1);

            return(0);
        }
        return(0);
    }
        IEnumerator InternalCoroutine(RoutineData data)
        {
            parentNode.SetStatus(NodeCanvas.Framework.Status.Running);
            if (onStart != null)
            {
                onStart.Call(data.flow);
            }

            data.flow.BeginBreakBlock(BreakAll);
            while (data.enumerator.MoveNext())
            {
                while (graphPaused)
                {
                    yield return(null);
                }
                if (onUpdate != null)
                {
                    onUpdate.Call(data.flow);
                }
                yield return(data.enumerator.Current);
            }
            data.flow.EndBreakBlock();

            parentNode.SetStatus(NodeCanvas.Framework.Status.Resting);
            onFinish.Call(data.flow);
            currentCoroutine = null;

            if (routineQueue != null && routineQueue.Count > 0)
            {
                var next = routineQueue.Dequeue();
                currentCoroutine = MonoManager.current.StartCoroutine(InternalCoroutine(next));
            }
        }
示例#3
0
        IEnumerator InternalCoroutine(IEnumerator enumerator, Flow f)
        {
            var parentNode = outFlow.parent;

            parentNode.SetStatus(NodeCanvas.Status.Running);
            outFlow.Call(f);

            while (enumerator.MoveNext())
            {
                while (graphPaused)
                {
                    yield return(null);
                }
                doing.Call(f);
                yield return(enumerator.Current);
            }

            parentNode.SetStatus(NodeCanvas.Status.Resting);
            done.Call(f);
            currentCoroutine = null;

            if (queue.Count > 0)
            {
                queue.Dequeue();
                if (queue.Count > 0)
                {
                    Begin(queue.Peek(), f);
                }
            }
        }
示例#4
0
    public static int StartCoroutine(System.IntPtr L)
    {
        int nargs = LuaAPI.GetTop(L);

        if (nargs == 2 && LuaAPI.IsObject(L, 1) && LuaAPI.IsString(L, 2))
        {
            UnityEngine.MonoBehaviour arg0 = (UnityEngine.MonoBehaviour)LuaCallback.ToObject(L, 1);
            System.String             arg1 = (System.String)LuaCallback.ToString(L, 2);
            UnityEngine.Coroutine     res  = arg0.StartCoroutine(arg1);
            LuaCallback.PushObject(L, res);
            return(1);
        }
        if (nargs == 3 && LuaAPI.IsObject(L, 1) && LuaAPI.IsString(L, 2) && LuaAPI.IsObject(L, 3))
        {
            UnityEngine.MonoBehaviour arg0 = (UnityEngine.MonoBehaviour)LuaCallback.ToObject(L, 1);
            System.String             arg1 = (System.String)LuaCallback.ToString(L, 2);
            System.Object             arg2 = (System.Object)LuaCallback.ToObject(L, 3);
            UnityEngine.Coroutine     res  = arg0.StartCoroutine(arg1, arg2);
            LuaCallback.PushObject(L, res);
            return(1);
        }
        if (nargs == 2 && LuaAPI.IsObject(L, 1) && LuaAPI.IsObject(L, 2))
        {
            UnityEngine.MonoBehaviour      arg0 = (UnityEngine.MonoBehaviour)LuaCallback.ToObject(L, 1);
            System.Collections.IEnumerator arg1 = (System.Collections.IEnumerator)LuaCallback.ToObject(L, 2);
            UnityEngine.Coroutine          res  = arg0.StartCoroutine(arg1);
            LuaCallback.PushObject(L, res);
            return(1);
        }
        return(0);
    }
示例#5
0
 protected override void Use()
 {
     if (wait_coroutine == null)
     {
         wait_coroutine = inflictor.StartCoroutine(Main.WaitAndDo(WaitAndUse, conf.before_delay));
     }
 }
        static int _m_ReloadWindow(RealStatePtr L)
        {
            try {
                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);


                KEngine.UI.UIModule gen_to_be_invoked = (KEngine.UI.UIModule)translator.FastGetCSObj(L, 1);



                {
                    string    _windowTemplateName = LuaAPI.lua_tostring(L, 2);
                    KCallback _callback           = translator.GetDelegate <KCallback>(L, 3);

                    UnityEngine.Coroutine gen_ret = gen_to_be_invoked.ReloadWindow(_windowTemplateName, _callback);
                    translator.Push(L, gen_ret);



                    return(1);
                }
            } catch (System.Exception gen_e) {
                return(LuaAPI.luaL_error(L, "c# exception:" + gen_e));
            }
        }
示例#7
0
        ///----------------------------------------------------------------------------------------------

        //begins a new coroutine
        protected void Begin(IEnumerator enumerator, Flow f)
        {
            if (enumeratorQueue == null)
            {
                enumeratorQueue = new Queue <IEnumerator>();
            }
            if (flowQueue == null)
            {
                flowQueue = new Queue <Flow>();
            }

            if (exposeRoutineControls && invocationMode == InvocationMode.QueueCalls)
            {
                if (!enumeratorQueue.Contains(enumerator))
                {
                    enumeratorQueue.Enqueue(enumerator);
                    flowQueue.Enqueue(f);
                }
            }

            if (currentCoroutine == null)
            {
                currentCoroutine = MonoManager.current.StartCoroutine(InternalCoroutine(enumerator, f));
            }
        }
        IEnumerator InternalCoroutine(RoutineData data)
        {
            Flow f = data.flow;

            parentNode.SetStatus(NodeCanvas.Framework.Status.Running);
            if (onStart != null)
            {
                onStart.Call(f);
            }

            f.BeginBreakBlock(() => { BreakAll(true); });
            while (data.enumerator.MoveNext())
            {
                while (!parentNode.graph.didUpdateLastFrame)
                {
                    yield return(null);
                }
                if (onUpdate != null)
                {
                    onUpdate.Call(f);
                }
                yield return(data.enumerator.Current);
            }
            f.EndBreakBlock();

            parentNode.SetStatus(NodeCanvas.Framework.Status.Resting);
            onFinish.Call(f);
            currentCoroutine = null;

            if (routineQueue != null && routineQueue.Count > 0)
            {
                var next = routineQueue.Dequeue();
                currentCoroutine = parentNode.StartCoroutine(InternalCoroutine(next));
            }
        }
示例#9
0
 public override void OnGraphStoped()
 {
     if (coroutine != null)
     {
         StopCoroutine(coroutine);
         coroutine = null;
     }
 }
示例#10
0
 private static void StopStreaming()
 {
     if (streamer.IsNotNull())
     {
         UnityInstance.Instance.StopCoroutine(streamer);
         streamer = null;
     }
 }
示例#11
0
 public Coroutine(
     string name,
     CoroutineManager manager,
     UnityEngine.Coroutine coroutine)
 {
     Name       = name;
     _manager   = manager;
     _coroutine = coroutine;
 }
示例#12
0
        private IEnumerator RunCoroutines()
        {
            while (m_coroutineChains.Count > 0)
            {
                m_currentCoroutine = CoroutineManager.Instance.StartCoroutine(m_coroutineChains.Dequeue());
                yield return(m_currentCoroutine);
            }

            StopCoroutine();
        }
        public void StartGame()
        {
            if (_coroutine != null)
            {
                _coroutineManager.StopCoroutine(_coroutine);
            }

            _levelModel.Clear();
            _coroutine = _coroutineManager.StartCoroutine(GameRoutine());
        }
        static int _m_StartCoroutine(RealStatePtr L)
        {
            try {
                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);


                UnityEngine.MonoBehaviour gen_to_be_invoked = (UnityEngine.MonoBehaviour)translator.FastGetCSObj(L, 1);


                int gen_param_count = LuaAPI.lua_gettop(L);

                if (gen_param_count == 2 && (LuaAPI.lua_isnil(L, 2) || LuaAPI.lua_type(L, 2) == LuaTypes.LUA_TSTRING))
                {
                    string _methodName = LuaAPI.lua_tostring(L, 2);

                    UnityEngine.Coroutine gen_ret = gen_to_be_invoked.StartCoroutine(
                        _methodName);
                    translator.Push(L, gen_ret);



                    return(1);
                }
                if (gen_param_count == 2 && translator.Assignable <System.Collections.IEnumerator>(L, 2))
                {
                    System.Collections.IEnumerator _routine = (System.Collections.IEnumerator)translator.GetObject(L, 2, typeof(System.Collections.IEnumerator));

                    UnityEngine.Coroutine gen_ret = gen_to_be_invoked.StartCoroutine(
                        _routine);
                    translator.Push(L, gen_ret);



                    return(1);
                }
                if (gen_param_count == 3 && (LuaAPI.lua_isnil(L, 2) || LuaAPI.lua_type(L, 2) == LuaTypes.LUA_TSTRING) && translator.Assignable <object>(L, 3))
                {
                    string _methodName = LuaAPI.lua_tostring(L, 2);
                    object _value      = translator.GetObject(L, 3, typeof(object));

                    UnityEngine.Coroutine gen_ret = gen_to_be_invoked.StartCoroutine(
                        _methodName,
                        _value);
                    translator.Push(L, gen_ret);



                    return(1);
                }
            } catch (System.Exception gen_e) {
                return(LuaAPI.luaL_error(L, "c# exception:" + gen_e));
            }

            return(LuaAPI.luaL_error(L, "invalid arguments to UnityEngine.MonoBehaviour.StartCoroutine!"));
        }
示例#15
0
        //begins a new coroutine
        protected void Begin(IEnumerator enumerator, Flow f)
        {
            if (!queue.Contains(enumerator))
            {
                queue.Enqueue(enumerator);
            }

            if (currentCoroutine == null)
            {
                currentCoroutine = MonoManager.current.StartCoroutine(InternalCoroutine(enumerator, f));
            }
        }
示例#16
0
 //breaks all coroutine queues
 protected void Break()
 {
     if (currentCoroutine != null)
     {
         MonoManager.current.StopCoroutine(currentCoroutine);
         queue            = new Queue <IEnumerator>();
         currentCoroutine = null;
         outFlow.parent.SetStatus(NodeCanvas.Status.Resting);
         OnBreak();
         done.Call(new Flow());
     }
 }
示例#17
0
        protected override void RegisterPorts()
        {
            var c        = AddValueInput <bool>("Condition");
            var fCurrent = AddFlowOutput("Do");
            var fFinish  = AddFlowOutput("Done");

            AddFlowInput("In", (f) => {
                if (coroutine == null)
                {
                    coroutine = StartCoroutine(DoWhile(fCurrent, fFinish, f, c));
                }
            });
        }
 //breaks all coroutine queues
 protected void BreakAll(bool callFinish)
 {
     if (currentCoroutine != null)
     {
         parentNode.StopCoroutine(currentCoroutine);
         currentCoroutine = null;
         routineQueue     = null;
         parentNode.SetStatus(NodeCanvas.Framework.Status.Resting);
         OnBreak();
         if (!graphStoped && callFinish)
         {
             onFinish.Call(new Flow());
         }
     }
 }
示例#19
0
        IEnumerator DoWhile(FlowOutput fCurrent, FlowOutput fFinish, Flow f, ValueInput <bool> condition)
        {
            while (condition.value)
            {
                while (graph.isPaused)
                {
                    yield return(null);
                }
                fCurrent.Call(f);
                yield return(null);
            }

            coroutine = null;
            fFinish.Call(f);
        }
 //breaks all coroutine queues
 protected void BreakAll()
 {
     if (currentCoroutine != null)
     {
         MonoManager.current.StopCoroutine(currentCoroutine);
         currentCoroutine = null;
         routineQueue     = null;
         onFinish.parent.SetStatus(NodeCanvas.Framework.Status.Resting);
         OnBreak();
         if (!graphStoped)
         {
             onFinish.Call(new Flow());
         }
     }
 }
示例#21
0
        static StackObject *Stop_2(ILIntepreter __intp, StackObject *__esp, IList <object> __mStack, CLRMethod __method, bool isNewObj)
        {
            ILRuntime.Runtime.Enviorment.AppDomain __domain = __intp.AppDomain;
            StackObject *ptr_of_this_method;
            StackObject *__ret = ILIntepreter.Minus(__esp, 1);

            ptr_of_this_method = ILIntepreter.Minus(__esp, 1);
            UnityEngine.Coroutine @coroutine = (UnityEngine.Coroutine) typeof(UnityEngine.Coroutine).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);


            EB.Coroutines.Stop(@coroutine);

            return(__ret);
        }
示例#22
0
        static IEnumerator UF_InvokeCorotine(int id, IEnumerator method, bool blockEvent)
        {
            UnityEngine.Coroutine coroutine = GameMain.Instance.StartCoroutine(method);
            //绑定到Map中
            s_CoroutineMap.Add(id, coroutine);
            yield return(coroutine);

            //解除绑定
            s_CoroutineMap.Remove(id);
            //发送携程完成消息
            if (!blockEvent)
            {
                MessageSystem.UF_GetInstance().UF_Send(DefineEvent.E_COROUTINE_STATE, 1, id);
            }
        }
示例#23
0
 //breaks all coroutine queues
 protected void Break()
 {
     if (currentCoroutine != null)
     {
         MonoManager.current.StopCoroutine(currentCoroutine);
         enumeratorQueue  = new Queue <IEnumerator>();
         flowQueue        = new Queue <Flow>();
         currentCoroutine = null;
         done.parent.SetStatus(NodeCanvas.Status.Resting);
         OnBreak();
         if (!graphStoped)
         {
             done.Call(new Flow());
         }
     }
 }
示例#24
0
        static int _m_StopCoroutine(RealStatePtr L)
        {
            ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);


            UnityEngine.MonoBehaviour __cl_gen_to_be_invoked = (UnityEngine.MonoBehaviour)translator.FastGetCSObj(L, 1);


            int __gen_param_count = LuaAPI.lua_gettop(L);

            try {
                if (__gen_param_count == 2 && (LuaAPI.lua_isnil(L, 2) || LuaAPI.lua_type(L, 2) == LuaTypes.LUA_TSTRING))
                {
                    string methodName = LuaAPI.lua_tostring(L, 2);

                    __cl_gen_to_be_invoked.StopCoroutine(methodName);



                    return(0);
                }
                if (__gen_param_count == 2 && translator.Assignable <System.Collections.IEnumerator>(L, 2))
                {
                    System.Collections.IEnumerator routine = (System.Collections.IEnumerator)translator.GetObject(L, 2, typeof(System.Collections.IEnumerator));

                    __cl_gen_to_be_invoked.StopCoroutine(routine);



                    return(0);
                }
                if (__gen_param_count == 2 && translator.Assignable <UnityEngine.Coroutine>(L, 2))
                {
                    UnityEngine.Coroutine routine = (UnityEngine.Coroutine)translator.GetObject(L, 2, typeof(UnityEngine.Coroutine));

                    __cl_gen_to_be_invoked.StopCoroutine(routine);



                    return(0);
                }
            } catch (System.Exception __gen_e) {
                return(LuaAPI.luaL_error(L, "c# exception:" + __gen_e));
            }

            return(LuaAPI.luaL_error(L, "invalid arguments to UnityEngine.MonoBehaviour.StopCoroutine!"));
        }
示例#25
0
        protected override void RegisterPorts()
        {
            var fStart  = AddFlowOutput("Start");
            var fUpdate = AddFlowOutput("Update");
            var fFinish = AddFlowOutput("Finish");

            AddFlowInput("Start", (f) => {
                if (!active)
                {
                    active    = true;
                    coroutine = StartCoroutine(DoRepeat(fStart, fUpdate, fFinish, f));
                }
            });
            AddFlowInput("Break", (f) => {
                active = false;
            });
        }
示例#26
0
        //SL--修复flow  避免return节点出错
        //breaks all coroutine queues
        protected void BreakAll()
        {
            if (currentCoroutine != null)
            {
                MonoManager.current.StopCoroutine(currentCoroutine);
                if (!graphStoped)
                {
                    breaked.Call(quequed ? routineQueue.Dequeue().flow : tempF);
                }
                currentCoroutine = null;
                routineQueue     = null;
                onFinish.parent.SetStatus(NodeCanvas.Framework.Status.Resting);
                OnBreak();

                quequed = false;
            }
        }
示例#27
0
        static StackObject *Add_1(ILIntepreter __intp, StackObject *__esp, IList <object> __mStack, CLRMethod __method, bool isNewObj)
        {
            ILRuntime.Runtime.Enviorment.AppDomain __domain = __intp.AppDomain;
            StackObject *ptr_of_this_method;
            StackObject *__ret = ILIntepreter.Minus(__esp, 2);

            ptr_of_this_method = ILIntepreter.Minus(__esp, 1);
            UnityEngine.Coroutine @item = (UnityEngine.Coroutine) typeof(UnityEngine.Coroutine).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);

            ptr_of_this_method = ILIntepreter.Minus(__esp, 2);
            System.Collections.Generic.List <UnityEngine.Coroutine> instance_of_this_method = (System.Collections.Generic.List <UnityEngine.Coroutine>) typeof(System.Collections.Generic.List <UnityEngine.Coroutine>).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);

            instance_of_this_method.Add(@item);

            return(__ret);
        }
        static StackObject *StopCoroutine_11(ILIntepreter __intp, StackObject *__esp, IList <object> __mStack, CLRMethod __method, bool isNewObj)
        {
            CSHotFix.Runtime.Enviorment.AppDomain __domain = __intp.AppDomain;
            StackObject *ptr_of_this_method;
            StackObject *__ret = ILIntepreter.Minus(__esp, 2);

            ptr_of_this_method = ILIntepreter.Minus(__esp, 1);
            UnityEngine.Coroutine routine = (UnityEngine.Coroutine) typeof(UnityEngine.Coroutine).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);
            ptr_of_this_method = ILIntepreter.Minus(__esp, 2);
            UnityEngine.MonoBehaviour instance_of_this_method;
            instance_of_this_method = (UnityEngine.MonoBehaviour) typeof(UnityEngine.MonoBehaviour).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);

            instance_of_this_method.StopCoroutine(routine);

            return(__ret);
        }
示例#29
0
        IEnumerator DoWhile(FlowOutput fCurrent, FlowOutput fFinish, Flow f, ValueInput <bool> condition)
        {
            var active = true;

            f.breakCall = () => { active = false; };
            while (active && condition.value)
            {
                while (graph.isPaused)
                {
                    yield return(null);
                }
                fCurrent.Call(f);
                yield return(null);
            }

            coroutine   = null;
            f.breakCall = null;
            fFinish.Call(f);
        }
        ///----------------------------------------------------------------------------------------------

        //begins a new coroutine
        protected void Begin(IEnumerator enumerator, Flow f)
        {
            var data = new RoutineData(enumerator, f);

            if (currentCoroutine == null)
            {
                currentCoroutine = MonoManager.current.StartCoroutine(InternalCoroutine(data));
                return;
            }

            if (routineQueue == null)
            {
                routineQueue = new Queue <RoutineData>();
            }
            if (allowRoutineQueueing && invocationMode == InvocationMode.QueueCalls)
            {
                routineQueue.Enqueue(data);
            }
        }