using System; using System.Collections.Generic; using System.Linq; using Continentis.MainGame; using Continentis.MainGame.Card; using SLSFramework.UModAssistance; using UnityEngine; namespace Continentis.Mods.Basic.Cards { public class CardLogicComponent_GenerateCards : CardLogicComponentBase { private Func cardFilter; public override void Initialize(CardLogicBase card) { base.Initialize(card); cardFilter = cardData => !cardData.HasTag("Unobtainable"); } /// /// 设置卡牌过滤器 /// public void SetFilter(Func filter) { List> originalFilters = new List>(); originalFilters.Add(cardData => !cardData.HasTag("Unobtainable")); if (filter != null) originalFilters.Add(filter); this.cardFilter = cardData => originalFilters.All(f => f(cardData)); } /// /// 获取衍生卡牌数据 /// public CardData GetDerivativeCardData(int index) { return card.cardData.GetDerivativeCardData(index); } /// /// 从指定的cardDataID中,根据needFilter决定是否进行过滤,获取符合条件的卡牌数据列表 /// /// 是否需要过滤 /// 指定的卡牌数据ID列表 /// 符合条件的卡牌数据列表 public List GetDesignatedGlobalCardData(bool needFilter, params string[] cardDataIDs) { List result = new List(); foreach (string dataID in cardDataIDs) { if (ModManager.TryGetData(dataID, out CardData cardData)) { if (needFilter && cardFilter(cardData)) { result.Add(cardData); } else if (!needFilter) { result.Add(cardData); } } } return result; } /// /// 在游戏全部的卡牌中,获取经过全局过滤器过滤后的所有卡牌数据列表 /// public List GetFilteredGlobalCardData() { return ModManager.Database[typeof(CardData)].Values.Cast().Where(cardFilter).ToList(); } /// /// 在游戏全部的卡牌中,获取经过指定过滤器过滤后的所有卡牌数据列表 /// public List GetFilteredGlobalCardData(Func filter) { return ModManager.Database[typeof(CardData)].Values.Cast().Where(filter).ToList(); } } }