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;
        }
Beispiel #2
0
        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;
		}
Beispiel #4
0
		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;
		}