Exemple #1
0
        private void StartNextTask()
        {
            Assert.IsNull(_currentTaskCompleteHandler);

            if (_queue.Count <= 0)
            {
                _currentGameTask = null;
                _complete.SetValueAndForceNotify(true);
                return;
            }

            _currentGameTask = _queue.Dequeue();
            if (_currentGameTask.Complete.Value)
            {
                Debug.LogWarning("Task in queue already completed.");
                // ReSharper disable once TailRecursiveCall
                StartNextTask();
                return;
            }

            _currentTaskCompleteHandler = _currentGameTask.Complete.Subscribe(value =>
            {
                if (!value)
                {
                    return;
                }
                // ReSharper disable once AccessToModifiedClosure
                _currentTaskCompleteHandler?.Dispose();
                _currentTaskCompleteHandler = null;
                StartNextTask();
            });
            _currentGameTask.Start();
        }
 public TaskQueueItemViewModel(IGameTask task, ITaskExecutioner executioner)
 {
     _task        = task;
     Cancel       = new DelegateCommand(CancelTask);
     _executioner = executioner;
     Name         = task.GetType().Name;
 }
        private void SubscribeComplete(IGameTask gameTask)
        {
            if (gameTask.Complete.Value)
            {
                Debug.LogWarning("Task in concurent already completed.");
                return;
            }

            IDisposable d = null;

            d = gameTask.Complete.Subscribe(value =>
            {
                if (!value)
                {
                    return;
                }

                // ReSharper disable AccessToModifiedClosure, AssignNullToNotNullAttribute
                _completeHandlers.Remove(d);
                d.Dispose();
                // ReSharper enable AccessToModifiedClosure, AssignNullToNotNullAttribute

                if (!_completeHandlers.Any())
                {
                    _complete.SetValueAndForceNotify(true);
                }
            });

            _completeHandlers.Add(d, gameTask);
        }
Exemple #4
0
        /// <summary>
        /// Добавить задачу в очередь.
        /// </summary>
        /// <param name="gameTask">Добавляемая задача.</param>
        public void Add(IGameTask gameTask)
        {
            if (_isDisposed)
            {
                return;
            }

            Assert.IsFalse(_complete.Value);
            _queue.Enqueue(gameTask);
        }
Exemple #5
0
        // \IDisposable

        /// <summary>
        /// Очистить очередь.
        /// </summary>
        public void Clear()
        {
            if (_isDisposed)
            {
                return;
            }

            _queue.Clear();
            _currentGameTask = null;

            _currentTaskCompleteHandler?.Dispose();
            _currentTaskCompleteHandler = null;
        }
        /// <summary>
        /// Добавить задачу в параллельное выполнение.
        /// </summary>
        /// <param name="gameTask">Добавляемая задача.</param>
        /// <exception cref="Exception">Параллельное выполнение уже запущено.</exception>
        public void Add(IGameTask gameTask)
        {
            if (_isDisposed)
            {
                return;
            }

            Assert.IsFalse(Complete.Value);
            if (_completeHandlers.Any())
            {
                throw new Exception("Concurent already executed.");
            }
            _tasks.Add(gameTask);
        }
        // ITask

        public void Start()
        {
            if (_gameTask != null)
            {
                return;
            }
            _gameTask        = _closure.Invoke();
            _completeHandler = _gameTask.Complete.Subscribe(value =>
            {
                _complete.SetValueAndForceNotify(value);
                if (!value)
                {
                    return;
                }
                _completeHandler.Dispose();
                _completeHandler = null;
            });
            _gameTask.Start();
        }
Exemple #8
0
    private IEnumerator StartUIHandle()
    {
        while (GameTasks.Count > 0)
        {
            IGameTask task = GameTasks.Dequeue();

            StartCoroutine(task.Action());
            LoadingInfo.text = Descriptions.Dequeue();

            while (!task.IsDone || task.Progress != ProgressBar.Value)
            {
                ProgressBar.Value
                    = Mathf.MoveTowards(ProgressBar.Value, task.Progress, Time.deltaTime);
                yield return(null);
            }
            ProgressBar.Value = 0;
        }
        Panel.SetActive(false);
        yield break;
    }
Exemple #9
0
 public TaskLogical(IConfigReader configReader, IGameTask task)
 {
     this._configReader = configReader;
     this.task          = task;
     task.Conditions    = new List <TaskCondition>();
 }
 private void OnInitialComplete(IGameTask service)
 {
     service.CompleteEvent -= OnInitialComplete;
     Container.InstantiatePrefabResource("Ui");
 }
Exemple #11
0
 private void OnInitComplete(IGameTask task)
 {
     _addressableLoaderManager.LoadAddressable("sd")
     .CompletedEvent += (l, s) => _windowManager.ShowWindow("popup_1");
 }
Exemple #12
0
 public void Add(IGameTask task, string description = "")
 {
     GameTasks.Enqueue(task);
     Descriptions.Enqueue(description);
 }