Esempio n. 1
0
        public static object Run(CoroutineStart func)
        {
            // If already in unity coroutine then just execute python
            if (!Monitor.TryEnter(_lock))
            {
                //Console.WriteLine("CoroutineBehavior [{0}]: Recursion Skip", Thread.CurrentThread.ManagedThreadId);
                return(func());
            }

            try
            {
                //Console.WriteLine("CoroutineBehavior [{0}]: Run", Thread.CurrentThread.ManagedThreadId);
                var obj2 = new GameObject(Guid.NewGuid().ToString());
                var ex   = obj2.AddComponent <CoroutineBehavior>();
                if (ex != null)
                {
                    ex.func  = func;
                    ex.start = true;
                    ex.WaitFor();
                    return(ex.result);
                }
                else
                {
                    return(func());
                }
            }
            finally
            {
                Monitor.Exit(_lock);
                //Console.WriteLine("CoroutineBehavior [{0}]: Done", Thread.CurrentThread.ManagedThreadId);
            }
        }
Esempio n. 2
0
 public Coroutine(CoroutineStart start)
 {
     _start = start;
 }
Esempio n. 3
0
 public Coroutine(CoroutineStart start, int size)
 {
     this.start = start;
 }
Esempio n. 4
0
 public Coroutine(CoroutineStart start)
 {
     this.start = start;
 }
Esempio n. 5
0
        private static Coroutine CreateCoroutine(CodeContext /*!*/ context, CoroutineStart start)
        {
            int size = GetStackSize(context);

            return((size != 0) ? new Coroutine(start, size) : new Coroutine(start));
        }