using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
public class HeroFatesCell : MonoBehaviour
|
{
|
[SerializeField] ImageEx imgBG;
|
[SerializeField] TextEx txtFateName;
|
[SerializeField] OutlineEx outlineFateName;
|
[SerializeField] TextEx txtFateLV;
|
[SerializeField] TextEx txtFateNeedHeroHasCnt;
|
[SerializeField] TextEx txtHasHeroTotalStar;
|
|
[SerializeField] ItemCell itemCell;
|
|
[SerializeField] ButtonEx btnHave;
|
[SerializeField] ImageEx imgHave;
|
[SerializeField] Image imgHaveRed;
|
|
[SerializeField] ButtonEx btnUpgrade;
|
[SerializeField] TextEx txtUpgrade;
|
[SerializeField] ImageEx imgUpgrade;
|
[SerializeField] Image imgUpgradeRed;
|
|
[SerializeField] HorizontalLayoutGroup horizontalLayoutGroup;
|
[SerializeField] List<HeroFatesIHItem> heroFatesIHItems;
|
int[] spacingArr = new int[5] { 150, 150, 99, 68, 37 };
|
[SerializeField] Transform transAttr;
|
[SerializeField] List<TextEx> attrs;
|
[SerializeField] Transform transItems;
|
[SerializeField] List<ItemCell> items;
|
HeroFatesManager manager { get { return HeroFatesManager.Instance; } }
|
public void Display(int index, List<int> showList)
|
{
|
if (showList.IsNullOrEmpty() || index >= showList.Count || index < 0)
|
{
|
return;
|
}
|
|
int fatesId = showList[index];
|
if (!manager.TryGetHeroFatesConfig(fatesId, out HeroFatesConfig config) || config.HeroIDList.IsNullOrEmpty())
|
{
|
return;
|
}
|
|
HeroFatesState state = manager.GetHeroFatesState(fatesId);
|
bool isNoActive = state == HeroFatesState.Locked || state == HeroFatesState.Activatable;
|
txtFateLV.SetActive(!isNoActive);
|
txtFateNeedHeroHasCnt.SetActive(isNoActive);
|
txtHasHeroTotalStar.SetActive(state == HeroFatesState.ActiveNotUpgradable || state == HeroFatesState.ActiveUpgradable);
|
|
btnHave.SetActive(isNoActive);
|
btnHave.interactable = state == HeroFatesState.Activatable;
|
imgHave.gray = state == HeroFatesState.Locked;
|
imgHaveRed.SetActive(state == HeroFatesState.Activatable);
|
|
btnUpgrade.SetActive(!isNoActive);
|
btnUpgrade.interactable = state != HeroFatesState.MaxLevel;
|
imgUpgrade.gray = state == HeroFatesState.MaxLevel;
|
txtUpgrade.text = Language.Get(state == HeroFatesState.MaxLevel ? "L1110" : "L1109");
|
imgUpgradeRed.SetActive(state == HeroFatesState.ActiveUpgradable);
|
|
imgBG.SetSprite(manager.GetCellBgByFatesQuality(config.BGQuality));
|
|
|
int needHeroHasCnt = manager.GetFateNeedHeroHasCnt(fatesId);
|
int needHeroCnt = config.HeroIDList.Length;
|
txtFateNeedHeroHasCnt.text = Language.Get("BoneField09", needHeroHasCnt, needHeroCnt);
|
|
bool hasNowLVAndNextLVConfig = manager.TryGetNowLVAndNextLVConfig(fatesId, out int nowLv, out HeroFatesQualityLVConfig nowLVConfig, out HeroFatesQualityLVConfig nextLVConfig);
|
if (hasNowLVAndNextLVConfig)
|
{
|
int fatesNowStarCnt = manager.GetFatesNowStarCnt(fatesId);
|
int nextNeedStarCnt = nextLVConfig.NeedStarTotal;
|
txtHasHeroTotalStar.text = StringUtility.Concat(Language.Get("HeroFates05"), UIHelper.AppendColor(nextNeedStarCnt <= fatesNowStarCnt ? TextColType.LightGreen : TextColType.Red, Language.Get("HeroFates11", fatesNowStarCnt, nextNeedStarCnt)));
|
}
|
|
txtFateName.text = config.FatesName;
|
txtFateName.color = UIHelper.GetUIColorByFunc(config.BGQuality);
|
outlineFateName.OutlineColor = UIHelper.GetUIOutlineColor(config.BGQuality);
|
DisplayLH(config);
|
|
transAttr.SetActive(!isNoActive);
|
DisplayAttrs(fatesId);
|
|
transItems.SetActive(!config.AwardItemList.IsNullOrEmpty() && isNoActive);
|
DisplayAwardItems(config);
|
|
bool hasInfo = manager.TryGetHeroFates(fatesId, out HeroFates info);
|
txtFateLV.text = Language.Get("L1113", hasInfo ? info.FatesLV : 0);
|
|
btnHave.SetListener(() => manager.SendHeroFates(fatesId, 0));
|
btnUpgrade.SetListener(() =>
|
{
|
if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.HeroFatesUpgrade, true))
|
return;
|
manager.chooseHeroFatesId = fatesId;
|
UIManager.Instance.OpenWindow<HeroFatesUpgradeWin>();
|
});
|
}
|
|
void DisplayLH(HeroFatesConfig config)
|
{
|
if (manager.TryGetNowMaxStarHeroDict(out Dictionary<int, HeroInfo> nowMaxStarHeroDict) || !nowMaxStarHeroDict.IsNullOrEmpty())
|
{
|
for (int i = 0; i < heroFatesIHItems.Count; i++)
|
{
|
if (i < config.HeroIDList.Length)
|
{
|
int heroID = config.HeroIDList[i];
|
heroFatesIHItems[i].SetActive(true);
|
heroFatesIHItems[i].Display(config.HeroIDList, i, nowMaxStarHeroDict);
|
}
|
else
|
{
|
heroFatesIHItems[i].SetActive(false);
|
}
|
}
|
|
int index = Mathf.Max(config.HeroIDList.Length - 1, 0);
|
if (index >= spacingArr.Length)
|
{
|
index = spacingArr.Length - 1;
|
}
|
int spacing = spacingArr[index];
|
horizontalLayoutGroup.spacing = spacing;
|
}
|
}
|
|
void DisplayAttrs(int fatesId)
|
{
|
if (attrs.IsNullOrEmpty())
|
return;
|
bool hasConfig = manager.TryGetAttrIDListAndLVAttrValueList(fatesId, out int[] attrIDList, out int[] lvAttrValueList);
|
if (!hasConfig)
|
return;
|
for (int i = 0; i < attrs.Count; i++)
|
{
|
if (i < attrIDList.Length)
|
{
|
int attrID = attrIDList[i];
|
int attrValue = manager.GetNowAttrValue(fatesId, i);
|
attrs[i].text = PlayerPropertyConfig.GetFullDescription(attrID, attrValue);
|
attrs[i].SetActive(true);
|
}
|
else
|
{
|
attrs[i].SetActive(false);
|
}
|
}
|
|
|
}
|
|
void DisplayAwardItems(HeroFatesConfig config)
|
{
|
if (items.IsNullOrEmpty() || config.AwardItemList.IsNullOrEmpty())
|
return;
|
for (int i = 0; i < items.Count; i++)
|
{
|
if (i < config.AwardItemList.Length)
|
{
|
int itemID = config.AwardItemList[i][0];
|
int count = config.AwardItemList[i][1];
|
items[i].Init(new ItemCellModel(itemID, false, count));
|
items[i].button.SetListener(() => ItemTipUtility.Show(itemID));
|
items[i].SetActive(true);
|
}
|
else
|
{
|
items[i].SetActive(false);
|
}
|
}
|
}
|
}
|