/// <summary> /// Update and Filter out the Upgrade Database by Cardstate /// </summary> /// <param name="cardState"></param> public void UpdateUpgradeDatabaseByCardState(CardState cardState) { if (data != null) { List <CardUpgradeData> cardUpgradeDatas = (List <CardUpgradeData>)AccessTools.Field(typeof(AllGameData), "cardUpgradeDatas").GetValue(data); applyableUpgrades = cardUpgradeDatas.Where(x => x.GetFilters().All(y => y.FilterCard <CardState>(selectedCardState, relicManager))).Where(x => GetUpgradeText(x) != null && GetUpgradeText(x) != "").ToList(); if (applyableUpgrades.Count > UpgradeDataSelectionButtonsPool.Count) { for (int i = UpgradeDataSelectionButtonsPool.Count; i < applyableUpgrades.Count; i++) { DerivedUpgradeDataSelectionButton selectionButton = CreateUpgradeDataSelectionButton(UpgradeDatabaseContent.transform); UpgradeDataSelectionButtonsPool.Add(selectionButton); } } else { //Hide excessive Selection Buttons for (int i = applyableUpgrades.Count; i < UpgradeDataSelectionButtonsPool.Count; i++) { UpgradeDataSelectionButtonsPool[i].gameObject.SetActive(false); } } //Go through each SelectionButton, updating their text and internal card reference SelectionButton <CardUpgradeData> sbi; for (int j = 0; j < applyableUpgrades.Count; j++) { sbi = UpgradeDataSelectionButtonsPool[j]; sbi.gameObject.SetActive(true); sbi.UpdateText(applyableUpgrades[j]); } UpdateUpgradeDatabaseBySearchString(search); } }
/// <summary> /// Creates a Selection Button for CardData /// </summary> /// <param name="parent"></param> /// <returns></returns> public DerivedUpgradeDataSelectionButton CreateUpgradeDataSelectionButton(Transform parent) { GameObject sbp = GameObject.Instantiate(SelectionButtonPrefab); DontDestroyOnLoad(sbp); sbp.transform.SetParent(parent); DerivedUpgradeDataSelectionButton sb = sbp.AddComponent <DerivedUpgradeDataSelectionButton>(); sb.plugin = this; sb.OnClick += OnClickUpgradeData; sb.UpdateTextFunc += GetUpgradeDataName; return(sb); }