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); } }
public Coroutine(CoroutineStart start) { _start = start; }
public Coroutine(CoroutineStart start, int size) { this.start = start; }
public Coroutine(CoroutineStart start) { this.start = start; }
private static Coroutine CreateCoroutine(CodeContext /*!*/ context, CoroutineStart start) { int size = GetStackSize(context); return((size != 0) ? new Coroutine(start, size) : new Coroutine(start)); }