using System.Collections.Generic;
|
using System.Linq;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
public class YunShiXBItem : MonoBehaviour
|
{
|
[SerializeField] ImageEx imgBg;
|
[SerializeField] ImageEx imgItem;
|
[SerializeField] TextEx txtCount;
|
[SerializeField] TextEx txtLimitCount;
|
[SerializeField] Slider slider;
|
[SerializeField] TextEx txtExpCount;
|
[SerializeField] ButtonEx btnItem;
|
HappyXBModel happyXBModel { get { return ModelCenter.Instance.GetModelEx<HappyXBModel>(); } }
|
YunShiXBActModel model { get { return ModelCenter.Instance.GetModelEx<YunShiXBActModel>(); } }
|
|
public void Display(int gridIndex)
|
{
|
OperationYunShi act;
|
OperationTimeHepler.Instance.TryGetOperation(YunShiXBActModel.operaType, out act);
|
if (act == null)
|
return;
|
|
int type = act.treasureType;
|
var xbInfo = happyXBModel.GetXBInfoByType(type);
|
if (xbInfo == null)
|
return;
|
|
XBGetItemConfig xbGetItemConfig = happyXBModel.GetXBItemConfigByType(type);
|
if (xbGetItemConfig == null)
|
return;
|
|
int[][] GridItemRateList = xbGetItemConfig.GridItemRateList1;
|
if (GridItemRateList.IsNullOrEmpty())
|
return;
|
|
Dictionary<int, int> rateDict = ConfigParse.GetRateDict(GridItemRateList);
|
if (rateDict.IsNullOrEmpty())
|
return;
|
|
var dict = happyXBModel.GetXBGetItemByID(type);
|
if (!dict.TryGetValue(gridIndex, out var info))
|
return;
|
|
if (!ItemConfig.Has(info.itemId))
|
return;
|
|
if (!TreasureSetConfig.Has(type))
|
return;
|
TreasureSetConfig treasureSetConfig = TreasureSetConfig.Get(type);
|
|
ItemConfig itemConfig = ItemConfig.Get(info.itemId);
|
imgItem.SetSprite(itemConfig.IconKey);
|
txtCount.text = info.count.ToString();
|
|
//如果不配置功能配置表,默认限量的配红,其它普通的配蓝
|
//如果功能配置表有这个格子的配置,优先功能配置表的配置
|
bool isLimit = TryGetLimitCount(xbInfo, gridIndex, out int limitCount);
|
bool isLuckyGridNum = IsLuckyGridNum(type, gridIndex);
|
|
if (model.TryGetItemBG(type, gridIndex, isLimit, out string str))
|
{
|
imgBg.SetSprite(str);
|
}
|
|
var xbLimitMaxCountDict = model.GetXbLimitMaxCountDict(treasureSetConfig.GridNumMaxLimitInfo);
|
|
txtLimitCount.SetActive(isLimit);
|
if (isLimit && xbLimitMaxCountDict.TryGetValue(gridIndex, out int limitMaxCount))
|
{
|
txtLimitCount.text = Language.Get("YunShi05", StringUtility.Contact(limitCount, "/", limitMaxCount));
|
}
|
|
slider.SetActive(isLimit && isLuckyGridNum);
|
if (isLimit && isLuckyGridNum)
|
{
|
txtExpCount.text = StringUtility.Contact(xbInfo.luckValue, "/", treasureSetConfig.FullLucky);
|
slider.value = Mathf.Floor((xbInfo.luckValue / (float)treasureSetConfig.FullLucky) * 1000f) / 1000f;
|
}
|
|
btnItem.SetListener(() =>
|
{
|
ItemTipUtility.Show(info.itemId);
|
});
|
}
|
|
public void Display(int itemId, int count)
|
{
|
OperationYunShi act;
|
OperationTimeHepler.Instance.TryGetOperation(YunShiXBActModel.operaType, out act);
|
if (act == null)
|
return;
|
|
int type = act.treasureType;
|
var xbInfo = happyXBModel.GetXBInfoByType(type);
|
if (xbInfo == null)
|
return;
|
|
TreasureSetConfig treasureSetConfig = TreasureSetConfig.Get(type);
|
if (!ItemConfig.Has(itemId))
|
return;
|
|
var dict = happyXBModel.GetXBGetItemByID(type);
|
bool isHaveGridIndex = TryGetGridIndexByItemId(itemId, out int gridIndex);
|
bool isLimit = TryGetLimitCount(xbInfo, gridIndex, out int limitCount);
|
if (model.TryGetItemBG(type, gridIndex, isLimit, out string str))
|
{
|
imgBg.SetSprite(str);
|
}
|
|
ItemConfig itemConfig = ItemConfig.Get(itemId);
|
imgItem.SetSprite(itemConfig.IconKey);
|
txtCount.text = count.ToString();
|
txtLimitCount.SetActive(false);
|
slider.SetActive(false);
|
|
btnItem.SetListener(() =>
|
{
|
ItemTipUtility.Show(itemId);
|
});
|
}
|
|
public bool IsLuckyGridNum(int type, int gridIndex)
|
{
|
if (!TreasureSetConfig.Has(type))
|
return false;
|
int luckyGridNum = TreasureSetConfig.Get(type).LuckyGridNum;
|
return luckyGridNum == gridIndex;
|
}
|
|
// 是限量有限制抽取次数的格子?
|
public bool TryGetLimitCount(XBTypeInfo xBTypeInfo, int gridIndex, out int limitCount)
|
{
|
limitCount = 0;
|
if (xBTypeInfo == null || xBTypeInfo.gridLimitCntDict == null)
|
return false;
|
if (xBTypeInfo.gridLimitCntDict.TryGetValue(gridIndex, out int count))
|
{
|
limitCount = count;
|
return true;
|
}
|
return false;
|
}
|
|
private bool TryGetGridIndexByItemId(int nowItemId, out int gridIndex)
|
{
|
gridIndex = 0;
|
OperationYunShi act;
|
OperationTimeHepler.Instance.TryGetOperation(YunShiXBActModel.operaType, out act);
|
if (act == null)
|
return false;
|
|
int type = act.treasureType;
|
var xbInfo = happyXBModel.GetXBInfoByType(type);
|
if (xbInfo == null)
|
return false;
|
|
var dict = happyXBModel.GetXBGetItemByID(type);
|
var list = dict.Keys.ToList();
|
for (int i = 0; i < list.Count; i++)
|
{
|
int key = list[i];
|
XBGetItem xBGetItem = dict[key];
|
if (xBGetItem.itemId == nowItemId)
|
{
|
gridIndex = xBGetItem.gridIndex;
|
return true;
|
}
|
}
|
return false;
|
}
|
}
|
}
|