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<int, int> gridRateDict, List<int> 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<int, int[]> gridItemInfo, Dictionary<int, int> 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<HeroDebutCallRateHeroWin>();
|
});
|
}
|
}
|
public List<Item> GetLibItemList(int libID, List<int> itemList)
|
{
|
List<Item> 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<int> 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;
|
}
|
}
|