| using System.Collections; | 
| using System.Collections.Generic; | 
|   | 
| using UnityEngine; | 
| using UnityEngine.UI; | 
| using vnxbqy.UI; | 
|   | 
| namespace vnxbqy.UI | 
| { | 
|      | 
|     public class CollectWordsCell : CellView | 
|     { | 
|         Button ExChangeBtn; | 
|         Text ExChangeCnt; | 
|         Transform CollectLayout; | 
|         ItemCell itemCell; | 
|         Image Img_Complete; | 
|         LayoutGroup Layout; | 
|         Transform CollectWord; | 
|   | 
|         int updateFrame = -1; | 
|   | 
|         CollectWordsModel model | 
|         { | 
|             get { return ModelCenter.Instance.GetModel<CollectWordsModel>(); } | 
|         } | 
|         PackModel packModel | 
|         { | 
|             get { return ModelCenter.Instance.GetModel<PackModel>(); } | 
|         } | 
|   | 
|         protected override void Awake() | 
|         { | 
|             base.Awake(); | 
|             ExChangeBtn = GetWidgt<Button>("ExChangeBtn"); | 
|             ExChangeCnt = GetWidgt<Text>("ExChangeCnt"); | 
|             CollectLayout = GetWidgt<Transform>("CollectLayout"); | 
|             itemCell = GetWidgt<ItemCell>("itemCell"); | 
|             Img_Complete = GetWidgt<Image>("Img_Complete"); | 
|             Layout = GetWidgt<LayoutGroup>("Layout"); | 
|             CollectWord = GetWidgt<Transform>("CollectWord"); | 
|         } | 
|   | 
|   | 
|   | 
|         //按钮 | 
|         //数量不足    按钮灰色不可点击 (0代表不限制兑换次数) | 
|         //可兑换      按钮亮起可点击 | 
|         //达兑换上限  隐藏按钮显示上限 | 
|         public void Display(int index) | 
|         { | 
|             OperationCollectWords operation; | 
|             if (!OperationTimeHepler.Instance.TryGetOperation(Operation.CollectWords, out operation)) | 
|             { | 
|                 return; | 
|             } | 
|             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 = 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.SetActive(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).SetActive(false); | 
|             } | 
|   | 
|             int exchangedCnt; //已兑换次数 | 
|             model.exchangeDict.TryGetValue(exchangeNum, out exchangedCnt); | 
|   | 
|             Img_Complete.SetActive(maxNum != 0 && exchangedCnt >= maxNum); | 
|             ExChangeBtn.SetActive(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处理的下一帧刷新 | 
|         //仅供参考,未分析具体原因和其他测试,只在此界面测试的情况 | 
|         private 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>()); | 
|             } | 
|   | 
|         } | 
|   | 
|     } | 
| } |