| System/KnapSack/New/CommonItemBaisc.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/OpenServerActivity/CollectWordsCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/OpenServerActivity/CollectWordsModel.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/OpenServerActivity/CollectWordsWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
System/KnapSack/New/CommonItemBaisc.cs
@@ -85,7 +85,10 @@ if (m_SuitEffect == null) { LoadPrefab(); m_SuitEffect = EquipSuitEffect.Create(transform as RectTransform); //clone 会造成二次创建 m_SuitEffect = transform.GetComponentInChildren<EquipSuitEffect>(); if (m_SuitEffect == null) m_SuitEffect = EquipSuitEffect.Create(transform as RectTransform); } return m_SuitEffect; } @@ -98,7 +101,10 @@ if (m_ItemBaseEffect == null) { LoadPrefab(); m_ItemBaseEffect = ItemBaseEffect.Create(transform as RectTransform); //clone 会造成二次创建 m_ItemBaseEffect = transform.GetComponentInChildren<ItemBaseEffect>(); if (m_ItemBaseEffect == null) m_ItemBaseEffect = ItemBaseEffect.Create(transform as RectTransform); } return m_ItemBaseEffect; } @@ -109,6 +115,13 @@ GameObject cellContainer; protected void LoadPrefab() { //clone 会造成二次创建 var tmp = transform.Find("Container_ItemCell"); if (tmp != null) { cellContainer = tmp.gameObject; return; } if (cellContainer == null) { switch (format) System/OpenServerActivity/CollectWordsCell.cs
@@ -16,6 +16,9 @@ ItemCell itemCell; Image Img_Complete; LayoutGroup Layout; Transform CollectWord; int updateFrame = -1; CollectWordsModel model { @@ -35,6 +38,7 @@ itemCell = GetWidgt<ItemCell>("itemCell"); Img_Complete = GetWidgt<Image>("Img_Complete"); Layout = GetWidgt<LayoutGroup>("Layout"); CollectWord = GetWidgt<Transform>("CollectWord"); } @@ -69,7 +73,7 @@ GameObject go = null; if (i >= CollectLayout.childCount) { go = Instantiate(UILoader.LoadPrefab("ItemCell")); go = Instantiate(CollectWord.gameObject); go.transform.SetParent(CollectLayout); go.transform.localScale = Vector3.one; Vector3 pos = go.transform.localPosition; @@ -80,12 +84,15 @@ go = CollectLayout.GetChild(i).gameObject; } go.gameObject.SetActive(true); ItemCell item = go.GetComponent<ItemCell>(); item.format = ItemCellformat.Format_80x80; 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.gameObject.SetActive(true); if (cnt < itemCnt) { isEnough = false; @@ -110,6 +117,11 @@ ExChangeBtn.gameObject.SetActive(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); @@ -120,17 +132,38 @@ }); ExChangeCnt.text = Language.Get("CollectWordsLimit", exchangedCnt, maxNum); if (this.gameObject.activeInHierarchy) { StartCoroutine(UpdateLayout(CollectLayout as RectTransform)); StartCoroutine(UpdateLayout(Layout.GetComponent<RectTransform>())); } updateFrame = 0; } IEnumerator UpdateLayout(RectTransform rect) //layout contentsizefilter 镶嵌使用的情况下会发生位置未正常刷新的情况 //调用 ForceRebuildLayoutImmediate强制刷新,必须先刷父物体再刷子物体 //强制刷新在逻辑最后或者帧结束此处无效,故在update处理的下一帧刷新 //仅供参考,未分析具体原因和其他测试,只在此界面测试的情况 private void Update() { yield return new WaitForEndOfFrame(); LayoutRebuilder.ForceRebuildLayoutImmediate(rect); 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>()); } } } System/OpenServerActivity/CollectWordsModel.cs
@@ -37,9 +37,12 @@ public event Action ExChangeInfoUpdate; public event Action<int> onStateUpdate; //已兑换的记录 //已兑换的记录 编号:已兑换次数 public Dictionary<int, int> exchangeDict = new Dictionary<int, int>(); public List<int> wordsID = new List<int>(); //活动的所有搜集物品ID public byte actNum; //对应界面 PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } } public override void Init() { @@ -47,11 +50,15 @@ OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent; OperationTimeHepler.Instance.dayResetEvent += DayResetEvent; OpenServerActivityCenter.Instance.Register(regesitType, this); OperationTimeHepler.Instance.operationTimeUpdateEvent += operationTimeUpdateEvent; packModel.refreshItemCountEvent += RefreshItemCountEvent; } public void OnBeforePlayerDataInitialize() { exchangeDict.Clear(); wordsID.Clear(); } public void OnPlayerLoginOk() @@ -64,6 +71,9 @@ OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent; OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent -= operationTimeUpdateEvent; packModel.refreshItemCountEvent -= RefreshItemCountEvent; } private void DayResetEvent(int resetType) @@ -102,12 +112,46 @@ } } private void operationTimeUpdateEvent(Operation obj) { if (obj != collectWordsType) { return; } wordsID.Clear(); OperationCollectWords operation; if (OperationTimeHepler.Instance.TryGetOperation(collectWordsType, out operation)) { for (int i = 0; i < operation.exchangeWords.Count; i++) { var wordList = operation.exchangeWords[i]; for (int j = 0; j < wordList.NeedItemCount; j++) { int itemID = (int)wordList.NeedItemList[j].ItemID; if (!wordsID.Contains(itemID)) wordsID.Add(itemID); } } } } #region 服务端数据 private void RefreshItemCountEvent(PackType packType, int index, int itemId) { if (!wordsID.Contains(itemId)) return; UpdateRedpoint(); if (ExChangeInfoUpdate != null) { ExChangeInfoUpdate(); } } public void UpdateExchangeInfo(HAA41_tagMCActCollectWordsPlayerInfo package) { OperationCollectWords operation; if (OperationTimeHepler.Instance.TryGetOperation(Operation.CollectWords, out operation)) if (OperationTimeHepler.Instance.TryGetOperation(collectWordsType, out operation)) { if (operation.ActNum != package.ActNum) { @@ -127,12 +171,21 @@ } } //文字兑换奖励 public void SendExchangeWord(byte exchangeNum) { var sendInfo = new CAA09_tagCMActCollectWordsExchange(); sendInfo.ActNum = actNum; sendInfo.ExchangeNum = exchangeNum; GameNetSystem.Instance.SendInfo(sendInfo); } #endregion #region 红点 public Redpoint redpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20930); public bool isOpenWin = false; public int jumpIndex = 0; public void UpdateRedpoint() { redpoint.state = RedPointState.None; @@ -140,10 +193,36 @@ { return; } OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(collectWordsType, out operationBase)) jumpIndex = 0; OperationCollectWords operation; if (OperationTimeHepler.Instance.TryGetOperation(collectWordsType, out operation)) { redpoint.state = isOpenWin ? RedPointState.None : RedPointState.Simple; for (int i = 0; i < operation.exchangeWords.Count; i++) { var wordList = operation.exchangeWords[i]; if (exchangeDict[wordList.ExchangeNum] >= wordList.ExchangeCountMax) { continue; } var isEnough = true; for (int j = 0; j < wordList.NeedItemCount; j++) { int itemID = (int)wordList.NeedItemList[j].ItemID; var cnt = packModel.GetItemCountByID(PackType.Item, itemID); if (cnt < wordList.NeedItemList[j].ItemCount) { isEnough = false; break; } } if (isEnough) { redpoint.state = RedPointState.Simple; jumpIndex = i; return; } } } } #endregion System/OpenServerActivity/CollectWordsWin.cs
@@ -40,6 +40,7 @@ protected override void OnPreOpen() { model.ExChangeInfoUpdate += OnRefresh; Display(); } @@ -49,6 +50,7 @@ protected override void OnPreClose() { model.ExChangeInfoUpdate -= OnRefresh; } protected override void OnAfterClose() @@ -62,7 +64,10 @@ DisplayCollect(); } void OnRefresh() { collectScroll.m_Scorller.RefreshActiveCellViews(); } void DisplayCollect() { OperationCollectWords operation;