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); }
/// <summary> /// Добавить задачу в очередь. /// </summary> /// <param name="gameTask">Добавляемая задача.</param> public void Add(IGameTask gameTask) { if (_isDisposed) { return; } Assert.IsFalse(_complete.Value); _queue.Enqueue(gameTask); }
// \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(); }
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; }
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"); }
private void OnInitComplete(IGameTask task) { _addressableLoaderManager.LoadAddressable("sd") .CompletedEvent += (l, s) => _windowManager.ShowWindow("popup_1"); }
public void Add(IGameTask task, string description = "") { GameTasks.Enqueue(task); Descriptions.Enqueue(description); }