From 520e953a380e6cb94d4789fac7f539bb7fb61878 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期二, 30 十二月 2025 20:24:01 +0800
Subject: [PATCH] 382 武将宿缘-客户端 总属性显示3行,可滚动

---
 Main/System/HeroFates/HeroFatesAttrCell.cs      |   43 ++++++++++++++
 Main/System/HeroFates/HeroFatesManager.cs       |    2 
 Main/System/HeroFates/HeroFatesWin.cs           |   48 +++++++++------
 Main/System/HeroFates/HeroFatesAttrCell.cs.meta |   11 +++
 Main/System/HeroFates/HeroFatesAttrItem.cs      |   11 +++
 Main/System/HeroFates/HeroFatesAttrItem.cs.meta |   11 +++
 6 files changed, 105 insertions(+), 21 deletions(-)

diff --git a/Main/System/HeroFates/HeroFatesAttrCell.cs b/Main/System/HeroFates/HeroFatesAttrCell.cs
new file mode 100644
index 0000000..6cfc2fb
--- /dev/null
+++ b/Main/System/HeroFates/HeroFatesAttrCell.cs
@@ -0,0 +1,43 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class HeroFatesAttrCell : MonoBehaviour
+{
+    [SerializeField] HeroFatesAttrItem[] items;
+
+    HeroFatesManager manager { get { return HeroFatesManager.Instance; } }
+
+    public void Display(int rowIndex, List<int> totalAttrIdList, Dictionary<int, long> totalAttrDict)
+    {
+        if (totalAttrIdList.IsNullOrEmpty() || totalAttrDict.IsNullOrEmpty())
+        {
+            return;
+        }
+
+        for (int i = 0; i < items.Length; i++)
+        {
+            int index = rowIndex * manager.attrRowCountMax + i;
+            if (index < totalAttrIdList.Count)
+            {
+                if (index >= totalAttrIdList.Count || index < 0)
+                {
+                    continue;
+                }
+                int attrId = totalAttrIdList[index];
+                if (!totalAttrDict.ContainsKey(attrId))
+                {
+                    continue;
+                }
+                long attrValue = totalAttrDict[attrId];
+
+                items[i].SetActive(true);
+                items[i].Display(attrId, attrValue);
+            }
+            else
+            {
+                items[i].SetActive(false);
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Main/System/HeroFates/HeroFatesAttrCell.cs.meta b/Main/System/HeroFates/HeroFatesAttrCell.cs.meta
new file mode 100644
index 0000000..4f820be
--- /dev/null
+++ b/Main/System/HeroFates/HeroFatesAttrCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bfad3efe8ed965a468b3d10078e23014
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/HeroFates/HeroFatesAttrItem.cs b/Main/System/HeroFates/HeroFatesAttrItem.cs
new file mode 100644
index 0000000..18c7487
--- /dev/null
+++ b/Main/System/HeroFates/HeroFatesAttrItem.cs
@@ -0,0 +1,11 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class HeroFatesAttrItem : MonoBehaviour
+{
+    [SerializeField] TextEx txtAttr;
+    public void Display(int attrID, long attrValue)
+    {
+        txtAttr.text = PlayerPropertyConfig.GetFullDescription(attrID, attrValue);
+    }
+}
\ No newline at end of file
diff --git a/Main/System/HeroFates/HeroFatesAttrItem.cs.meta b/Main/System/HeroFates/HeroFatesAttrItem.cs.meta
new file mode 100644
index 0000000..38b23d5
--- /dev/null
+++ b/Main/System/HeroFates/HeroFatesAttrItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0c43efa49cf2f564a8acdc3ec0e57eea
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/HeroFates/HeroFatesManager.cs b/Main/System/HeroFates/HeroFatesManager.cs
index 0e9d832..a001ede 100644
--- a/Main/System/HeroFates/HeroFatesManager.cs
+++ b/Main/System/HeroFates/HeroFatesManager.cs
@@ -6,7 +6,7 @@
 public class HeroFatesManager : GameSystemManager<HeroFatesManager>
 {
     public readonly int rowCountMax = 5;
-
+    public readonly int attrRowCountMax = 3;
     public override void Init()
     {
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
diff --git a/Main/System/HeroFates/HeroFatesWin.cs b/Main/System/HeroFates/HeroFatesWin.cs
index 6a2e7d3..a8182a9 100644
--- a/Main/System/HeroFates/HeroFatesWin.cs
+++ b/Main/System/HeroFates/HeroFatesWin.cs
@@ -1,3 +1,4 @@
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using UnityEngine;
@@ -5,7 +6,7 @@
 public class HeroFatesWin : UIBase
 {
     [SerializeField] ScrollerController scroller;
-    [SerializeField] List<TextEx> attrs;
+    [SerializeField] ScrollerController attrScroller;
     HeroFatesManager manager { get { return HeroFatesManager.Instance; } }
     protected override void InitComponent()
     {
@@ -15,6 +16,7 @@
     protected override void OnPreOpen()
     {
         scroller.OnRefreshCell += OnRefreshCell;
+        attrScroller.OnRefreshCell += OnRefreshAttrCell;
         manager.OnUpdateHeroFatesInfoEvent += OnUpdateHeroFatesInfo;
         CreateScoller();
 
@@ -22,19 +24,26 @@
         manager.HasShowRedDotFates(out firstIndex);
         scroller.JumpIndex(firstIndex);
 
-        DisplayAttrs();
+        CreateAttrScoller();
     }
 
     protected override void OnPreClose()
     {
         scroller.OnRefreshCell -= OnRefreshCell;
+        attrScroller.OnRefreshCell -= OnRefreshAttrCell;
         manager.OnUpdateHeroFatesInfoEvent -= OnUpdateHeroFatesInfo;
+    }
+
+    private void OnRefreshAttrCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell.GetComponent<HeroFatesAttrCell>();
+        _cell?.Display(cell.index, totalAttrIdList, totalAttrDict);
     }
 
     private void OnUpdateHeroFatesInfo()
     {
         RefeshScoller();
-        DisplayAttrs();
+        CreateAttrScoller();
     }
     List<int> fatesIDList = new List<int>();
     private void OnRefreshCell(ScrollerDataType type, CellView cell)
@@ -62,29 +71,28 @@
         scroller.m_Scorller.RefreshActiveCellViews();
     }
 
-    void DisplayAttrs()
+    List<int> totalAttrIdList = new List<int>();
+    Dictionary<int, long> totalAttrDict = new Dictionary<int, long>();
+    void CreateAttrScoller()
     {
-        Dictionary<int, long> totalAttrDict = manager.GetTotalAttr();
-        if (attrs.IsNullOrEmpty() || totalAttrDict.IsNullOrEmpty())
+        totalAttrDict = manager.GetTotalAttr();
+        if (totalAttrDict.IsNullOrEmpty())
             return;
-        List<int> totalAttrIdList = totalAttrDict.Keys
-            .OrderByDescending(attrID => totalAttrDict[attrID] > 0)  // 灞炴�у��>0鐨勬帓鍓嶉潰
-            .ThenBy(attrID => attrID)  // 鐒跺悗鎸塧ttrID鍗囧簭
-            .ToList();
-        for (int i = 0; i < attrs.Count; i++)
+        totalAttrIdList = totalAttrDict.Keys
+           .OrderByDescending(attrID => totalAttrDict[attrID] > 0)  // 灞炴�у��>0鐨勬帓鍓嶉潰
+           .ThenBy(attrID => attrID)  // 鐒跺悗鎸塧ttrID鍗囧簭
+           .ToList();
+
+        attrScroller.Refresh();
+        if (!totalAttrIdList.IsNullOrEmpty())
         {
-            if (i < totalAttrDict.Count)
+            int rowCount = Mathf.CeilToInt((float)totalAttrIdList.Count / manager.attrRowCountMax);
+            for (int i = 0; i < rowCount; i++)
             {
-                int attrID = totalAttrIdList[i];
-                long attrValue = totalAttrDict[attrID];
-                attrs[i].text = PlayerPropertyConfig.GetFullDescription(attrID, attrValue);
-                attrs[i].SetActive(true);
-            }
-            else
-            {
-                attrs[i].SetActive(false);
+                attrScroller.AddCell(ScrollerDataType.Header, i);
             }
         }
+        attrScroller.Restart();
     }
 
 }
\ No newline at end of file

--
Gitblit v1.8.0