예제 #1
0
        public void UpdateModel()
        {
            var model = DataContext as TwoSidesCardChoiceViewModel;

            if (model == null)
            {
                return;
            }
            spCardPicks1.Children.Clear();
            foreach (var card in model.CardsPicked1)
            {
                var cv = CardView.CreateCard(card, spCardPicks1, Settings.TwoSidesCardChoiceBox.CardWidth, Settings.TwoSidesCardChoiceBox.CardHeight);
                cv.Opacity = 1.0d;
                cv.Margin  = new Thickness(5.0d);
            }
            spCardPicks2.Children.Clear();
            foreach (var card in model.CardsPicked2)
            {
                var cv = CardView.CreateCard(card, spCardPicks2, Settings.TwoSidesCardChoiceBox.CardWidth, Settings.TwoSidesCardChoiceBox.CardHeight);
                cv.Opacity = 1.0d;
                cv.Margin  = new Thickness(5.0d);
            }
            ugCardsRepo.Children.Clear();
            foreach (var card in model.CardsToPick)
            {
                var cv = CardView.CreateCard(card, ugCardsRepo, Settings.TwoSidesCardChoiceBox.CardWidth, Settings.TwoSidesCardChoiceBox.CardHeight);
                cv.Opacity        = 1.0d;
                cv.Margin         = new Thickness(5.0d);
                cv.OffsetOnSelect = false;
            }
        }
예제 #2
0
        protected override CardView RemoveDelayedTool(Card card, bool isCopy)
        {
            SmallDelayedToolView dtv = null;

            foreach (var tmpDtv in delayedToolsDock.Children)
            {
                dtv = tmpDtv as SmallDelayedToolView;
                Trace.Assert(dtv != null);
                CardViewModel model = dtv.DataContext as CardViewModel;
                Trace.Assert(model != null);
                if (model.Card == card)
                {
                    break;
                }
                dtv = null;
            }

            Trace.Assert(dtv != null);

            Point dest = dtv.TranslatePoint(new Point(0, 0),
                                            ParentGameView.GlobalCanvas);

            if (!isCopy)
            {
                delayedToolsDock.Children.Remove(dtv);
            }

            CardView result = CardView.CreateCard(card);

            ParentGameView.GlobalCanvas.Children.Add(result);
            result.Opacity = 0;
            result.SetCurrentPosition(dest);

            return(result);
        }
예제 #3
0
        /// <summary>
        /// Pick a card from card repo to the row on the specified player's side.
        /// </summary>
        /// <param name="isMainPlayer"></param>
        /// <param name="cardIndex"></param>
        public void PickCard(bool isMainPlayer, int cardIndex)
        {
            var model = DataContext as TwoSidesCardChoiceViewModel;

            Trace.Assert(model != null);
            Trace.Assert(cardIndex >= 0 && cardIndex < ugCardsRepo.Children.Count);
            CardView card = ugCardsRepo.Children[cardIndex] as CardView;

            Trace.Assert(card != null);
            Point p    = card.TranslatePoint(new Point(0, 0), canvasCards);
            var   copy = CardView.CreateCard(card.CardModel, canvasCards, Settings.TwoSidesCardChoiceBox.CardWidth, Settings.TwoSidesCardChoiceBox.CardHeight);

            copy.SetCurrentPosition(p);
            copy.Opacity = 1.0d;
            int      num;
            CardView cv;

            if (isMainPlayer)
            {
                num = model.NumCardsPicked1 - 1;
                Trace.Assert(num >= 0 && num < spCardPicks1.Children.Count);
                cv = spCardPicks1.Children[num] as CardView;
            }
            else
            {
                num = model.NumCardsPicked2 - 1;
                Trace.Assert(num >= 0 && num < spCardPicks1.Children.Count);
                cv = spCardPicks2.Children[num] as CardView;
            }
            p             = cv.TranslatePoint(new Point(0, 0), canvasCards);
            copy.Position = p;
            copy.Rebase();
            card.DataContext = new CardSlotViewModel();
        }
예제 #4
0
        protected override CardView RemoveRoleCard(Card card)
        {
            CardView result = CardView.CreateCard(card);

            ParentGameView.GlobalCanvas.Children.Add(result);
            result.Opacity = 0;
            result.SetCurrentPosition(ComputeCardCenterPos(result, cbRoleBox));
            return(result);
        }
