Browse Source

优化道友界面加载速度

lzx 1 ngày trước cách đây
mục cha
commit
30fa7ed4c4

+ 8 - 0
Assets/Scripts/Core/CTask/CTaskAwaitBufferT.cs

@@ -31,6 +31,14 @@ namespace Fort23.Core
             return _results.ToArray();
             
         }
+        
+        public List<T> GetResultsLists()
+        {
+
+            
+            return _results.ToList();
+            
+        }
 
         public void Clear()
         {

+ 1 - 1
Assets/Scripts/GameLogic/Player/AccountFileInfo.cs

@@ -281,7 +281,7 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
         /// <summary>
         /// 经验
         /// </summary>
-        public int exp;
+        public float exp;
 
         /// <summary>
         /// 已经领取奖励的好感等级

+ 93 - 33
Assets/Scripts/GameUI/UI/DaoYouPanel/DaoYouInfoPanel.cs

@@ -17,7 +17,7 @@ namespace Fort23.Mono
 
         private DaoyouModelConfig _daoyouModelConfig;
 
-        private WidgetItem currentSelectWidgetItem;
+        private ItemInfo currentSelectWidgetItem;
 
         List<WidgetItem> widgetItems = new List<WidgetItem>();
         List<WidgetItem> giveWidgetItems = new List<WidgetItem>();
@@ -161,13 +161,13 @@ namespace Fort23.Mono
                         //喜好礼物翻倍
                         if (_daoyouModelConfig.PreferGiftID.Contains(daoyouGiftConfig.ItemID))
                         {
-                            daoYouData.exp += (int)(daoyouGiftConfig.emotionValue * bl * 0.001f *
-                                                    PlayerManager.Instance.gameConstantConfig.daolvfavoratePara *
-                                                    0.01f);
+                            daoYouData.exp += (daoyouGiftConfig.emotionValue * bl * 0.001f *
+                                               PlayerManager.Instance.gameConstantConfig.daolvfavoratePara *
+                                               0.01f);
                         }
                         else
                         {
-                            daoYouData.exp += (int)(daoyouGiftConfig.emotionValue * bl * 0.001f);
+                            daoYouData.exp += (daoyouGiftConfig.emotionValue * bl * 0.001f);
                         }
                     }
 
@@ -181,6 +181,10 @@ namespace Fort23.Mono
                             daoYouData.exp -= configs[i].exp;
                             daoYouData.favorabilityLv++;
                         }
+                        else
+                        {
+                            break;
+                        }
                     }
 
                     AudioManager.Instance.PlayAudio("ui_shiyonghuode");
@@ -326,54 +330,92 @@ namespace Fort23.Mono
             DaoyouLevelupConfig[] configs = ConfigComponent.Instance.GetAll<DaoyouLevelupConfig>();
             if (daoYouData.favorabilityLv >= configs.Length)
             {
-                Text_Exp.text = $"{daoYouData.exp}/MAX";
+                Text_Exp.text = $"{daoYouData.exp.ToString("0.0")}/MAX";
             }
             else
             {
-                Text_Exp.text = $"{daoYouData.exp}/{currentDaoyouLevelupConfig.exp}";
+                Text_Exp.text = $"{daoYouData.exp.ToString("0.0")}/{currentDaoyouLevelupConfig.exp}";
             }
 
 
             Slider_LeveUp.value = daoYouData.exp;
 
