示例#1
0
        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);
        }
示例#2
0
 public ShowSetButton(SelectableCards selectableCards) : base(selectableCards)
 {
     _selectableCards = selectableCards;
     selectableCards.CardSet.IsDisplayedOnOverlayChanged += (isDisplayedOnOverlay) => {
         IsToggled = isDisplayedOnOverlay;
         selectableCards.OnButtonChanged(this);
     };
 }
示例#3
0
        public CardImageButton(SelectableCards selectableCards, Card card) : base(selectableCards)
        {
            _selectableCards = selectableCards;

            Card = card;
            Text = card.Name;

            card.IsDisplayedOnOverlayChanged += (isDisplayedOnOverlay) => {
                IsToggled = isDisplayedOnOverlay;
                selectableCards.OnButtonChanged(this);
            };
        }
示例#4
0
 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;
 }
示例#5
0
        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);
            }
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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;
                }
            }
        }
示例#9
0
 public void ShowDeckList(SelectableCards selectableCards)
 {
     _logger.LogMessage("Main window: show deck list clicked.");
     selectableCards.ShowDeckList();
 }
示例#10
0
 protected CardButton(SelectableCards selectableCards)
 {
     _selectableCards = selectableCards;
 }
示例#11
0
 public ShowCardButton(SelectableCards selectableCards, Card card) : base(selectableCards, card)
 {
     _selectableCards = selectableCards;
 }
示例#12
0
 public ClearButton(SelectableCards selectableCards) : base(selectableCards)
 {
     Text             = "Clear Cards";
     _selectableCards = selectableCards;
 }
示例#13
0
 public CardInSetButton(CardSet cardSet, SelectableCards selectableCards, Card card) : base(selectableCards, card)
 {
     _cardSet = cardSet;
 }