示例#1
0
        public override void OnEnter()
        {
            base.OnEnter();
            Component mComponent = ((GameObject)gameObject.Value).GetComponent(component);

            if (mComponent is MonoBehaviour)
            {
                MonoBehaviour behaviour = mComponent as MonoBehaviour;
                if (repeatRate.Value == 0)
                {
                    behaviour.Invoke(methodName, delay.Value);
                }
                else
                {
                    behaviour.InvokeRepeating(methodName, delay.Value, repeatRate.Value);
                }
            }
            else
            {
                GameObject        instance       = new GameObject("RoutineHandler");
                CoroutineInstance routineHandler = instance.AddComponent <CoroutineInstance>();
                if (repeatRate.Value == 0)
                {
                    routineHandler.ProcessWork(InvokeMethod(mComponent));
                }
                else
                {
                    routineHandler.StartCoroutine(InvokeRepeatingMethod(mComponent));
                }
            }
            Finish();
        }
        /// <summary>
        /// Initialize.
        /// </summary>
        private static void _Initialize()
        {
            if (mCoroutineObject == null)
            {
                string objName = typeof(MyCoroutiner).Name;

                mCoroutineObject = MyUtilities.FindObjectInRoot(objName);

                if (mCoroutineObject == null)
                {
                    mCoroutineObject = new GameObject(objName);
                }

                GameObject.DontDestroyOnLoad(mCoroutineObject);

                mDictionaryRoutine = new Dictionary <string, IEnumerator>();
            }

            if (mCoroutineInstance == null)
            {
                mCoroutineInstance = mCoroutineObject.GetComponent <CoroutineInstance>();

                if (mCoroutineInstance == null)
                {
                    mCoroutineInstance = mCoroutineObject.AddComponent(typeof(CoroutineInstance)) as CoroutineInstance;
                }
            }
        }
示例#3
0
 public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
 {
     if (Trigger == TriggerTime.Enter)
     {
         CoroutineInstance.Run(null, WaitToDisable(animator));
     }
 }
 private void Awake()
 {
     if (coroutineInstance == null)
     {
         coroutineInstance = this;
     }
     DontDestroyOnLoad(gameObject);
 }
示例#5
0
        void OnCoroutineFinshed(CoroutineInstance ci)
        {
            activeRoutines.Remove ( ci );
            activeRoutines = activeRoutines.FindAll (x => 
            {
                var alive = x.coroutine.IsAlive;
                if ( !alive )
                    x.ClearListeners();

                return alive;
            });
        }
示例#6
0
        private void HandleCoroutines(Queue <CoroutineInstance> removeIds)
        {
            ICoroutineThread      newCoroutineThread;
            CoroutineQueueContent newCoroutineContent;

            while (_coroutinesQueue.TryDequeue(out newCoroutineContent))
            {
                newCoroutineThread = newCoroutineContent.Coroutine;
                MessageBus.Register(newCoroutineThread);
                var instance = new CoroutineInstance(newCoroutineThread, newCoroutineContent.OnError);
                _running.Add(instance);
            }

            for (int index = 0; index < _running.Count; index++)
            {
                if (Status.Is(RunningStatus.Paused))
                {
                    return;
                }
                var instance = _running[index];

                try
                {
                    if (!instance.IsInitialized)
                    {
                        instance.Initialize(Log);
                    }
                    var enumerator = instance.Enumerators;

                    if (!enumerator.MoveNext())
                    {
                        removeIds.Enqueue(instance);
                    }
                    else
                    {
                        var current = enumerator.Current as FluentResultBuilder;
                        if (current != null && !current.Type.HasFlag(FluentResultType.Waiting))
                        {
                            StartCoroutine(current.AsCoroutine());
                        }
                    }
                }
                catch (Exception ex)
                {
                    OnError(ex, removeIds, index);
                }
                if (Status.Is(RunningStatus.Paused))
                {
                    break;
                }
            }
        }
		public override void OnEnter ()
		{	
			string serverAddress = PlayerPrefs.GetString ("ServerAddress");
			if (string.IsNullOrEmpty (serverAddress)) {
				Debug.Log ("Please initialize the database to save values. Use MySQL.Initialize");
			} else {
				GameObject instance = new GameObject ();
				CoroutineInstance routineHandler = instance.AddComponent<CoroutineInstance> ();
				routineHandler.StartCoroutine (DeleteEntry(serverAddress, key.Value));
				instance.hideFlags = HideFlags.HideInHierarchy;
			}
			Finish ();
		}
        private void OnCoroutineFinshed(CoroutineInstance ci)
        {
            activeRoutines.Remove(ci);
            activeRoutines = activeRoutines.FindAll(x =>
            {
                var alive = x.coroutine.IsAlive;
                if (!alive)
                {
                    x.ClearListeners();
                }

                return(alive);
            });
        }
示例#9
0
        public Coroutine RunCoroutine(IEnumerator routine, MonoBehaviour mb = null)
        {
            mb = mb ?? coroutineBehaviour;

            var ci = new CoroutineInstance();
            ci.mb = mb;

            var cor = mb.StartCoroutine(ci.ContainerCoroutine(routine));
            ci.coroutine = new GenericWeakReference<Coroutine>(cor);
            if (ci.coroutine != null)
            {
                ci.OnRoutineFinished += OnCoroutineFinshed;
                ci.OnRoutineStopped += OnCoroutineFinshed;

                activeRoutines.Add(ci);
            }

            return cor;
        }
示例#10
0
        public Coroutine RunCoroutine(IEnumerator routine, MonoBehaviour mb = null)
        {
            if (mb == null)
            {
                mb = this;
            }

            var ci = new CoroutineInstance();

            ci.mb = mb;

            var cor = mb.StartCoroutine(ci.ContainerCoroutine(routine));

            ci.coroutine = new WeakReference(cor);
            if (ci.coroutine != null)
            {
                ci.OnRoutineFinished += OnCoroutineFinshed;
                ci.OnRoutineStopped  += OnCoroutineFinshed;

                activeRoutines.Add(ci);
            }

            return(cor);
        }
示例#11
0
 void Start()
 {
     CoroutineInstance.instance = this;
 }