예제 #1
0
        public void TestStart()
        {
            var task     = new ManualTask((t) => {});
            var listener = new TaskListener();

            task.StartTask(listener);
            Assert.IsFalse(listener.IsFinished);
            Assert.AreEqual(0f, listener.Progress, Delta);
            Assert.IsTrue(task.DidRun);
            Assert.IsFalse(task.IsRevoked.Value);
            Assert.IsFalse(task.IsFinished);
            Assert.AreEqual(listener, task.Listener);

            task.SetProgress(0.25f);
            Assert.IsFalse(listener.IsFinished);
            Assert.AreEqual(0.25f, listener.Progress, Delta);
            Assert.IsTrue(task.DidRun);
            Assert.IsFalse(task.IsRevoked.Value);
            Assert.IsFalse(task.IsFinished);
            Assert.AreEqual(listener, task.Listener);

            task.SetFinished();
            Assert.IsTrue(listener.IsFinished);
            Assert.AreEqual(1f, listener.Progress, Delta);
            Assert.IsTrue(task.DidRun);
            Assert.IsFalse(task.IsRevoked.Value);
            Assert.IsTrue(task.IsFinished);
            Assert.AreEqual(listener, task.Listener);
        }
예제 #2
0
        /// <summary>
        /// Starts loading hit object to resolve for specified future.
        /// </summary>
        private IEnumerator LoadHitObjects(ManualTask task)
        {
            int createCount = 0;
            int lastLoads   = 0;

            foreach (var obj in GameSession.CurrentMap.HitObjects)
            {
                // If create count reached 0, determine new creation count.
                if (createCount <= 0)
                {
                    createCount = Mathf.Max((int)((1f / Time.deltaTime) + lastLoads) / 4, 1);
                    lastLoads   = createCount;
                    yield return(null);
                }
                createCount--;

                HitObjectView hitObjView = null;
                if (obj is HitCircle hitCircle)
                {
                    var hitCircleView = hitCircleRecycler.GetNext();
                    hitCircleView.Depth       = hitObjectViews.Count;
                    hitCircleView.ObjectIndex = hitObjectViews.Count;
                    hitCircleView.SetHitObject(hitCircle);

                    hitObjectViews.Add(hitCircleView);
                    hitObjView = hitCircleView;
                }
                else if (obj is Dragger dragger)
                {
                    var draggerView = draggerRecycler.GetNext();
                    draggerView.Depth       = hitObjectViews.Count;
                    draggerView.ObjectIndex = hitObjectViews.Count;
                    draggerView.SetHitObject(dragger);

                    hitObjectViews.Add(draggerView);
                    hitObjView = draggerView;
                }

                if (hitObjView != null)
                {
                    // Apply combo color
                    var combo = obj as IHasCombo;
                    if (combo != null)
                    {
                        hitObjView.Tint = GetComboColor(combo);
                    }
                }
            }
            task.SetFinished();
        }
예제 #3
0
        private void RunDummyTask(ManualTask <DummyCacherData> task, string key)
        {
            var timer = new SynchronizedTimer()
            {
                Limit = 1f
            };

            timer.OnFinished += () =>
            {
                task.SetFinished(new DummyCacherData()
                {
                    Key         = key,
                    IsDestroyed = false
                });
            };
            timer.OnProgress += task.SetProgress;
            timer.Start();
        }
예제 #4
0
        public void TestWithComplexTasks()
        {
            var manualTask = new ManualTask((t) => { });
            var multiTask  = new MultiTask(new List <ITask>()
            {
                new ManualTask((t) => {}),
                new ManualTask((t) => {})
            });
            var tasks = new List <ITask>()
            {
                manualTask,
                multiTask
            };

            var task     = new MultiTask(tasks);
            var listener = new TaskListener();

            task.StartTask(listener);
            Assert.AreEqual(listener, task.Listener);
            Assert.AreEqual(2, task.Tasks.Count);
            Assert.IsFalse(task.IsFinished);
            Assert.IsTrue(task.DidRun);
            Assert.AreEqual(0f, listener.TotalProgress, Delta);
            Assert.IsFalse(listener.IsFinished);

            (multiTask.Tasks[0] as ManualTask).SetFinished();
            Assert.IsFalse(task.IsFinished);
            Assert.AreEqual(0.25f, listener.TotalProgress, Delta);
            Assert.IsFalse(listener.IsFinished);

            manualTask.SetFinished();
            Assert.IsFalse(task.IsFinished);
            Assert.AreEqual(0.75f, listener.TotalProgress, Delta);
            Assert.IsFalse(listener.IsFinished);

            (multiTask.Tasks[1] as ManualTask).SetFinished();
            Assert.IsTrue(task.IsFinished);
            Assert.AreEqual(1f, listener.TotalProgress, Delta);
            Assert.IsTrue(listener.IsFinished);
        }