From b4f10943987cfce4a271d3be431f1fe57d57046a Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期二, 14 四月 2026 19:31:14 +0800
Subject: [PATCH] 602 坐骑优化-客户端 战马列表实现缓存,避免每次重新排序

---
 Main/System/Horse/HorseCarouselView.cs        |   14 ++------------
 Main/System/Horse/HorseManager.cs             |   23 +++++++++++++++++++++++
 Main/Config/PartialConfigs/HorseSkinConfig.cs |    4 ++++
 Main/System/Horse/HorseWin.cs                 |   14 ++------------
 4 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/Main/Config/PartialConfigs/HorseSkinConfig.cs b/Main/Config/PartialConfigs/HorseSkinConfig.cs
index a4ffee8..d60ccd4 100644
--- a/Main/Config/PartialConfigs/HorseSkinConfig.cs
+++ b/Main/Config/PartialConfigs/HorseSkinConfig.cs
@@ -4,6 +4,9 @@
     public static List<int> itemsList = new List<int>(); //鐨偆閬撳叿瑙i攣/鍗囨槦
     //鍧愰獞ID,鐨偆ID
     public static Dictionary<int, int> horseIDTohorseSkinIDDict = new();
+    //鐨偆ID,鍧愰獞ID (鍙嶅悜鏄犲皠)
+    public static Dictionary<int, int> skinIDToHorseIDDict = new();
+    
     protected override void OnConfigParseCompleted()
     {
 
@@ -18,6 +21,7 @@
         if (UnlockWay == 3)
         {
             horseIDTohorseSkinIDDict[UnlockValue] = SkinID;
+            skinIDToHorseIDDict[SkinID] = UnlockValue;
         }
     }
 
diff --git a/Main/System/Horse/HorseCarouselView.cs b/Main/System/Horse/HorseCarouselView.cs
index ef0914e..ddb25ff 100644
--- a/Main/System/Horse/HorseCarouselView.cs
+++ b/Main/System/Horse/HorseCarouselView.cs
@@ -56,18 +56,8 @@
             HorseItem item = go.GetComponent<HorseItem>();
             items.Add(item);
         }
-        // 鍔ㄦ�佽幏鍙栨墍鏈夊潗楠戦厤缃�
-        horseConfigs = HorseIDConfig.GetValues();
-        // 鎸塇orseSkinConfig鐨剆ortOrder鍜孲kinID鎺掑簭
-        horseConfigs = horseConfigs.OrderBy(c =>
-        {
-            int skinID = HorseSkinConfig.horseIDTohorseSkinIDDict.TryGetValue(c.HorseID, out var id) ? id : int.MaxValue;
-            var skinConfig = HorseSkinConfig.Get(skinID);
-            return skinConfig?.sortOrder ?? int.MaxValue;
-        }).ThenBy(c =>
-        {
-            return HorseSkinConfig.horseIDTohorseSkinIDDict.TryGetValue(c.HorseID, out var skinID) ? skinID : int.MaxValue;
-        }).ToList();
+        // 浣跨敤鎺掑簭缂撳瓨
+        horseConfigs = HorseManager.GetSortedHorseConfigs();
         
         // 鑾峰彇褰撳墠楠戜箻鍧愰獞鐨勭储寮�
         int currentHorseID = HorseManager.Instance.horseID;
diff --git a/Main/System/Horse/HorseManager.cs b/Main/System/Horse/HorseManager.cs
index b4b60d4..5af7aa5 100644
--- a/Main/System/Horse/HorseManager.cs
+++ b/Main/System/Horse/HorseManager.cs
@@ -39,6 +39,29 @@
     public int quickRankLV;
     public int defaultSkinID;
 
+    // 鎺掑簭鍚庣殑鍧愰獞閰嶇疆缂撳瓨
+    private static List<HorseIDConfig> sortedHorseConfigs;
+    
+    /// <summary>
+    /// 鑾峰彇鎺掑簭鍚庣殑鍧愰獞閰嶇疆鍒楄〃锛堝甫缂撳瓨锛�
+    /// </summary>
+    public static List<HorseIDConfig> GetSortedHorseConfigs()
+    {
+        if (sortedHorseConfigs == null)
+        {
+            sortedHorseConfigs = HorseIDConfig.GetValues().OrderBy(c =>
+            {
+                int skinID = HorseSkinConfig.horseIDTohorseSkinIDDict.TryGetValue(c.HorseID, out var id) ? id : int.MaxValue;
+                var skinConfig = HorseSkinConfig.Get(skinID);
+                return skinConfig?.sortOrder ?? int.MaxValue;
+            }).ThenBy(c =>
+            {
+                return HorseSkinConfig.horseIDTohorseSkinIDDict.TryGetValue(c.HorseID, out var skinID) ? skinID : int.MaxValue;
+            }).ToList();
+        }
+        return sortedHorseConfigs;
+    }
+
 
     public override void Init()
     {
diff --git a/Main/System/Horse/HorseWin.cs b/Main/System/Horse/HorseWin.cs
index 134a9eb..8d5fe3a 100644
--- a/Main/System/Horse/HorseWin.cs
+++ b/Main/System/Horse/HorseWin.cs
@@ -130,18 +130,8 @@
         if (carouselView != null)
         {
             int currentHorseID = HorseManager.Instance.horseID;
-            // 鍔ㄦ�佽幏鍙栨墍鏈夊潗楠戦厤缃�
-            var horseConfigs = HorseIDConfig.GetValues();
-            // 鎸塇orseSkinConfig鐨剆ortOrder鍜孲kinID鎺掑簭
-            horseConfigs = horseConfigs.OrderBy(c =>
-            {
-                int skinID = HorseSkinConfig.horseIDTohorseSkinIDDict.TryGetValue(c.HorseID, out var id) ? id : int.MaxValue;
-                var skinConfig = HorseSkinConfig.Get(skinID);
-                return skinConfig?.sortOrder ?? int.MaxValue;
-            }).ThenBy(c =>
-            {
-                return HorseSkinConfig.horseIDTohorseSkinIDDict.TryGetValue(c.HorseID, out var skinID) ? skinID : int.MaxValue;
-            }).ToList();
+            // 浣跨敤鎺掑簭缂撳瓨
+            var horseConfigs = HorseManager.GetSortedHorseConfigs();
 
             int index = horseConfigs.FindIndex(c => c.HorseID == currentHorseID);
             carouselView.InitWithHorse(index >= 0 ? index : 0);

--
Gitblit v1.8.0