using UnityEngine; /// /// 子弹充能对应的数据结构. /// public class BulletUICtl : MonoBehaviour { /// /// 最大子弹数目. /// public int maxBulletNum; /// /// 当前的子弹数目 /// protected int curBulletNum; private int critNum = 1; /// /// 默认的暴击子弹数量 /// public static int defaultCritNum { get; private set; } /// /// 暴击子弹数量 /// /// public int CritBulletNum { get { return critNum; } set { if (value < 1) value = 1; else if (value > maxBulletNum) value = maxBulletNum; critNum = value; UpdateBulletType(); } } /// /// 子弹底图 /// 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(); } /// /// 获取进度条进度. /// /// public int GetCtlProgress() { return curBulletNum; } /// /// 设置进度. /// /// public void SetCtlProcess(int pro) { curBulletNum = pro; updateBulletUI(pro, maxBulletNum); } /// /// 重设子弹数目到最大. /// public void ResetToMaxBullet() { if (curBulletNum == maxBulletNum) return; curBulletNum = maxBulletNum; updateBulletUI(curBulletNum, maxBulletNum); } /// /// 减少子弹,返回减少后的子弹数目。 /// /// public int decBullet() { if (curBulletNum <= 0) return 0; curBulletNum--; updateBulletUI(curBulletNum, maxBulletNum); return curBulletNum; } /// /// 更新子弹显示 /// /// /// 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; } } /// /// 更新子弹类型 /// 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; } } }