public void Handle(ItemSelectedMessage message) { InvokeScript("update", new List <Tuple <string, string> > { Tuple.Create("chose", string.Join("|", HeroSelectorViewModels .Where(vm => vm.SelectedItemInfo != null) .Select(vm => vm.SelectedItemInfo.Id))), Tuple.Create("map", BpStatus.Map), Tuple.Create("lang", App.Language) }); if (BpStatus.StepSelectedIndex.Contains(message.SelectorId) || // 修改本轮选过的英雄 !_listBpSteps[BpStatus.CurrentStep].Contains(message.SelectorId)) // 修改其他轮选过的英雄 { // 修改英雄选择,无需处理 } else { // 新英雄选择,判断本轮是否已选够英雄 BpStatus.StepSelectedIndex.Add(message.SelectorId); if (BpStatus.StepSelectedIndex.Count == _listBpSteps[BpStatus.CurrentStep].Count) { // 选够了,下一步 BpStatus.CurrentStep++; ProcessStep(); } } }
private void ShowHeroSelector(int pointIndex) { var vm = _heroSelectorViewModelFactory.CreateViewModel(); HeroSelectorViewModels.Add(vm); vm.Id = pointIndex; var position = _listPositions[pointIndex]; if (pointIndex < 7) { vm.SetLeftAndTop(position); } else { vm.SetRightAndTop(position); } WindowManager.ShowWindow(vm); ((Window)vm.View).Owner = (Window)this.View; /* * _eventAggregator.Publish(new ShowWindowMessage * { * ViewModel = vm, * }); */ }
private void PopulateBanSelector(int pointIndex) { var firstBanId = _listBpSteps[2].Contains(pointIndex) ? _listBpSteps[0].First() : _listBpSteps[5].First(); var secondBanId = _listBpSteps[2].Contains(pointIndex) ? _listBpSteps[1].First() : _listBpSteps[6].First(); if (!HeroSelectorViewModels.First(v => v.Id == firstBanId).InteractionVisible) { var vm = HeroSelectorViewModels.First(v => v.Id == firstBanId); vm.InteractionVisible = true; vm.Select(L("NO_CHOOSE")); } else if (HeroSelectorViewModels.First(v => v.Id == firstBanId).SelectedItemInfo == null) { HeroSelectorViewModels.First(v => v.Id == firstBanId).Select(L("NO_CHOOSE")); } if (!HeroSelectorViewModels.First(v => v.Id == secondBanId).InteractionVisible) { var vm = HeroSelectorViewModels.First(v => v.Id == secondBanId); vm.InteractionVisible = true; vm.Select(L("NO_CHOOSE")); } else if (HeroSelectorViewModels.First(v => v.Id == secondBanId).SelectedItemInfo == null) { HeroSelectorViewModels.First(v => v.Id == secondBanId).Select(L("NO_CHOOSE")); } BpStatus.CurrentStep = _listBpSteps[2].Contains(pointIndex) ? 2 : 7; }
private void CloseHeroSelectorWindows() { foreach (var vm in HeroSelectorViewModels) { vm.RequestClose(); } HeroSelectorViewModels.Clear(); }
public void ForceFirstPickProcess() { var secondBanId = _listBpSteps[1].First(); if (BpStatus.CurrentStep == 1) { if (HeroSelectorViewModels.First(v => v.Id == secondBanId).SelectedItemInfo == null) { HeroSelectorViewModels.First(v => v.Id == secondBanId).Select(L("NO_CHOOSE")); HeroSelectorViewModels.First(v => v.Id == secondBanId).ConfirmSelection(); } } }
public void PopulateCachedHeroSelectorWindows() { if (!_cachedHeroSelectorViewModels.Any()) { InitializeAllHeroSelector(); } foreach (var pointIndex in _listBpSteps.SelectMany(c => c)) { var vm = _cachedHeroSelectorViewModels.First(v => v.Id == pointIndex); HeroSelectorViewModels.Add(vm); } }
private void ForceFourthBanProcess() { var firstBanId = _listBpSteps[5].First(); var secondBanId = _listBpSteps[6].First(); if (!HeroSelectorViewModels.First(v => v.Id == secondBanId).InteractionVisible) { if (HeroSelectorViewModels.First(v => v.Id == firstBanId).SelectedItemInfo == null) { HeroSelectorViewModels.First(v => v.Id == firstBanId).Select(L("NO_CHOOSE")); HeroSelectorViewModels.First(v => v.Id == firstBanId).ConfirmSelection(); } } }
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; } } }
private void CloseHeroSelectorWindows() { HeroSelectorViewModels?.Clear(); _cachedHeroSelectorViewModels.Clear(); _heroSelectorWindowViewModel.RequestClose(); }
public void Handle(ItemSelectedMessage message) { try { if (message.ItemInfo == null) { if (IsAutoMode || BpStatus.CurrentStep <= 0) { return; } if (BpStatus.StepSelectedIndex.Any()) { foreach (var i in _listBpSteps[BpStatus.CurrentStep]) { var vm = HeroSelectorViewModels.First(v => v.Id == i); vm.Selected = false; vm.SelectedItemInfo = null; } BpStatus.StepSelectedIndex.Clear(); } else { foreach (var i in _listBpSteps[BpStatus.CurrentStep]) { var vm = HeroSelectorViewModels.First(v => v.Id == i); vm.InteractionVisible = false; } BpStatus.CurrentStep--; { var i = _listBpSteps[BpStatus.CurrentStep].Last(); var vm = HeroSelectorViewModels.First(v => v.Id == i); vm.Selected = false; vm.SelectedItemInfo = null; if (_listBpSteps[BpStatus.CurrentStep].Count > 1) { var vmSelected = HeroSelectorViewModels.First(v => v.Id != _listBpSteps[BpStatus.CurrentStep].First()); if (vmSelected != null) { BpStatus.StepSelectedIndex = new HashSet <int>() { vmSelected.Id } } ; else { BpStatus.StepSelectedIndex.Clear(); } } else { BpStatus.StepSelectedIndex.Clear(); } } } InvokeScript("update", new List <Tuple <string, string> > { Tuple.Create("chose", string.Join("|", HeroSelectorViewModels .Where(vm => vm.SelectedItemInfo != null) .Select(vm => vm.SelectedItemInfo.Id))), Tuple.Create("map", BpStatus.Map), Tuple.Create("lang", App.Language) }); return; } var idList = new List <string>(); foreach (var vm in HeroSelectorViewModels) { if (vm.SelectedItemInfo != null) { idList.Add(vm.SelectedItemInfo.Id); } } if (App.CustomConfigurationSettings.UploadBanSample && BanSteps.Contains(message.SelectorId) && !string.IsNullOrEmpty(message.ItemInfo?.Id) && message.ItemInfo.Id != "0") { if (_lastIds[message.SelectorId] != message.ItemInfo?.Id) { Task.Run(() => UploadSampleAsync(message.ItemInfo.Id, BanSteps.IndexOf(message.SelectorId))); _lastIds[message.SelectorId] = message.ItemInfo?.Id; } } InvokeScript("update", new List <Tuple <string, string> > { Tuple.Create("chose", string.Join("|", idList)), Tuple.Create("map", BpStatus.Map), Tuple.Create("lang", App.Language) }); if (BpStatus.StepSelectedIndex.Contains(message.SelectorId) || // 修改本轮选过的英雄 !_listBpSteps[BpStatus.CurrentStep].Contains(message.SelectorId)) // 修改其他轮选过的英雄 { // 修改英雄选择,无需处理 } else { // 新英雄选择,判断本轮是否已选够英雄 BpStatus.StepSelectedIndex.Add(message.SelectorId); if (BpStatus.StepSelectedIndex.Count == _listBpSteps[BpStatus.CurrentStep].Count) { // 选够了,下一步 if (BpStatus.CurrentStep < 9) { BpStatus.CurrentStep++; ProcessStep(); } } } } catch (Exception) { // TODO Ignore for test, please remove the catch } }