using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class HeroDebutCallRateItem : MonoBehaviour { [SerializeField] ButtonEx libButton; [SerializeField] ItemCell itemCell; [SerializeField] Text rateText; HeroDebutManager manager => HeroDebutManager.Instance; public void Display(int index, Dictionary gridRateDict, List gridList, XBGetItemConfig xbConfig) { if (gridList?.Count <= index || gridRateDict?.Count != gridList?.Count || xbConfig == null) return; if (xbConfig?.GridItemInfo == null || xbConfig?.GridLibInfo == null) return; if (manager.xbGridArr == null) return; int grid = gridList[index]; int rate = gridRateDict[grid]; rateText.text = Language.Get("TimingGift02", (double)rate / (double)100.0); SetItemCell(grid, xbConfig.GridItemInfo, xbConfig.GridLibInfo, manager.xbGridArr); } public void SetCountActive(ItemCell itemCell, long count) { itemCell.countText.SetActive(count > 1); } private void SetItemCell(int grid, Dictionary gridItemInfo, Dictionary gridLibInfo, int[] xbGridArr) { libButton.SetActive(false); itemCell.SetActive(false); if (gridItemInfo.TryGetValue(grid, out var itemInfo)) { itemCell.SetActive(true); itemCell.Init(new ItemCellModel(itemInfo[0], true, itemInfo[1])); SetCountActive(itemCell, itemInfo[1]); itemCell.button.SetListener(() => ItemTipUtility.Show(itemInfo[0])); return; } if (!gridLibInfo.TryGetValue(grid, out var libID)) return; var list = TreasureItemLibConfig.GetItemIDList(libID); if (list == null) return; if (xbGridArr == null) return; if (xbGridArr.Contains(grid)) { int heroID = manager.GetCurrentDisplayCallHeroId(); if (!TryGetHeroItemInfo(heroID, libID, list, out int itemID, out int itemCount)) return; itemCell.SetActive(true); itemCell.Init(new ItemCellModel(itemID, true, itemCount)); SetCountActive(itemCell, itemCount); itemCell.button.SetListener(() => ItemTipUtility.Show(itemID)); } else { libButton.SetActive(true); libButton.SetListener(() => { HeroDebutCallRateHeroWin.worldPos = libButton.transform.position; HeroDebutCallRateHeroWin.dataList = GetLibItemList(libID, list); HeroDebutCallRateHeroWin.isDownShow = true; UIManager.Instance.OpenWindow(); }); } } public List GetLibItemList(int libID, List itemList) { List res = new(); for (int i = 0; i < itemList.Count; i++) { int itemID = itemList[i]; var config = ItemConfig.Get(itemID); if (config == null) continue; if (!TreasureItemLibConfig.TryGetID(libID, itemID, out int id)) continue; var treasureItemLibConfig = TreasureItemLibConfig.Get(id); if (treasureItemLibConfig == null) continue; res.Add(new Item(itemID, treasureItemLibConfig.ItemCount)); } return res; } public bool TryGetHeroItemInfo(int heroID, int libID, List itemList, out int itemID, out int itemCount) { itemID = 0; itemCount = 0; if (itemList == null) return false; for (int i = 0; i < itemList.Count; i++) { itemID = itemList[i]; var config = ItemConfig.Get(itemID); if (config == null) continue; if (!TreasureItemLibConfig.TryGetID(libID, itemID, out int id)) continue; var treasureItemLibConfig = TreasureItemLibConfig.Get(id); if (treasureItemLibConfig == null) continue; //本体 if (config.Type == 150) { if (heroID == itemID) { itemCount = treasureItemLibConfig.ItemCount; return true; } } else if (config.Type == 151) { if (heroID == config.EffectValueA1) { itemCount = treasureItemLibConfig.ItemCount; return true; } } } return false; } }