using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
using UnityEngine.UI;
|
using vnxbqy.UI;
|
|
|
public class MergeServerCollectWordsCell : ILBehaviour
|
{
|
Button ExChangeBtn;
|
Text ExChangeCnt;
|
Transform CollectLayout;
|
ItemCell itemCell;
|
Image Img_Complete;
|
LayoutGroup Layout;
|
Transform CollectWord;
|
|
int updateFrame = -1;
|
|
MergeServerCollectWordsModel model = MergeServerCollectWordsModel.Instance;
|
|
PackModel packModel
|
{
|
get { return ModelCenter.Instance.GetModelEx<PackModel>(); }
|
}
|
|
protected override void Awake()
|
{
|
base.Awake();
|
ExChangeBtn = proxy.GetWidgtEx<Button>("ExChangeBtn");
|
ExChangeCnt = proxy.GetWidgtEx<Text>("ExChangeCnt");
|
CollectLayout = proxy.GetWidgtEx<Transform>("CollectLayout");
|
itemCell = proxy.GetWidgtEx<ItemCell>("itemCell");
|
Img_Complete = proxy.GetWidgtEx<Image>("Img_Complete");
|
Layout = proxy.GetWidgtEx<LayoutGroup>("Layout");
|
CollectWord = proxy.GetWidgtEx<Transform>("CollectWord");
|
}
|
|
|
|
//按钮
|
//数量不足 按钮灰色不可点击 (0代表不限制兑换次数)
|
//可兑换 按钮亮起可点击
|
//达兑换上限 隐藏按钮显示上限
|
public void Display(int index)
|
{
|
OperationBase operationBase = null;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(model.collectWordsType, out operationBase))
|
{
|
return;
|
}
|
OperationCollectWords operation = operationBase as OperationCollectWords;
|
if (index >= operation.exchangeWords.Count)
|
{
|
return;
|
}
|
|
var exchangeNum = operation.exchangeWords[index].ExchangeNum; //编号
|
var maxNum = operation.exchangeWords[index].ExchangeCountMax;
|
|
bool isEnough = true; //是否能兑换
|
//物品
|
for (int i = 0; i < operation.exchangeWords[index].NeedItemCount; i++)
|
{
|
var itemID = (int)operation.exchangeWords[index].NeedItemList[i].ItemID;
|
var itemCnt = operation.exchangeWords[index].NeedItemList[i].ItemCount;
|
var isBind = operation.exchangeWords[index].NeedItemList[i].IsBind;
|
|
GameObject go = null;
|
if (i >= CollectLayout.childCount)
|
{
|
go = GameObject.Instantiate(CollectWord.gameObject);
|
go.transform.SetParent(CollectLayout);
|
go.transform.localScale = Vector3.one;
|
Vector3 pos = go.transform.localPosition;
|
go.transform.localPosition = pos.SetZ(0);
|
}
|
else
|
{
|
go = CollectLayout.GetChild(i).gameObject;
|
}
|
go.SetActive(true);
|
|
RichText richText = go.GetComponentInChildren<RichText>();
|
richText.text = Language.Get("GoToGet", itemID);
|
ItemCell item = go.GetComponentInChildren<ItemCell>();
|
var cnt = packModel.GetItemCountByID(PackType.Item, itemID);
|
ItemCellModel cellModel = new ItemCellModel(itemID);
|
item.Init(cellModel);
|
item.countText.text = cnt + "/" + itemCnt;
|
item.countText.SetActiveIL(true);
|
if (cnt < itemCnt)
|
{
|
isEnough = false;
|
}
|
item.button.RemoveAllListeners();
|
item.button.AddListener(() =>
|
{
|
ItemTipUtility.Show(itemID);
|
});
|
}
|
|
// cell是共用的 拖拉之后 childCount产生变化,需要屏蔽
|
for (int i = operation.exchangeWords[index].NeedItemCount; i < CollectLayout.childCount; i++)
|
{
|
CollectLayout.GetChild(i).SetActiveIL(false);
|
}
|
|
int exchangedCnt; //已兑换次数
|
model.exchangeDict.TryGetValue(exchangeNum, out exchangedCnt);
|
|
Img_Complete.SetActiveIL(maxNum != 0 && exchangedCnt >= maxNum);
|
ExChangeBtn.SetActiveIL(maxNum == 0 || exchangedCnt < maxNum);
|
ExChangeBtn.SetColorful(null, isEnough);
|
ExChangeBtn.interactable = isEnough;
|
ExChangeBtn.AddListener(() =>
|
{
|
model.SendExchangeWord(exchangeNum);
|
});
|
|
var tagItemID = (int)operation.exchangeWords[index].ItemID;
|
ItemCellModel tagCellModel = new ItemCellModel(tagItemID, false, (ulong)operation.exchangeWords[index].ItemCount);
|
itemCell.Init(tagCellModel);
|
itemCell.button.RemoveAllListeners();
|
itemCell.button.AddListener(() =>
|
{
|
ItemTipUtility.Show(tagItemID);
|
});
|
|
if (maxNum != 0)
|
ExChangeCnt.text = Language.Get("CollectWordsLimit", exchangedCnt, maxNum);
|
else
|
ExChangeCnt.text = Language.Get("DailyQuest_NoLevelLimit");
|
|
updateFrame = 0;
|
}
|
|
|
//layout contentsizefilter 镶嵌使用的情况下会发生位置未正常刷新的情况
|
//调用 ForceRebuildLayoutImmediate强制刷新,必须先刷父物体再刷子物体
|
//强制刷新在逻辑最后或者帧结束此处无效,故在update处理的下一帧刷新
|
//仅供参考,未分析具体原因和其他测试,只在此界面测试的情况
|
protected override void Update()
|
{
|
if (updateFrame < 0) return;
|
if (updateFrame >= 0)
|
{
|
updateFrame++;
|
}
|
//在之后的帧刷新
|
if (updateFrame != 1)
|
{
|
if (updateFrame > 2)
|
{
|
updateFrame = -1;
|
}
|
return;
|
}
|
LayoutRebuilder.ForceRebuildLayoutImmediate(Layout.GetComponent<RectTransform>());
|
for (int i = 0; i < Layout.transform.childCount; i++)
|
{
|
LayoutRebuilder.ForceRebuildLayoutImmediate(Layout.transform.GetChild(i).GetComponent<RectTransform>());
|
}
|
|
}
|
|
}
|