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); }
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); }