少年修仙传客户端代码仓库
hch
2025-06-12 204ef05a831c9484e2abc561d27ecbff7c797453
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
 
namespace vnxbqy.UI
{
    public class YunShiXBItem : MonoBehaviour
    {
        [SerializeField] ImageEx imgBg;
        [SerializeField] ImageEx imgItem;
        [SerializeField] TextEx txtCount;
        [SerializeField] TextEx txtLimitCount;
        [SerializeField] Slider slider;
        [SerializeField] TextEx txtExpCount;
        [SerializeField] ButtonEx btnItem;
        HappyXBModel happyXBModel { get { return ModelCenter.Instance.GetModelEx<HappyXBModel>(); } }
        YunShiXBActModel model { get { return ModelCenter.Instance.GetModelEx<YunShiXBActModel>(); } }
 
        public void Display(int gridIndex)
        {
            OperationYunShi act;
            OperationTimeHepler.Instance.TryGetOperation(YunShiXBActModel.operaType, out act);
            if (act == null)
                return;
 
            int type = act.treasureType;
            var xbInfo = happyXBModel.GetXBInfoByType(type);
            if (xbInfo == null)
                return;
 
            XBGetItemConfig xbGetItemConfig = happyXBModel.GetXBItemConfigByType(type);
            if (xbGetItemConfig == null)
                return;
 
            int[][] GridItemRateList = xbGetItemConfig.GridItemRateList1;
            if (GridItemRateList.IsNullOrEmpty())
                return;
 
            Dictionary<int, int> rateDict = ConfigParse.GetRateDict(GridItemRateList);
            if (rateDict.IsNullOrEmpty())
                return;
 
            var dict = happyXBModel.GetXBGetItemByID(type);
            if (!dict.TryGetValue(gridIndex, out var info))
                return;
 
            if (!ItemConfig.Has(info.itemId))
                return;
 
            if (!TreasureSetConfig.Has(type))
                return;
            TreasureSetConfig treasureSetConfig = TreasureSetConfig.Get(type);
 
            ItemConfig itemConfig = ItemConfig.Get(info.itemId);
            imgItem.SetSprite(itemConfig.IconKey);
            txtCount.text = info.count.ToString();
 
            //如果不配置功能配置表,默认限量的配红,其它普通的配蓝
            //如果功能配置表有这个格子的配置,优先功能配置表的配置
            bool isLimit = TryGetLimitCount(xbInfo, gridIndex, out int limitCount);
            bool isLuckyGridNum = IsLuckyGridNum(type, gridIndex);
 
            if (model.TryGetItemBG(type, gridIndex, isLimit, out string str))
            {
                imgBg.SetSprite(str);
            }
 
            var xbLimitMaxCountDict = model.GetXbLimitMaxCountDict(treasureSetConfig.GridNumMaxLimitInfo);
 
            txtLimitCount.SetActive(isLimit);
            if (isLimit && xbLimitMaxCountDict.TryGetValue(gridIndex, out int limitMaxCount))
            {
                txtLimitCount.text = Language.Get("YunShi05", StringUtility.Contact(limitCount, "/", limitMaxCount));
            }
 
            slider.SetActive(isLimit && isLuckyGridNum);
            if (isLimit && isLuckyGridNum)
            {
                txtExpCount.text = StringUtility.Contact(xbInfo.luckValue, "/", treasureSetConfig.FullLucky);
                slider.value = Mathf.Floor((xbInfo.luckValue / (float)treasureSetConfig.FullLucky) * 1000f) / 1000f;
            }
 
            btnItem.SetListener(() =>
            {
                ItemTipUtility.Show(info.itemId);
            });
        }
 
        public void Display(int itemId, int count)
        {
            OperationYunShi act;
            OperationTimeHepler.Instance.TryGetOperation(YunShiXBActModel.operaType, out act);
            if (act == null)
                return;
 
            int type = act.treasureType;
            var xbInfo = happyXBModel.GetXBInfoByType(type);
            if (xbInfo == null)
                return;
 
            TreasureSetConfig treasureSetConfig = TreasureSetConfig.Get(type);
            if (!ItemConfig.Has(itemId))
                return;
 
            var dict = happyXBModel.GetXBGetItemByID(type);
            bool isHaveGridIndex = TryGetGridIndexByItemId(itemId, out int gridIndex);
            bool isLimit = TryGetLimitCount(xbInfo, gridIndex, out int limitCount);
            if (model.TryGetItemBG(type, gridIndex, isLimit, out string str))
            {
                imgBg.SetSprite(str);
            }
 
            ItemConfig itemConfig = ItemConfig.Get(itemId);
            imgItem.SetSprite(itemConfig.IconKey);
            txtCount.text = count.ToString();
            txtLimitCount.SetActive(false);
            slider.SetActive(false);
 
            btnItem.SetListener(() =>
            {
                ItemTipUtility.Show(itemId);
            });
        }
 
        public bool IsLuckyGridNum(int type, int gridIndex)
        {
            if (!TreasureSetConfig.Has(type))
                return false;
            int luckyGridNum = TreasureSetConfig.Get(type).LuckyGridNum;
            return luckyGridNum == gridIndex;
        }
 
        // 是限量有限制抽取次数的格子?
        public bool TryGetLimitCount(XBTypeInfo xBTypeInfo, int gridIndex, out int limitCount)
        {
            limitCount = 0;
            if (xBTypeInfo == null || xBTypeInfo.gridLimitCntDict == null)
                return false;
            if (xBTypeInfo.gridLimitCntDict.TryGetValue(gridIndex, out int count))
            {
                limitCount = count;
                return true;
            }
            return false;
        }
 
        private bool TryGetGridIndexByItemId(int nowItemId, out int gridIndex)
        {
            gridIndex = 0;
            OperationYunShi act;
            OperationTimeHepler.Instance.TryGetOperation(YunShiXBActModel.operaType, out act);
            if (act == null)
                return false;
 
            int type = act.treasureType;
            var xbInfo = happyXBModel.GetXBInfoByType(type);
            if (xbInfo == null)
                return false;
 
            var dict = happyXBModel.GetXBGetItemByID(type);
            var list = dict.Keys.ToList();
            for (int i = 0; i < list.Count; i++)
            {
                int key = list[i];
                XBGetItem xBGetItem = dict[key];
                if (xBGetItem.itemId == nowItemId)
                {
                    gridIndex = xBGetItem.gridIndex;
                    return true;
                }
            }
            return false;
        }
    }
}