+            CTaskAwaitBuffer taskAwaitBuffer = new CTaskAwaitBuffer();
+
+            CTaskAwaitBuffer<WidgetItem> cts = null;
             if (_daoyouModelConfig.PreferGiftID != null)
             {
+                cts = new CTaskAwaitBuffer<WidgetItem>();
                 foreach (var i in _daoyouModelConfig.PreferGiftID)
                 {
-                    WidgetItem widgetItem =
-                        await UIManager.Instance.CreateGComponent<WidgetItem>(null, LoveItemContent);
-                    widgetItems.Add(widgetItem);
-                    if (_daoyouModelConfig.shownPreferGiftID.Contains(i) ||
-                        (daoYouData != null && daoYouData.loveIds.Contains(i)))
+                    cts.AddTask(UIManager.Instance.CreateGComponent<WidgetItem>(null, LoveItemContent));
+                }
+
+
+                taskAwaitBuffer.AddTask(cts.WaitAll());
+            }
+
+            CTaskAwaitBuffer<DaoYouaaFfixWidget> cts2 = null;
+
+            if (_daoyouModelConfig.daolvSkillID != null)
+            {
+                cts2 = new CTaskAwaitBuffer<DaoYouaaFfixWidget>();
+                for (var i = 0; i < _daoyouModelConfig.daolvSkillID.Length; i++)
+                {
+                    cts2.AddTask(UIManager.Instance.CreateGComponent<DaoYouaaFfixWidget>(null, DaoLvContent));
+                }
+
+                taskAwaitBuffer.AddTask(cts2.WaitAll());
+            }
+
+            CTaskAwaitBuffer<DaoYouLevelWidget> cts1 = new CTaskAwaitBuffer<DaoYouLevelWidget>();
+            foreach (var daoyouLevelupConfig in configs)
+            {
+                cts1.AddTask(UIManager.Instance.CreateGComponent<DaoYouLevelWidget>(null, DaoYouLevelWidgetContent));
+            }
+
+            taskAwaitBuffer.AddTask(cts1.WaitAll());
+
+            await taskAwaitBuffer.WaitAll();
+
+            if (_daoyouModelConfig.PreferGiftID != null)
+            {
+                widgetItems = cts.GetResultsLists();
+
+                for (var i = 0; i < _daoyouModelConfig.PreferGiftID.Length; i++)
+                {
+                    if (_daoyouModelConfig.shownPreferGiftID.Contains(_daoyouModelConfig.PreferGiftID[i]) ||
+                        (daoYouData != null && daoYouData.loveIds.Contains(_daoyouModelConfig.PreferGiftID[i])))
                     {
-                        widgetItem.InitWidget(new ItemInfo(i, 0));
+                        widgetItems[i].InitWidget(new ItemInfo(_daoyouModelConfig.PreferGiftID[i], 0));
                     }
                     else
                     {
-                        widgetItem.ShowWenhao();
+                        widgetItems[i].ShowWenhao();
                     }
                 }
             }
 
+
             if (_daoyouModelConfig.daolvSkillID != null)
             {
-                foreach (var i in _daoyouModelConfig.daolvSkillID)
+                daoYouaaFfixWidgets = cts2.GetResultsLists();
+                for (var i = 0; i < _daoyouModelConfig.daolvSkillID.Length; i++)
                 {
-                    DaoYouaaFfixWidget daoYouaaFfixWidge =
-                        await UIManager.Instance.CreateGComponent<DaoYouaaFfixWidget>(null, DaoLvContent);
-                    daoYouaaFfixWidge.CustomInit(i);
-                    daoYouaaFfixWidgets.Add(daoYouaaFfixWidge);
+                    daoYouaaFfixWidgets[i].CustomInit(_daoyouModelConfig.daolvSkillID[i]);
                 }
             }
 
-
-            foreach (var daoyouLevelupConfig in configs)
+            _daoYouLevelWidgets = cts1.GetResultsLists();
+            for (var i = 0; i < configs.Length; i++)
             {
-                DaoYouLevelWidget daoYouLevelWidget =
-                    await UIManager.Instance.CreateGComponent<DaoYouLevelWidget>(null, DaoYouLevelWidgetContent);
-                daoYouLevelWidget.CustomInit(daoYouData, daoyouLevelupConfig.ID);
-                _daoYouLevelWidgets.Add(daoYouLevelWidget);
+                _daoYouLevelWidgets[i].CustomInit(daoYouData, configs[i].ID);
             }
+
+            taskAwaitBuffer?.Dispose();
+            cts?.Dispose();
+            cts1?.Dispose();
+            cts2?.Dispose();
         }
 
 
