public void InitializeAllHeroSelector() { // unspoiled cache, no need to re-initialize if (!HeroSelectorViewModels.Any() && _cachedHeroSelectorViewModels.Any()) { return; } if (_cachedHeroSelectorViewModels.Any()) { CloseHeroSelectorWindows(); } _heroSelectorWindowViewModel = _viewModelFactory.CreateViewModel <HeroSelectorWindowViewModel>(); WindowManager.ShowWindow(_heroSelectorWindowViewModel); ((Window)_heroSelectorWindowViewModel.View).Owner = (Window)View; for (var i = 0; i <= 13; ++i) { var vm = _viewModelFactory.CreateViewModel <HeroSelectorViewModel>(); _cachedHeroSelectorViewModels.Add(vm); vm.Id = i; vm.InitializeUnselect(); var position = _listPositions[i]; if (i < 7) { vm.SetLeftAndTop(position); } else { vm.SetRightAndTop(position); } vm.InteractionVisible = false; vm.LayerVisible = false; vm.Refresh(); } }
public void ShowHeroSelector(int pointIndex, string name = null) { if (!HeroSelectorViewModels.Any()) { PopulateCachedHeroSelectorWindows(); } if ((_listBpSteps[2].Contains(pointIndex) || _listBpSteps[7].Contains(pointIndex)) && name != null) { PopulateBanSelector(pointIndex); } var vm = HeroSelectorViewModels.First(v => v.Id == pointIndex); vm.InteractionVisible = true; if (name != null) { var heroInUi = vm.ItemsInfos.First( m => m.Id == App.OcrHeroInfos.First(om => om.Name == name).Id.ToString()).Name; vm.Select(heroInUi); vm.ConfirmSelection(); } }
private async Task OcrAsync(IEnumerable <int> steps, CancellationToken cancellationToken) { var stepToProcess = new List <int>(); foreach (var i in steps) { if (ProcessingThreads.ContainsKey(i) && ProcessingThreads[i]) { continue; } if (HeroSelectorViewModels.Any(v => v.Id == i && v.Selected)) { continue; } stepToProcess.Add(i); ProcessingThreads[i] = true; } if (!stepToProcess.Any()) { return; } try { if (stepToProcess[0] <= 6 && OcrUtil.IsInitialized) { await OcrUtil.ScanLabelAsync(stepToProcess, this, OcrUtil.ScanSide.Left, cancellationToken).ConfigureAwait(false); } else { await OcrUtil.ScanLabelAsync(stepToProcess, this, OcrUtil.ScanSide.Right, cancellationToken).ConfigureAwait(false); } } catch (Exception) { Logger.Trace("OcrAsync failed first attempt on {0}", string.Join(",", stepToProcess)); try { foreach (var i in stepToProcess) { ProcessingThreads[i] = false; } if (stepToProcess[0] <= 6 && OcrUtil.IsInitialized) { await OcrUtil.ScanLabelAsync(stepToProcess, this, OcrUtil.ScanSide.Left, cancellationToken).ConfigureAwait(false); } else { await OcrUtil.ScanLabelAsync(stepToProcess, this, OcrUtil.ScanSide.Right, cancellationToken).ConfigureAwait(false); } } catch (Exception) { Logger.Trace("OcrAsync failed 2nd attempt on {0}", string.Join(",", stepToProcess)); Execute.OnUIThread(() => { Reset(); }); } } finally { foreach (var i in stepToProcess) { ProcessingThreads[i] = false; } } }