예제 #5
0
        protected override CardView RemoveEquipment(Card card, bool isCopy)
        {
            Trace.Assert(card.Id >= 0, "Cannot remove unknown card from equip area.");
            Equipment equip = GameEngine.CardSet[card.Id].Type as Equipment;

            if (equip == null)
            {
                throw new ArgumentException("Cannot add non-equip to equip area.");
            }

            Border targetArea = null;

            switch (equip.Category)
            {
            case CardCategory.Weapon:
                targetArea = weaponArea;
                break;

            case CardCategory.Armor:
                targetArea = armorArea;
                break;

            case CardCategory.DefensiveHorse:
                targetArea = horse1Area;
                break;

            case CardCategory.OffensiveHorse:
                targetArea = horse2Area;
                break;

            default:
                throw new ArgumentException("Cannot install non-equips to equip area.");
            }

            if (targetArea.Child == null)
            {
                throw new ArgumentException("No equip is found.");
            }

            SmallEquipView equipLabel = targetArea.Child as SmallEquipView;

            if (!isCopy)
            {
                targetArea.Child = null;
            }

            CardView result = CardView.CreateCard(card);

            ParentGameView.GlobalCanvas.Children.Add(result);
            result.Opacity = 0;
            result.SetCurrentPosition(ComputeCardCenterPos(result, targetArea));
            return(result);
        }
예제 #6
0
        protected override IList <CardView> RemoveHandCards(IList <Card> cards, bool isCopy)
        {
            var cardsToRemove = new List <CardView>();

            foreach (var card in cards)
            {
                cardsToRemove.Add(CardView.CreateCard(card));
            }
            Trace.Assert(cardsToRemove.Count == cards.Count);
            handCardArea.RemoveCards(cardsToRemove);
            return(cardsToRemove);
        }
예제 #7
0
        protected override IEnumerable <CardView> RemovePrivateCards(IList <Card> cards)
        {
            var cardsToRemove = new List <CardView>();

            foreach (var card in cards)
            {
                cardsToRemove.Add(CardView.CreateCard(card));
            }
            Trace.Assert(cardsToRemove.Count == cards.Count);
            privateCardArea.RemoveCards(cardsToRemove);
            return(cardsToRemove);
        }
예제 #8
0
        internal override void UpdateCards()
        {
            var oldHandCards = handCardArea.Cards;

            foreach (var card in oldHandCards)
            {
                card.Disappear(0);
            }

            handCardArea.Cards.Clear();
            weaponArea.Children.Clear();
            armorArea.Children.Clear();
            horse1Area.Children.Clear();
            horse2Area.Children.Clear();
            delayedToolsDock.Children.Clear();
            equipmentArea.Visibility = System.Windows.Visibility.Collapsed;

            base.UpdateCards();

            if (PlayerModel == null)
            {
                return;
            }
            var player = PlayerModel.Player;

            if (player == null)
            {
                return;
            }

            EquipCommand[] commands = { PlayerModel.WeaponCommand,         PlayerModel.ArmorCommand,
                                        PlayerModel.DefensiveHorseCommand, PlayerModel.OffensiveHorseCommand };
            foreach (var equip in commands)
            {
                if (equip != null)
                {
                    AddEquipment(CardView.CreateCard(equip, ParentGameView.GlobalCanvas), true);
                }
            }
            foreach (var dt in player.DelayedTools())
            {
                AddDelayedTool(CardView.CreateCard(dt, ParentGameView.GlobalCanvas), true);
            }
            // Add hand cards last because adding equipment may result in layout change of hand card area.
            AddHandCards(CardView.CreateCards(PlayerModel.HandCards, ParentGameView.GlobalCanvas), true);
        }
