chenxin
2020-11-27 c49c0e39e4c11a438014a0b0732ecf0968fceb5e
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
using UnityEngine;
 
/// <summary>
/// 子弹充能对应的数据结构.
/// </summary>
public class BulletUICtl : MonoBehaviour
{
    /// <summary>
    /// 最大子弹数目.
    /// </summary>
    public int maxBulletNum;
 
    /// <summary>
    /// 当前的子弹数目
    /// </summary>
    protected int curBulletNum;
 
    private int critNum = 1;
 
    /// <summary>
    /// 默认的暴击子弹数量
    /// </summary>
    public static int defaultCritNum { get; private set; }
 
    /// <summary>
    /// 暴击子弹数量
    /// </summary>
    /// <value></value>
    public int CritBulletNum
    {
        get { return critNum; }
        set
        {
            if (value < 1) value = 1;
            else if (value > maxBulletNum) value = maxBulletNum;
 
            critNum = value;
            UpdateBulletType();
        }
    }
 
    /// <summary>
    /// 子弹底图
    /// </summary>
    public SpriteRenderer[] BottomArr;
 
    public SpriteRenderer[] BulletArr;
 
    public Sprite NormalSprite;
 
    public Sprite CritSprite;
 
    // Start is called before the first frame update
    void Start()
    {
        defaultCritNum = critNum;
        ResetToMaxBullet();
        UpdateBulletType();
    }
 
    /// <summary>
    /// 获取进度条进度.
    /// </summary>
    /// <returns></returns>
    public int GetCtlProgress()
    {
        return curBulletNum;
    }
 
    /// <summary>
    /// 设置进度.
    /// </summary>
    /// <param name="pro"></param>
    public void SetCtlProcess(int pro)
    {
        curBulletNum = pro;
        updateBulletUI(pro, maxBulletNum);
    }
 
    /// <summary>
    /// 重设子弹数目到最大.
    /// </summary>
    public void ResetToMaxBullet()
    {
        if (curBulletNum == maxBulletNum) return;
 
        curBulletNum = maxBulletNum;
        updateBulletUI(curBulletNum, maxBulletNum);
    }
 
    /// <summary>
    /// 减少子弹,返回减少后的子弹数目。
    /// </summary>
    /// <returns></returns>
    public int decBullet()
    {
        if (curBulletNum <= 0) return 0;
 
        curBulletNum--;
        updateBulletUI(curBulletNum, maxBulletNum);
 
        return curBulletNum;
    }
 
    /// <summary>
    /// 更新子弹显示
    /// </summary>
    /// <param name="curBNum"></param>
    /// <param name="totalBNum"></param>
    public void updateBulletUI(int curBNum, int totalBNum)
    {
        // 隐藏的子弹数量
        int hideCount = maxBulletNum - curBNum;
 
        for (int i = 0; i < BulletArr.Length; ++i)
        {
            if (hideCount > 0)
            {
                --hideCount;
                BulletArr[i].enabled = false;
            }
            else
                BulletArr[i].enabled = true;
        }
    }
 
    /// <summary>
    /// 更新子弹类型
    /// </summary>
    private void UpdateBulletType()
    {
        int count = critNum;
 
        for (int i = BulletArr.Length - 1; i >= 0; --i)
        {
            if (count > 0)
            {
                --count;
                BulletArr[i].sprite = CritSprite;
            }
            else
                BulletArr[i].sprite = NormalSprite;
        }
    }
}