@@ -432,14 +474,20 @@ namespace Fort23.Mono
 
         private async CTask CreatItem(List<ItemInfo> shownItems)
         {
-            // ClosePoolGive();
+            using (CTaskAwaitBuffer<WidgetItem> cts = new CTaskAwaitBuffer<WidgetItem>())
+            {
+                foreach (var itemInfo in shownItems)
+                {
+                    cts.AddTask(UIManager.Instance.CreateGComponent<WidgetItem>(null, GiveGiftContent));
+                }
+
+                giveWidgetItems = await cts.WaitAll();
+            }
 
-            foreach (var itemInfo in shownItems)
+            for (var i = 0; i < shownItems.Count; i++)
             {
-                WidgetItem widgetItem = await UIManager.Instance.CreateGComponent<WidgetItem>(null, GiveGiftContent);
-                widgetItem.InitWidget(itemInfo, false);
-                widgetItem.OnClick = OnClick;
-                giveWidgetItems.Add(widgetItem);
+                giveWidgetItems[i].InitWidget(shownItems[i], false);
+                giveWidgetItems[i].OnClick = OnClick;
             }
 
 
@@ -447,7 +495,19 @@ namespace Fort23.Mono
             {
                 if (currentSelectWidgetItem != null)
                 {
-                    currentSelectWidgetItem.OnPointerClick();
+                    bool isHave = false;
+                    foreach (var giveWidgetItem in giveWidgetItems)
+                    {
+                        if (giveWidgetItem.itemInfo == currentSelectWidgetItem)
+                        {
+                            giveWidgetItem.OnPointerClick();
+                            isHave = true;
+                            break;
+                        }
+                    }
+
+                    if(!isHave)
+                        giveWidgetItems[0].OnPointerClick();
                 }
                 else
                 {
@@ -463,7 +523,7 @@ namespace Fort23.Mono
         private async void OnClick(ItemWidgetBasic obj)
         {
             WidgetItem widgetItem = obj as WidgetItem;
-            currentSelectWidgetItem = widgetItem;
+            currentSelectWidgetItem = widgetItem.itemInfo;
             if (widgetItem1 == null)
             {
                 widgetItem1 = await UIManager.Instance.CreateGComponent<WidgetItem>(null, WidgetItemRoot);

+ 15 - 5
Assets/Scripts/GameUI/UI/DaoYouPanel/DaoYouPanel.cs

@@ -52,13 +52,23 @@ namespace Fort23.Mono
             daoYouWidgets.Clear();
 
             DaoyouModelConfig[] daoyouModelConfigs = ConfigComponent.Instance.GetAll<DaoyouModelConfig>();
-            foreach (var daoyouModelConfig in daoyouModelConfigs)
+
+            using (CTaskAwaitBuffer<DaoYouWidget> cts = new CTaskAwaitBuffer<DaoYouWidget>())
+            {
+                foreach (var daoyouModelConfig in daoyouModelConfigs)
+                {
+                    cts.AddTask(UIManager.Instance.CreateGComponent<DaoYouWidget>(null, Content));
+                }
+
+                daoYouWidgets = await cts.WaitAll();
+            }
+            
+            for (var i = 0; i < daoyouModelConfigs.Length; i++)
             {
-                DaoYouWidget daoYouWidget = await UIManager.Instance.CreateGComponent<DaoYouWidget>(null, Content);
-                daoYouWidget.CustomInit(daoyouModelConfig.ID);
-                daoYouWidget.OnClick = OnClick;
-                daoYouWidgets.Add(daoYouWidget);
+                daoYouWidgets[i].CustomInit(daoyouModelConfigs[i].ID);
+                daoYouWidgets[i].OnClick = OnClick;
             }
+      
         }
 
         private void OnClick(ItemWidgetBasic obj)

+ 1 - 1
Assets/Scripts/GameUI/UI/DaoYouPanel/DaoYouWidget.cs

@@ -34,7 +34,7 @@ namespace Fort23.Mono
         {
             _daoyouModelConfig = ConfigComponent.Instance.Get<DaoyouModelConfig>(configId);
             _daoYouData = AccountFileInfo.Instance.playerData.daoYouDatas.FirstOrDefault(dy => dy.id == configId);
-            Icon_Daoyou.icon_name = _daoyouModelConfig.bodyIcon;
+            Icon_Daoyou.icon_name = _daoyouModelConfig.headIcon;
 
             Text_Name.text = LanguageManager.Instance.Text(_daoyouModelConfig.name);
             if (_daoYouData != null)

+ 4 - 0
Assets/Scripts/GameUI/UI/RewardsPanel/WidgetItem.cs

@@ -121,6 +121,10 @@ namespace Fort23.Mono
                 {
                     icon.icon_name = "dec_gfbook_tu";
                 }
+                else if (skillConfig.attribute == 0)
+                {
+                    icon.icon_name = "dec_gfbook_fuzhu";
+                }
 
                 Icon_Item2.gameObject.SetActive(false);
                 Icon_Skill.gameObject.SetActive(true);