| | |
| | | using DG.Tweening; |
| | | using Protobuf; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using UnityEngine.UI; |
| | | using UnityEngine; |
| | | |
| | | /// <summary> |
| | | /// 子弹充能对应的数据结构. |
| | | /// </summary> |
| | | public class BulletUICtl : MonoBehaviour |
| | | { |
| | | public SpriteRenderer bulletScaleMask; |
| | | |
| | | public float fAdjValue; |
| | | |
| | | /// <summary> |
| | | /// 最大子弹数目. |
| | | /// </summary> |
| | | public int maxBulletNum; |
| | | |
| | | /// <summary> |
| | | /// 当前的子弹数目. |
| | | /// 当前的子弹数目 |
| | | /// </summary> |
| | | protected int curBulletNum; |
| | | |
| | | private float[] scaleArr = { 0, 0.16f, 0.32f, 0.48f, 0.64f, 0.8f, 1f }; |
| | | private int critNum = 1; |
| | | |
| | | private float[] yArr = { 0.4f, 0.377f, 0.307f, 0.227f, 0.153f, 0.074f, 0 }; |
| | | /// <summary> |
| | | /// 默认的暴击子弹数量 |
| | | /// </summary> |
| | | public static int defaultCritNum { get; private set; } |
| | | |
| | | private float gap = 0.15f; |
| | | /// <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() |
| | | { |
| | | resetToMaxBullet(); |
| | | defaultCritNum = critNum; |
| | | ResetToMaxBullet(); |
| | | UpdateBulletType(); |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取进度条进度. |
| | |
| | | /// <returns></returns> |
| | | public int GetCtlProgress() |
| | | { |
| | | return this.curBulletNum; |
| | | return curBulletNum; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 设置进度. |
| | | /// </summary> |
| | | /// <param name="pro"></param> |
| | | public void SetCtlProcess( int pro) |
| | | public void SetCtlProcess(int pro) |
| | | { |
| | | this.curBulletNum = pro; |
| | | this.updateBulletUI(pro, maxBulletNum); |
| | | curBulletNum = pro; |
| | | updateBulletUI(pro, maxBulletNum); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 重设子弹数目到最大. |
| | | /// </summary> |
| | | public void resetToMaxBullet() |
| | | public void ResetToMaxBullet() |
| | | { |
| | | if (this.curBulletNum == maxBulletNum) return; |
| | | |
| | | this.curBulletNum = maxBulletNum; |
| | | this.updateBulletUI(curBulletNum, maxBulletNum); |
| | | if (curBulletNum == maxBulletNum) return; |
| | | |
| | | curBulletNum = maxBulletNum; |
| | | updateBulletUI(curBulletNum, maxBulletNum); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public int decBullet() |
| | | { |
| | | if (this.curBulletNum <= 0) return 0; |
| | | this.curBulletNum--; |
| | | this.updateBulletUI(curBulletNum, maxBulletNum); |
| | | 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) |
| | | public void updateBulletUI(int curBNum, int totalBNum) |
| | | { |
| | | if (bulletScaleMask == null) return; |
| | | // 隐藏的子弹数量 |
| | | int hideCount = maxBulletNum - curBNum; |
| | | |
| | | Vector3 pos = bulletScaleMask.transform.localPosition; |
| | | pos.y = yArr[maxBulletNum - curBulletNum]; |
| | | bulletScaleMask.transform.localPosition = pos; |
| | | Vector3 s = bulletScaleMask.transform.localScale; |
| | | s.y = scaleArr[maxBulletNum - curBulletNum]; |
| | | bulletScaleMask.transform.localScale = s; |
| | | for (int i = 0; i < BulletArr.Length; ++i) |
| | | { |
| | | if (hideCount > 0) |
| | | { |
| | | --hideCount; |
| | | BulletArr[i].enabled = false; |
| | | } |
| | | else |
| | | BulletArr[i].enabled = true; |
| | | } |
| | | } |
| | | |
| | | // Update is called once per frame |
| | | void Update() |
| | | /// <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; |
| | | } |
| | | } |
| | | } |