void StartLerpingCameraColor(Color To, Color From)
    {
        if (MyCamera == null)
        {
            return;
        }

        float Counter  = 0;
        Color NewColor = To;

        CoroutineContainer.ConditionPredicate Condition = () =>
        {
            return(NewColor == From);
        };
        System.Action PerConditionCheck = () =>
        {
            Counter += Time.deltaTime * BackgroundColorTransitionSpeed;
            NewColor = Color.Lerp(To, From, Counter);

            if (MyCamera != null)
            {
                MyCamera.backgroundColor = NewColor;
            }
        };

        CoroutineContainer.StartACoroutine(Condition, PerConditionCheck, () =>
        {
            StartLerpingCameraColor(From, Random.ColorHSV());
        });
    }
Ejemplo n.º 2
0
        public void TestCascade()
        {
            var i  = 0;
            var co = CoroutineContainer.StartCoroutine(RunFather());

            Assert.IsTrue(co.IsRunning());
            Assert.AreEqual(0, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(1, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(2, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(4, i);
            Assert.IsTrue(co.IsSuccess());
            Tick();
            Assert.IsTrue(co.IsSuccess());

            IEnumerable RunFather()
            {
                i++;
                yield return(CoroutineContainer.StartCoroutine(RunChild()));

                i++;
            }

            IEnumerable RunChild()
            {
                i++;
                yield return(null);

                i++;
            }
        }
Ejemplo n.º 3
0
        public void Test2()
        {
            var i  = 0;
            var co = CoroutineContainer.StartCoroutine(Run());

            Assert.AreEqual(0, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(0, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(1, i);
            Tick();
            co.Throw();
            Assert.AreEqual(1, i);
            Assert.IsTrue(co.IsSuccess());

            IEnumerable Run()
            {
                Assert.AreEqual(0, i);
                yield return(null);

                Assert.AreEqual(0, i);
                i++;
                Assert.AreEqual(1, i);
            }
        }
Ejemplo n.º 4
0
        public void TestTaskDelay()
        {
            var i      = 0;
            var run    = true;
            var thread = Thread.CurrentThread.ManagedThreadId;
            var co     = CoroutineContainer.StartCoroutine(Run);

            Assert.AreEqual(0, i);
            while (run && co.IsRunning())
            {
                TimerManager.Update(TimerManager.Now + TimeSpan.FromMilliseconds(100));
                CoroutineManager.OneLoop();
                Thread.Yield();
            }
            Assert.IsTrue(co.IsSuccess());
            Assert.AreEqual(3, i);
            async IWaitable Run()
            {
                i++;
                Assert.AreEqual(thread, Thread.CurrentThread.ManagedThreadId);
                await Task.Delay(1);

                i++;
                Assert.AreEqual(thread, Thread.CurrentThread.ManagedThreadId);
                await Task.Delay(1);

                i++;
                Assert.AreEqual(thread, Thread.CurrentThread.ManagedThreadId);
                run = false;
            }
        }
Ejemplo n.º 5
0
    private void Init()
    {
        if (inited == false)
        {
            inited = true;

            if (splitInterface == null)
            {
                splitInterface = FindObjectOfType <SplitInterface>();
            }
            if (splitInterface == null)
            {
                // Create split interface from Resource folder
                splitInterface = Instantiate(Resources.Load <SplitInterface>("SplitInterface"));
                splitInterface.gameObject.name = "SplitInterface";
                splitInterface.transform.SetAsLastSibling();
                DontDestroyOnLoad(splitInterface.gameObject);
            }

            // Create contaner for coroutines
            if (coroutineContainer == null)
            {
                coroutineContainer = FindObjectOfType <CoroutineContainer>();
                if (coroutineContainer == null)
                {
                    coroutineContainer      = new GameObject().AddComponent <CoroutineContainer>();
                    coroutineContainer.name = "CoroutineContainer";
                    DontDestroyOnLoad(coroutineContainer.gameObject);
                }
            }

            Debug.Assert(splitInterface, "Wrong initial settings");
        }
    }
Ejemplo n.º 6
0
        public void TestCascadeThrow3()
        {
            var i = 0;

            CoroutineContainer.StartCoroutine(RunFather());

            Assert.AreEqual(0, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(1, i);
            Tick();

            //handle
            Assert.AreEqual(-10, i);

            IEnumerable RunFather()
            {
                i++;

                yield return(CoroutineContainer.StartCoroutine(RunChild()).Catch(e =>
                {
                    i = -10;
                }));

                Assert.Fail();
            }

            IEnumerable RunChild()
            {
                i++;
                yield return(null);

                i++;
                throw new ArgumentException();
            }
        }
Ejemplo n.º 7
0
        public void TestAbort1()
        {
            var i = 0;

            CoroutineContainer.StartCoroutine(RunFather()).With(out var co);
            Assert.AreEqual(0, i);

            for (var tick = 0; tick < 1000; tick++)
            {
                CoroutineManager.OneLoop();
                if (i == 10)
                {
                    co.Abort();
                }
            }
            Assert.AreEqual(10, i);

            IEnumerable RunFather()
            {
                while (true)
                {
                    i++;
                    yield return(null);
                }
            }
        }
Ejemplo n.º 8
0
        public void TestYield()
        {
            var i  = 0;
            var co = CoroutineContainer.StartCoroutine(Run());

            Assert.AreEqual(0, i);
            Assert.IsTrue(co.IsRunning());

            CoroutineManager.OneLoop();
            Assert.AreEqual(1, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(2, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(3, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(3, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(3, i);

            Assert.IsTrue(co.IsSuccess());

            IEnumerable Run()
            {
                i++;
                yield return(WaitFor.Yield());

                i++;
                yield return(WaitFor.Yield());

                i++;
            }
        }
Ejemplo n.º 9
0
        public void TestCascadeThrow2()
        {
            var i  = 0;
            var co = CoroutineContainer.StartCoroutine(RunFather());

            Assert.AreEqual(0, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(1, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(2, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(3, i);
            Assert.IsTrue(co.IsError());
            Tick();

            //handle
            Assert.AreEqual(3, i);

            IEnumerable RunFather()
            {
                i++;
                yield return(CoroutineContainer.StartCoroutine(RunChild()));

                Assert.Fail();
            }

            IEnumerable RunChild()
            {
                i++;
                yield return(null);

                i++;
                throw new ArgumentException();
            }
        }
Ejemplo n.º 10
0
        public void TestCascadeThrow1()
        {
            var i  = 0;
            var co = CoroutineContainer.StartCoroutine(RunFather());

            Assert.AreEqual(0, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(1, i);
            Assert.IsTrue(co.IsRunning());
            Tick();
            Assert.AreEqual(1, i);
            Assert.IsTrue(co.IsError());

            IEnumerable RunFather()
            {
                i++;
                yield return(CoroutineContainer.StartCoroutine(RunChild(true)));

                Assert.Fail();
            }

            IEnumerable RunChild(bool b)
            {
                if (b)
                {
                    throw new ArgumentException();
                }
                yield break;
            }
        }
Ejemplo n.º 11
0
        public void TestClear()
        {
            var i = 0;

            CoroutineContainer.StartCoroutine(Run());
            CoroutineContainer.StartCoroutine(Run());

            Assert.AreEqual(0, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(0, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(2, i);

            CoroutineContainer.ClearAllCoroutines();

            CoroutineManager.OneLoop();
            Assert.AreEqual(2, i);

            IEnumerable Run()
            {
                while (true)
                {
                    yield return(null);

                    i++;
                }
            }
        }
Ejemplo n.º 12
0
 /// <summary>
 /// Init this instance.
 /// </summary>
 void Init()
 {
     if (inited == false)
     {
         Debug.Assert(highlightTargetUI || highlightTargetRenderer, "Wrong initial settings");
         if (coroutineContainer == null)
         {
             // Create container for all coroutines
             coroutineContainer = FindObjectOfType <CoroutineContainer>();
             if (coroutineContainer == null)
             {
                 coroutineContainer      = new GameObject().AddComponent <CoroutineContainer>();
                 coroutineContainer.name = "CoroutineContainer";
             }
         }
         if (highlightTargetUI != null)
         {
             // Use UI color
             originColor = highlightTargetUI.color;
         }
         else
         {
             // Use render color
             originColor = highlightTargetRenderer.material.color;
         }
         inited = true;
     }
 }
Ejemplo n.º 13
0
        public void TestAwait()
        {
            var i  = 0;
            var co = CoroutineContainer.StartCoroutine(Run);

            Assert.AreEqual(0, i);
            Assert.IsTrue(co.IsRunning());

            CoroutineManager.OneLoop();
            Assert.AreEqual(1, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(2, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(3, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(3, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(3, i);

            Assert.IsTrue(co.IsSuccess());

            async IWaitable Run()
            {
                i++;
                await WaitFor.Yield();

                i++;
                await WaitFor.Yield();

                i++;
            }
        }
Ejemplo n.º 14
0
        public void TestAbort3()
        {
            var i = 0;
            var j = 0;

            var co2 = CoroutineContainer.StartCoroutine(RunChild());

            Assert.AreEqual(0, i);

            CoroutineManager.OneLoop();
            Assert.AreEqual(1, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(2, i);

            var co1 = CoroutineContainer.StartCoroutine(RunFather());

            Assert.AreEqual(2, i);

            CoroutineManager.OneLoop();
            //father++ child++
            Assert.AreEqual(4, i);
            CoroutineManager.OneLoop();
            //father wait child++
            Assert.AreEqual(5, i);

            co2.Abort();
            Assert.AreEqual(6, i);
            Assert.AreEqual(1, j);

            CoroutineManager.OneLoop();
            //father++ child abort
            Assert.IsTrue(co2.IsAborted());
            Assert.AreEqual(6, i);

            Tick();
            Assert.AreEqual(6, i);
            Assert.AreEqual(1, j);

            Assert.AreEqual(WaitableStatus.Abort, co2.Status);
            Assert.AreEqual(WaitableStatus.Success, co1.Status);

            IEnumerable RunFather()
            {
                i++;
                yield return(co2.Catch(e => j++));

                i++;
            }

            IEnumerable RunChild()
            {
                while (true)
                {
                    i++;
                    yield return(null);
                }
            }
        }
Ejemplo n.º 15
0
    //-----------------------------------------------------------

    static void RequestInstanceCreation()
    {
        if (Initialized)
        {
            return;
        }
        Initialized = true;

        Container = new GameObject("CoroutineContainer");
        Instance  = Container.AddComponent <CoroutineContainer>();
    }
Ejemplo n.º 16
0
 /// <summary>
 /// Awake this instance.
 /// </summary>
 void Awake()
 {
     // Create contaner for all cooldon coroutines
     if (coroutineContainer == null)
     {
         coroutineContainer = FindObjectOfType <CoroutineContainer>();
         if (coroutineContainer == null)
         {
             coroutineContainer      = new GameObject().AddComponent <CoroutineContainer>();
             coroutineContainer.name = "CoroutineContainer";
         }
     }
 }
Ejemplo n.º 17
0
    public static CoroutineContainer AddCoroutine(IEnumerator coroutine, string name,
                                                  System.Object instanceCoroutineWasCalled)
    {
        if (coroutine == null)
        {
            return(null);
        }

        monoBehaviourInstance.StartCoroutine(coroutine);
        var coroutineContainer =
            new CoroutineContainer(name ?? "", coroutine, true, instanceCoroutineWasCalled);

        runningCoroutines.Add(coroutineContainer);
        return(coroutineContainer);
    }
Ejemplo n.º 18
0
        public void TestAbort4()
        {
            var i = 0;

            var co2 = CoroutineContainer.StartCoroutine(RunChild());

            Assert.AreEqual(0, i);

            CoroutineManager.OneLoop();
            Assert.AreEqual(1, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(2, i);

            var co1 = CoroutineContainer.StartCoroutine(RunFather());

            Assert.AreEqual(2, i);

            CoroutineManager.OneLoop();
            Assert.AreEqual(4, i);

            co1.Abort(false);
            Assert.AreEqual(4, i);

            CoroutineManager.OneLoop();
            Assert.AreEqual(5, i);

            CoroutineManager.OneLoop();
            Assert.AreEqual(6, i);

            IEnumerable RunFather()
            {
                i++;
                yield return(co2);

                i++;
            }

            IEnumerable RunChild()
            {
                while (true)
                {
                    i++;
                    yield return(null);
                }
            }
        }
Ejemplo n.º 19
0
        public void Test1()
        {
            var i  = 0;
            var co = CoroutineContainer.StartCoroutine(Run());

            Assert.AreEqual(0, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(1, i);
            Tick();
            Assert.AreEqual(1, i);
            Assert.IsTrue(co.IsSuccess());

            IEnumerable Run()
            {
                i++;
                yield break;
            }
        }
Ejemplo n.º 20
0
 /// <summary>
 /// Init this instance.
 /// </summary>
 public void Init()
 {
     if (inited == false)
     {
         // Create contaner for all cooldown coroutines
         if (coroutineContainer == null)
         {
             coroutineContainer = FindObjectOfType <CoroutineContainer>();
             if (coroutineContainer == null)
             {
                 coroutineContainer      = new GameObject().AddComponent <CoroutineContainer>();
                 coroutineContainer.name = "CoroutineContainer";
                 DontDestroyOnLoad(coroutineContainer.gameObject);
             }
         }
         inited = true;
     }
 }
Ejemplo n.º 21
0
        public void TestAbort2()
        {
            var       i   = 0;
            IWaitable co2 = null;

            var co1 = CoroutineContainer.StartCoroutine(RunFather());

            Assert.AreEqual(0, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(1, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(2, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(3, i);
            co1.Abort();
            Assert.AreEqual(3, i);
            CoroutineManager.OneLoop();
            Assert.AreEqual(3, i);

            Tick();
            Assert.AreEqual(3, i);
            Assert.AreEqual(WaitableStatus.Abort, co1.Status);
            Assert.AreEqual(WaitableStatus.Abort, co2.Status);
            Assert.IsTrue(co1.IsAborted());
            Assert.IsTrue(co2.IsAborted());

            IEnumerable RunFather()
            {
                i++;
                co2 = CoroutineContainer.StartCoroutine(RunChild());
                yield return(co2);

                i++;
            }

            IEnumerable RunChild()
            {
                while (true)
                {
                    i++;
                    yield return(null);
                }
            }
        }
Ejemplo n.º 22
0
        public void Test1()
        {
            var i      = 0;
            var thread = Thread.CurrentThread.ManagedThreadId;
            var co     = CoroutineContainer.StartCoroutine(Run);

            Assert.AreEqual(0, i);
            Tick();
            Assert.AreEqual(3, i);
            Assert.IsTrue(co.IsSuccess());
            async IWaitable Run()
            {
                i++;
                Assert.AreEqual(thread, Thread.CurrentThread.ManagedThreadId);
                await WaitFor.Seconds(TimerManager, 0.1);

                i++;
                Assert.AreEqual(thread, Thread.CurrentThread.ManagedThreadId);
                await WaitFor.Seconds(TimerManager, 0.1);

                i++;
                Assert.AreEqual(thread, Thread.CurrentThread.ManagedThreadId);
            }
        }
Ejemplo n.º 23
0
        public void TestThrow()
        {
            var i = 0;

            Assert.AreEqual(0, i);
            var co = CoroutineContainer.StartCoroutine(Run(true));

            Assert.AreEqual(0, i);
            Tick();
            Assert.AreEqual(0, i);
            Assert.IsTrue(co.IsError());

            IEnumerable Run(bool t)
            {
                if (t)
                {
                    throw new ArgumentException();
                }
                i++;
                yield return(null);

                i++;
            }
        }
Ejemplo n.º 24
0
        public override void InstallBindings()
        {
            CoroutineContainer coroutineContainer = Instantiate(CoroutineContainerPrefab);

            Container.BindInstance(coroutineContainer).AsSingle();
        }