private void SendButtonInfoUpdate(ICardButton button, SelectableCards selectableCards) { _logger.LogMessage("Sending button info update"); Card card = null; if (button is CardImageButton cardImageButton) { card = cardImageButton.Card; } var deck = GetDeckType(selectableCards); var request = new UpdateCardInfoRequest { Deck = deck, Index = selectableCards.CardButtons.IndexOf(button), CardButtonType = GetCardType(card), Name = button?.Text, IsToggled = button != null && button.IsToggled, ImageAvailable = card?.ButtonImageAsBytes != null, IsCardInSet = false }; SendStatusToAllRegisteredPorts(request); }
public ShowSetButton(SelectableCards selectableCards) : base(selectableCards) { _selectableCards = selectableCards; selectableCards.CardSet.IsDisplayedOnOverlayChanged += (isDisplayedOnOverlay) => { IsToggled = isDisplayedOnOverlay; selectableCards.OnButtonChanged(this); }; }
public CardImageButton(SelectableCards selectableCards, Card card) : base(selectableCards) { _selectableCards = selectableCards; Card = card; Text = card.Name; card.IsDisplayedOnOverlayChanged += (isDisplayedOnOverlay) => { IsToggled = isDisplayedOnOverlay; selectableCards.OnButtonChanged(this); }; }
internal void ResetSelection() { DetachAll(); foreach (var c in SelectableCards) { c.Selectable = false; c.Selected = false; c.SelectionParam = 0; } SelectableCards.Clear(); SelectedCards.ForEach((c) => c.Selected = false); SelectedCards.Clear(); Finishable = false; Cancelabel = false; }
private Deck GetDeckType(SelectableCards selectableCards) { var game = _appData.Game; switch (selectableCards.Type) { case SelectableType.Scenario: return(Deck.Scenario); case SelectableType.Encounter: return(Deck.EncounterDeck); case SelectableType.Location: return(Deck.Locations); case SelectableType.Player: if (selectableCards == game.Players[0].SelectableCards) { return(Deck.Player1); } else if (selectableCards == game.Players[1].SelectableCards) { return(Deck.Player2); } else if (selectableCards == game.Players[2].SelectableCards) { return(Deck.Player3); } else if (selectableCards == game.Players[3].SelectableCards) { return(Deck.Player4); } else { _logger.LogWarning($"Unrecognized SelectableCards player: {selectableCards.Name}."); return(Deck.Player1); } default: _logger.LogWarning($"Unrecognized SelectableCards: {selectableCards.Name}."); return(Deck.Player1); } }
private void SendCardInSetInfoUpdate(CardInSetButton button, SelectableCards selectableCards) { Card card = null; if (button is CardImageButton cardImageButton) { card = cardImageButton.Card; } var deck = GetDeckType(selectableCards); var request = new UpdateCardInfoRequest { Deck = deck, Index = button == null ? selectableCards.CardSet.Buttons.Count : selectableCards.CardSet.Buttons.IndexOf(button), CardButtonType = GetCardType(card), Name = button?.Text.Replace("Right Click", "Long Press"), IsToggled = button != null && button.IsToggled, ImageAvailable = card?.ButtonImageAsBytes != null, IsCardInSet = true }; SendStatusToAllRegisteredPorts(request); }
public void PlayerSelected(SelectableCards selectableCards) { _logger.LogMessage($"Main window: player selected: {selectableCards.Name}."); var startingPositionProperty = string.Empty; if (ViewModel.Game.Players[0].SelectableCards == selectableCards) { startingPositionProperty = nameof(Configuration.Player1Position); } else if (ViewModel.Game.Players[1].SelectableCards == selectableCards) { startingPositionProperty = nameof(Configuration.Player2Position); } else if (ViewModel.Game.Players[2].SelectableCards == selectableCards) { startingPositionProperty = nameof(Configuration.Player3Position); } else if (ViewModel.Game.Players[3].SelectableCards == selectableCards) { startingPositionProperty = nameof(Configuration.Player4Position); } ShowSelectCardsWindow(selectableCards, startingPositionProperty); }
internal void UpdateSelectSum(bool spreading) { sumAssist.Clear(); sumAssist.Add(0); int count, p1, p2, maxParam = -1, minParam = int.MaxValue, selectedCount = SelectedCards.Count - SelectSumFixedCount; HashSet <ClientCard> available = new HashSet <ClientCard>(); var remains = new List <ClientCard>(SelectableCards); remains.RemoveAll((c) => c.Selected); for (int i = 0; i < SelectedCards.Count; ++i) { count = sumAssist.Count; p1 = SelectedCards[i].SelectionParam & 0xffff; p2 = SelectedCards[i].SelectionParam >> 16; int pmin = (p2 > 0 && p2 < p1) ? p2 : p1; minParam = minParam < pmin ? minParam : pmin; maxParam = maxParam > p1 ? maxParam : p1; maxParam = maxParam > p2 ? maxParam : p2; for (int j = 0; j < count; ++j) { if (p2 > 0) { sumAssist.Add(sumAssist[j] + p2); } sumAssist[j] += p1; } } if (Overflowable) { sumAssist.Sort(); int sumMax = sumAssist[sumAssist.Count - 1]; int sumMin = sumAssist[0]; if (sumMin >= SelectSumVal) { SendSelectResponse(); return; } else if (sumMax >= SelectSumVal && sumMax - maxParam < SelectSumVal) { Finishable = true; MainGame.Instance.DuelWindow.SetCancelOrFinish(2); } int sum; for (int i = 0; i < remains.Count; ++i) { remains.Swap(0, i); p1 = remains[0].SelectionParam & 0xffff; p2 = remains[0].SelectionParam >> 16; sum = sumMin + p1; minParam = minParam < p1 ? minParam : p1; if (sum >= SelectSumVal) { if (sum - minParam < SelectSumVal) { available.Add(remains[0]); } } else if (CheckMin(1, remains, SelectSumVal - sum, SelectSumVal - sum + minParam - 1)) { available.Add(remains[0]); } if (p2 == 0) { continue; } sum = sumMin + p2; minParam = minParam < p2 ? minParam : p2; if (sum >= SelectSumVal) { if (sum - minParam < SelectSumVal) { available.Add(remains[0]); } } else if (CheckMin(1, remains, SelectSumVal - sum, SelectSumVal - sum + minParam - 1)) { available.Add(remains[0]); } } } else { if (sumAssist.Contains(SelectSumVal) && selectedCount >= SelectMin && selectedCount <= SelectMax) { SendSelectResponse(); return; } HashSet <int> noduplicate = new HashSet <int>(sumAssist); foreach (int val in noduplicate) { int tarValue = SelectSumVal - val; for (int i = 0; i < remains.Count; ++i) { if (available.Contains(remains[i])) { continue; } remains.Swap(0, i); p1 = remains[0].SelectionParam & 0xffff; p2 = remains[0].SelectionParam >> 16; if (CheckSum(1, remains, tarValue - p1, selectedCount + 1) || (p2 > 0 && CheckSum(1, remains, tarValue - p2, selectedCount + 1))) { available.Add(remains[0]); } } } } if (!Finishable && available.Count == 1) { SelectedCards.AddRange(available); SendSelectResponse(); return; } if (spreading) { DetachAll(); Spread(available); } else { SelectableCards.ForEach((c) => c.Selectable = false); foreach (var c in available) { c.Selectable = true; } } }
public void ShowDeckList(SelectableCards selectableCards) { _logger.LogMessage("Main window: show deck list clicked."); selectableCards.ShowDeckList(); }
protected CardButton(SelectableCards selectableCards) { _selectableCards = selectableCards; }
public ShowCardButton(SelectableCards selectableCards, Card card) : base(selectableCards, card) { _selectableCards = selectableCards; }
public ClearButton(SelectableCards selectableCards) : base(selectableCards) { Text = "Clear Cards"; _selectableCards = selectableCards; }
public CardInSetButton(CardSet cardSet, SelectableCards selectableCards, Card card) : base(selectableCards, card) { _cardSet = cardSet; }