예제 #9
0
        protected override IList <CardView> RemoveHandCards(IList <Card> cards, bool isCopy)
        {
            var cardsToRemove = new List <CardView>();

            foreach (var card in cards)
            {
                bool found = false;
                foreach (var cardView in handCardArea.Cards)
                {
                    CardViewModel viewModel = cardView.DataContext as CardViewModel;
                    Trace.Assert(viewModel != null);
                    if (viewModel.Card == card)
                    {
                        if (isCopy)
                        {
                            var copy = CardView.CreateCard(cardView.Card);
                            ParentGameView.GlobalCanvas.Children.Add(copy);
                            copy.SetCurrentPosition(cardView.Position);
                            copy.Opacity = 100;
                            cardsToRemove.Add(copy);
                        }
                        else
                        {
                            cardsToRemove.Add(cardView);
                            cardView.CardModel.IsSelected = false;
                            cardView.DragDirection        = DragDirection.None;
                        }
                        found = true;
                        break;
                    }
                }
                if (!found)
                {
                    cardsToRemove.Add(CardView.CreateCard(card));
                }
            }
            Trace.Assert(cardsToRemove.Count == cards.Count);
            if (!isCopy)
            {
                handCardArea.RemoveCards(cardsToRemove);
            }
            return(cardsToRemove);
        }
예제 #10
0
        public IList <CardView> RemoveCards(DeckType deck, IList <Card> cards, bool isCopy)
        {
            IList <CardView> result    = new List <CardView>();
            IList <CardView> remaining = new List <CardView>();

            foreach (var card in cards)
            {
                var oldCardView = Cards.FirstOrDefault(
                    c => ((card.Id > 0 && c.Card.Id == card.Id) || (card.Id <= 0 && c.Card == card)));
                var cardView = CardView.CreateCard(card);
                if (oldCardView != null)
                {
                    ParentCanvas.Children.Add(cardView);
                    cardView.SetCurrentPosition(oldCardView.Position);
                }
                else
                {
                    remaining.Add(cardView);
                }
                result.Add(cardView);
            }
            RemoveCards(remaining);
            return(result);
        }
예제 #11
0
        internal override void UpdateCards()
        {
            weaponArea.Child = null;
            armorArea.Child  = null;
            horse1Area.Child = null;
            horse2Area.Child = null;
            delayedToolsDock.Children.Clear();

            base.UpdateCards();

            if (PlayerModel == null)
            {
                return;
            }
            var player = PlayerModel.Player;

            if (player == null)
            {
                return;
            }

            EquipCommand[] commands = { PlayerModel.WeaponCommand,         PlayerModel.ArmorCommand,
                                        PlayerModel.DefensiveHorseCommand, PlayerModel.OffensiveHorseCommand };
            foreach (var equip in commands)
            {
                if (equip != null)
                {
                    AddEquipment(CardView.CreateCard(equip, ParentGameView.GlobalCanvas), true);
                }
            }

            foreach (var dt in player.DelayedTools())
            {
                AddDelayedTool(CardView.CreateCard(dt, ParentGameView.GlobalCanvas), true);
            }
        }
예제 #12
0
        protected override CardView RemoveEquipment(Card card, bool isCopy)
        {
            Trace.Assert(card.Id >= 0, "Cannot remove unknown card from equip area.");
            Equipment equip = GameEngine.CardSet[card.Id].Type as Equipment;

            if (equip == null)
            {
                throw new ArgumentException("Cannot add non-equip to equip area.");
            }

            Grid targetArea = null;

            switch (equip.Category)
            {
            case CardCategory.Weapon:
                targetArea = weaponArea;
                break;

            case CardCategory.Armor:
                targetArea = armorArea;
                break;

            case CardCategory.DefensiveHorse:
                targetArea = horse1Area;
                break;

            case CardCategory.OffensiveHorse:
                targetArea = horse2Area;
                break;

            default:
                throw new ArgumentException("Cannot install non-equips to equip area.");
            }

            if (targetArea.Children.Count == 0)
            {
                throw new ArgumentException("No equip is found.");
            }
            ToggleButton button = targetArea.Children[0] as ToggleButton;

            if (!isCopy)
            {
                targetArea.Children.Clear();
            }

            if (IsEquipmentDockEmpty)
            {
                equipmentArea.Visibility = Visibility.Collapsed;
                handCardArea.RearrangeCards();
            }

            CardView result = CardView.CreateCard(card);

            ParentGameView.GlobalCanvas.Children.Add(result);
            result.Opacity = 0;
            Point dest = targetArea.TranslatePoint(new Point(targetArea.Width / 2, targetArea.Height / 2),
                                                   ParentGameView.GlobalCanvas);

            dest.Offset(-result.Width / 2, -result.Height / 2);
            result.SetCurrentPosition(dest);
            return(result);
        }