public void ShowIncorrectDeckMessage() { var decks = DeckList.DecksList.Where( d => d.Class == Game.PlayingAs && Game.PlayerDrawn.All(c => d.Cards.Contains(c)) ).ToList(); if (decks.Contains(DeckPickerList.SelectedDeck)) { decks.Remove(DeckPickerList.SelectedDeck); } Logger.WriteLine(decks.Count + " possible decks found.", "IncorrectDeckMessage"); if (decks.Count == 1 && Config.Instance.AutoSelectDetectedDeck) { var deck = decks.First(); Logger.WriteLine("Automatically selected deck: " + deck.Name); DeckPickerList.SelectDeck(deck); UpdateDeckList(deck); UseDeck(deck); } else if (decks.Count > 0) { decks.Add(new Deck("Use no deck", "", new List <Card>(), new List <string>(), "", "", DateTime.Now)); var dsDialog = new DeckSelectionDialog(decks); //todo: System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=ClassColor; DataItem=null; target element is 'GradientStop' (HashCode=7260326); target property is 'Color' (type 'Color') //when opened for seconds time. why? dsDialog.ShowDialog(); var selectedDeck = dsDialog.SelectedDeck; if (selectedDeck != null) { if (selectedDeck.Name == "Use no deck") { DeselectDeck(); } else { Logger.WriteLine("Selected deck: " + selectedDeck.Name); DeckPickerList.SelectDeck(selectedDeck); UpdateDeckList(selectedDeck); UseDeck(selectedDeck); } } else { this.ShowMessage("Deck detection disabled.", "Can be re-enabled in \"DECKS\" menu."); CheckboxDeckDetection.IsChecked = false; Config.Save(); } } IsShowingIncorrectDeckMessage = false; NeedToIncorrectDeckMessage = false; }
private static void ShowDeckSelectionDialog(List <Deck> decks) { decks.Add(new Deck("Use no deck", "", new List <Card>(), new List <string>(), "", "", DateTime.Now, false, new List <Card>(), SerializableVersion.Default, new List <Deck>(), Guid.Empty)); if (decks.Count == 1 && DeckList.Instance.ActiveDeck != null) { decks.Add(new Deck("No match - Keep using active deck", "", new List <Card>(), new List <string>(), "", "", DateTime.Now, false, new List <Card>(), SerializableVersion.Default, new List <Deck>(), Guid.Empty)); } _waitingForUserInput = true; Log.Info("Waiting for user input..."); var dsDialog = new DeckSelectionDialog(decks); dsDialog.ShowDialog(); var selectedDeck = dsDialog.SelectedDeck; if (selectedDeck != null) { if (selectedDeck.Name == "Use no deck") { Log.Info("Auto deck detection disabled."); Core.MainWindow.SelectDeck(null, true); NotFoundCards.Clear(); } else if (selectedDeck.Name == "No match - Keep using active deck") { IgnoredDeckId = DeckList.Instance.ActiveDeck?.DeckId ?? Guid.Empty; Log.Info($"Now ignoring {DeckList.Instance.ActiveDeck?.Name}"); NotFoundCards.Clear(); } else { Log.Info("Selected deck: " + selectedDeck.Name); Core.MainWindow.SelectDeck(selectedDeck, true); } } else { Log.Info("Auto deck detection disabled."); Core.MainWindow.ShowMessage("Auto deck selection disabled.", "This can be re-enabled under 'options (advanced) > tracker > general'.").Forget(); Config.Instance.AutoDeckDetection = false; Config.Save(); Core.MainWindow.AutoDeckDetection(false); } _waitingForUserInput = false; }
public async void ShowIncorrectDeckMessage() { if(_game.PlayerDrawn.Count == 0) { IsShowingIncorrectDeckMessage = false; return; } //wait for player hero to be detected and at least 3 cards to be drawn for(var i = 0; i < 50; i++) { if(_game.PlayingAs != null && _game.PlayerDrawn.Count >= 3) break; await Task.Delay(100); } if(_game.PlayingAs == null || _game.PlayerDrawn.Count < 3) { IsShowingIncorrectDeckMessage = false; Logger.WriteLine("No player hero detected or less then 3 cards drawn. Not showing dialog.", "IncorrectDeckMessage"); return; } await Task.Delay(1000); var decks = DeckList.Instance.Decks.Where( d => d.Class == _game.PlayingAs && !d.Archived && _game.PlayerDrawnIdsTotal.Distinct().All(id => d.GetSelectedDeckVersion().Cards.Any(c => id == c.Id))) .ToList(); Logger.WriteLine(decks.Count + " possible decks found.", "IncorrectDeckMessage"); _game.NoMatchingDeck = decks.Count == 0; if(decks.Count == 1 && Config.Instance.AutoSelectDetectedDeck) { var deck = decks.First(); Logger.WriteLine("Automatically selected deck: " + deck.Name, "IncorrectDeckMessage"); DeckPickerList.SelectDeck(deck); UpdateDeckList(deck); UseDeck(deck); } else { decks.Add(new Deck("Use no deck", "", new List<Card>(), new List<string>(), "", "", DateTime.Now, false, new List<Card>(), SerializableVersion.Default, new List<Deck>(), false, "", Guid.Empty, "")); if(decks.Count == 1 && DeckList.Instance.ActiveDeckVersion != null) decks.Add(new Deck("No match - Keep using active deck", "", new List<Card>(), new List<string>(), "", "", DateTime.Now, false, new List<Card>(), SerializableVersion.Default, new List<Deck>(), false, "", Guid.Empty, "")); var dsDialog = new DeckSelectionDialog(decks); dsDialog.ShowDialog(); var selectedDeck = dsDialog.SelectedDeck; if(selectedDeck != null) { if(selectedDeck.Name == "Use no deck") SelectDeck(null, true); else if(selectedDeck.Name != "No match - Keep using active deck") { Logger.WriteLine("Selected deck: " + selectedDeck.Name, "IncorrectDeckMessage"); DeckPickerList.SelectDeck(selectedDeck); UpdateDeckList(selectedDeck); UseDeck(selectedDeck); } } else { this.ShowMessage("Deck detection disabled.", "Can be re-enabled in \"DECKS\" menu."); CheckboxDeckDetection.IsChecked = false; Config.Save(); } } IsShowingIncorrectDeckMessage = false; NeedToIncorrectDeckMessage = false; }
public void ShowIncorrectDeckMessage() { var decks = DeckList.DecksList.Where( d => d.Class == Game.PlayingAs && Game.PlayerDrawn.All(c => d.Cards.Contains(c)) ).ToList(); if(decks.Contains(DeckPickerList.SelectedDeck)) decks.Remove(DeckPickerList.SelectedDeck); Logger.WriteLine(decks.Count + " possible decks found.", "IncorrectDeckMessage"); if(decks.Count > 0) { var dsDialog = new DeckSelectionDialog(decks); //todo: System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=ClassColor; DataItem=null; target element is 'GradientStop' (HashCode=7260326); target property is 'Color' (type 'Color') //when opened for seconds time. why? dsDialog.ShowDialog(); var selectedDeck = dsDialog.SelectedDeck; if(selectedDeck != null) { Logger.WriteLine("Selected deck: " + selectedDeck.Name); DeckPickerList.SelectDeck(selectedDeck); UpdateDeckList(selectedDeck); UseDeck(selectedDeck); } else { this.ShowMessage("Deck detection disabled.", "Can be re-enabled in \"DECKS\" menu."); CheckboxDeckDetection.IsChecked = false; Config.Save(); } } IsShowingIncorrectDeckMessage = false; NeedToIncorrectDeckMessage = false; }
public void ShowIncorrectDeckMessage() { if(Game.PlayerDrawn.Count == 0) { IsShowingIncorrectDeckMessage = false; return; } var decks = DeckList.Instance.Decks.Where( d => d.Class == Game.PlayingAs && !d.Archived && Game.PlayerDrawn.Where(c => !c.IsStolen).All(c => d.GetSelectedDeckVersion().Cards.Contains(c))) .ToList(); if(decks.Contains(DeckList.Instance.ActiveDeckVersion)) decks.Remove(DeckList.Instance.ActiveDeckVersion); Logger.WriteLine(decks.Count + " possible decks found.", "IncorrectDeckMessage"); Game.NoMatchingDeck = decks.Count == 0; if(decks.Count == 1 && Config.Instance.AutoSelectDetectedDeck) { var deck = decks.First(); Logger.WriteLine("Automatically selected deck: " + deck.Name, "IncorrectDeckMessage"); DeckPickerList.SelectDeck(deck); UpdateDeckList(deck); UseDeck(deck); } else if(decks.Count > 0) { decks.Add(new Deck("Use no deck", "", new List<Card>(), new List<string>(), "", "", DateTime.Now, false, new List<Card>(), SerializableVersion.Default, new List<Deck>(), false, "", Guid.Empty, "")); var dsDialog = new DeckSelectionDialog(decks); dsDialog.ShowDialog(); var selectedDeck = dsDialog.SelectedDeck; if(selectedDeck != null) { if(selectedDeck.Name == "Use no deck") SelectDeck(null, true); else { Logger.WriteLine("Selected deck: " + selectedDeck.Name, "IncorrectDeckMessage"); DeckPickerList.SelectDeck(selectedDeck); UpdateDeckList(selectedDeck); UseDeck(selectedDeck); } } else { this.ShowMessage("Deck detection disabled.", "Can be re-enabled in \"DECKS\" menu."); CheckboxDeckDetection.IsChecked = false; Config.Save(); } } IsShowingIncorrectDeckMessage = false; NeedToIncorrectDeckMessage = false; }
private static void ShowDeckSelectionDialog(List<Deck> decks) { decks.Add(new Deck("Use no deck", "", new List<Card>(), new List<string>(), "", "", DateTime.Now, false, new List<Card>(), SerializableVersion.Default, new List<Deck>(), false, "", Guid.Empty, "")); if(decks.Count == 1 && DeckList.Instance.ActiveDeck != null) { decks.Add(new Deck("No match - Keep using active deck", "", new List<Card>(), new List<string>(), "", "", DateTime.Now, false, new List<Card>(), SerializableVersion.Default, new List<Deck>(), false, "", Guid.Empty, "")); } _waitingForUserInput = true; Log.Info("Waiting for user input..."); var dsDialog = new DeckSelectionDialog(decks); dsDialog.ShowDialog(); var selectedDeck = dsDialog.SelectedDeck; if(selectedDeck != null) { if(selectedDeck.Name == "Use no deck") { Log.Info("Auto deck detection disabled."); Core.MainWindow.SelectDeck(null, true); NotFoundCards.Clear(); } else if(selectedDeck.Name == "No match - Keep using active deck") { IgnoredDeckId = DeckList.Instance.ActiveDeck?.DeckId ?? Guid.Empty; Log.Info($"Now ignoring {DeckList.Instance.ActiveDeck?.Name}"); NotFoundCards.Clear(); } else { Log.Info("Selected deck: " + selectedDeck.Name); Core.MainWindow.SelectDeck(selectedDeck, true); } } else { Log.Info("Auto deck detection disabled."); Core.MainWindow.ShowMessage("Auto deck selection disabled.", "This can be re-enabled by selecting \"AUTO\" in the bottom right of the deck picker.").Forget(); Config.Instance.AutoDeckDetection = false; Config.Save(); Core.MainWindow.DeckPickerList.UpdateAutoSelectToggleButton(); } _waitingForUserInput = false; }