private void PromptForSuggestionResult(object sender, ISuggestionResponseViewModel suggestionResponseViewModel) { new SuggestionResponseDialog(suggestionResponseViewModel) { Owner = this, WindowStartupLocation = WindowStartupLocation.CenterOwner }.ShowDialog(); }
public SuggestionResponseDialog(ISuggestionResponseViewModel vm) { InitializeComponent(); _vm = vm; DataContext = _vm; CloseWithResult = new RelayCommand <DialogResult>(DoCloseWithResult); CloseWithCard = new RelayCommand <Card>(DoCloseWithCard); if (!_vm.CanChooseCard) { Height = 150; } }
private void OnPromptForSuggestionResult(object sender, ISuggestionResponseViewModel suggestion) { var responder = suggestion.Responder; var responderCards = suggestion.Cards.Intersect(PlayerHands[responder]).ToArray(); if (suggestion.Asker == _solver.MyPlayer) { // I am asking another player if (responderCards.Length > 0) { suggestion.ResultCard = responderCards[0]; suggestion.Result = DialogResult.Card; } else { suggestion.Result = DialogResult.None; } } else { // Another player is asking another player suggestion.Result = responderCards.Length > 0 ? DialogResult.Maybe : DialogResult.None; } }
private bool GetSuggestionResponse(Player player, ref bool stopped) { if (ReferenceEquals(player, _solver.MyPlayer)) { var prompt = new SimplePrompt("Hit OK when done.", "Hit OK when done.", MessageBoxButton.OK, MessageBoxImage.None); PromptForSimpleResponse?.Invoke(this, prompt); if (player.Hand.Intersect(_selectedCards).Any()) { _solver.Changes.Add(new SuggestionResponse(DateTime.Now, player, "?")); stopped = true; return(false); } _solver.Changes.Add(new SuggestionResponse(DateTime.Now, player, null)); return(true); } _currentAsk = new SuggestionResponseViewModel(PlayerTakingTurn, player, _solver.MyPlayer.IsTakingTurn, _selectedCards); PromptForSuggestionResult?.Invoke(this, _currentAsk); var addedChange = false; try { switch (_currentAsk.Result) { case DialogResult.Cancel: return(false); case DialogResult.Skip: return(true); case DialogResult.Maybe: _solver.Changes.Add(new SuggestionResponse(DateTime.Now, player, "?")); addedChange = true; _solver.PlayerMightHaveCards(player, _selectedCards, $"{player.Name} showed a card to {PlayerTakingTurn.Name}."); stopped = true; return(false); case DialogResult.None: _solver.Changes.Add(new SuggestionResponse(DateTime.Now, player, null)); addedChange = true; _solver.PlayerDoesNotHaveCards(player, _selectedCards, $"{player.Name} said they didn't have this card when asked."); return(true); case DialogResult.Card: _solver.Changes.Add(new SuggestionResponse(DateTime.Now, player, _currentAsk.ResultCard.Name)); addedChange = true; _solver.PlayerHasCard(player, _currentAsk.ResultCard, $"{player.Name} showed me {_currentAsk.ResultCard}."); stopped = true; return(false); default: throw new ArgumentOutOfRangeException(); } } catch (GameException) { if (addedChange) { _solver.Changes.RemoveAt(_solver.Changes.Count - 1); } throw; } }