lcy
14 小时以前 b4f10943987cfce4a271d3be431f1fe57d57046a
602 坐骑优化-客户端 战马列表实现缓存,避免每次重新排序
4个文件已修改
55 ■■■■■ 已修改文件
Main/Config/PartialConfigs/HorseSkinConfig.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Horse/HorseCarouselView.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Horse/HorseManager.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Horse/HorseWin.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/PartialConfigs/HorseSkinConfig.cs
@@ -4,6 +4,9 @@
    public static List<int> itemsList = new List<int>(); //皮肤道具解锁/升星
    //坐骑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;
        }
    }
Main/System/Horse/HorseCarouselView.cs
@@ -56,18 +56,8 @@
            HorseItem item = go.GetComponent<HorseItem>();
            items.Add(item);
        }
        // 动态获取所有坐骑配置
        horseConfigs = HorseIDConfig.GetValues();
        // 按HorseSkinConfig的sortOrder和SkinID排序
        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;
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()
    {
Main/System/Horse/HorseWin.cs
@@ -130,18 +130,8 @@
        if (carouselView != null)
        {
            int currentHorseID = HorseManager.Instance.horseID;
            // 动态获取所有坐骑配置
            var horseConfigs = HorseIDConfig.GetValues();
            // 按HorseSkinConfig的sortOrder和SkinID排序
            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);