示例#1
0
        public override TaskState Process()
        {
            switch (Type)
            {
            case EntityType.HERO:
                CardClass = Controller.HeroClass;
                break;

            case EntityType.OP_HERO:
                CardClass = Controller.Opponent.HeroClass;
                break;

            case EntityType.INVALID:
                break;

            default:
                throw new NotImplementedException();
            }

            IEnumerable <Card> cards     = Game.FormatType == FormatType.FT_STANDARD ? Cards.AllStandard : Cards.AllWild;
            IEnumerable <Card> cardsList = cards.Where(p =>
                                                       (CardType == CardType.INVALID || p.Type == CardType) &&
                                                       (CardClass == CardClass.INVALID || p.Class == CardClass) &&
                                                       (CardSet == CardSet.INVALID || p.Set == CardSet) &&
                                                       (GameTagFilter == null || GameTagFilter.TrueForAll(gameTag => p.Tags.ContainsKey(gameTag))));

            IPlayable randomCard = Entity.FromCard(Opposite ? Controller.Opponent : Controller, Util.Choose <Card>(cardsList.ToList()));

            Playables.Add(randomCard);

            Game.OnRandomHappened(true);

            return(TaskState.COMPLETE);
        }
示例#2
0
        public override TaskState Process()
        {
            switch (Type)
            {
            case EntityType.HERO:
                CardClass = Controller.HeroClass;
                break;

            case EntityType.OP_HERO:
                CardClass = Controller.Opponent.HeroClass;
                break;

            case EntityType.INVALID:
                break;

            default:
                throw new NotImplementedException();
            }

            IEnumerable <Card> cards = Game.FormatType == FormatType.FT_STANDARD ? Cards.AllStandard : Cards.AllWild;

            if (!CachedCardLists.TryGetValue(Source.Card.AssetId, out List <Card> cardsList))
            {
                cardsList = cards.Where(p =>
                                        (CardType == CardType.INVALID || p.Type == CardType) &&
                                        (CardClass == CardClass.INVALID || p.Class == CardClass) &&
                                        (CardSet == CardSet.INVALID || p.Set == CardSet) &&
                                        (Race == Race.INVALID || p.Race == Race) &&
                                        (GameTagFilter == null || GameTagFilter.TrueForAll(gameTag => p.Tags.ContainsKey(gameTag))) &&
                                        (p[GameTag.QUEST] == 0)).ToList();

                CachedCardLists.TryAdd(Source.Card.AssetId, cardsList);
            }


            IPlayable randomCard = Entity.FromCard(Opposite ? Controller.Opponent : Controller, Util.Choose(cardsList));

            Playables = new List <IPlayable> {
                randomCard
            };

            Game.OnRandomHappened(true);

            return(TaskState.COMPLETE);
        }