| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.SceneManagement;
- using UnityEngine.UI;
- public class BulletManager : MonoBehaviour
- {
- public Image[] bulletImages;
- public Sprite bulletSprite;
- public Sprite emptyBulletSprite;
- //Ĭ���ӵ�����
- public int defaultBulletCount = 15;
- private int bulletCount;
- public GameObject parent ;
- [SerializeField]
- [Tooltip("�����ӵ�������ʾ��λ���Ƿ�����������")]
- bool bCenter = false;
- [SerializeField]
- [Tooltip("�����ӵ�������ʾ��������ɫ")]
- Color bulletTipColor;
- //�����
- private int numberOfShotsFired = 0;
- public int getBulletCount {
- get {
- return bulletCount;
- }
- }
- void Awake()
- {
- numberOfShotsFired = 0;
- ResetBullets();
- }
- public void Update()
- {
- if (Input.GetKeyDown(KeyCode.Q))
- {
- if (bulletZero()) return;
- FireBullet();
- }
- }
- public void FireBullet()
- {
- if (bulletCount > 0)
- {
- bulletCount--;
- UpdateBullets();
- //��¼���������
- numberOfShotsFired++;
- }
- }
- public void ResetBullets()
- {
- bulletCount = defaultBulletCount;
- UpdateBullets();
- }
- //�Ƿ��ж������ʹ��
- public bool NumberOfShotsFired() {
- return numberOfShotsFired >= defaultBulletCount ? true : false;
- }
- public bool bulletZero(PlayerType playerType = PlayerType.FirstPlayer) {
- if (getBulletCount == 0) {
- if (SceneManager.GetActiveScene().name == "InfraredGameDouble")
- {
- //���ҷ�����ʾ
- Create(parent.transform, bCenter, bulletTipColor, false, playerType == PlayerType.FirstPlayer? - Screen.width / 4f : Screen.width / 4f);
- }
- else {
- Create(parent.transform, bCenter, bulletTipColor);
- }
-
- //��ʱ�Զ�ˢ��,����Э�����Ч��
- //ResetBullets();
- return true;
- }
- return false;
- }
- /// <summary>
- /// ����Ҫ�Զ�ɾ��
- /// </summary>
- /// <returns></returns>
- public bool bulletZeroNotDelete() {
- if (getBulletCount == 0)
- {
- //�����Զ�ɾ��
- Create(parent.transform, bCenter, bulletTipColor,true);
- return true;
- }
- return false;
- }
- /// <summary>
- /// �ⲿ���ã��ֶ�ɾ������ TipBulletNumber
- /// </summary>
- public static void RemoveBulletExternally()
- {
- for (int i = bulletNumber.Count - 1; i >= 0; i--)
- {
- if (bulletNumber[i] != null)
- {
- bulletNumber[i].Remove();
- }
- }
- bulletNumber.Clear();
- }
- private void UpdateBullets()
- {
- for (int i = 0; i < bulletImages.Length; i++)
- {
- if (i < bulletCount)
- {
- bulletImages[i].sprite = bulletSprite;
- }
- else
- {
- bulletImages[i].sprite = emptyBulletSprite;
- }
- }
- }
- static List<TipBulletNumber> bulletNumber = new();
- public static void Create(Transform parentTran,bool centerPos,Color color, bool disableAutoDelete = false ,float posX = 0)
- {
- //��ն���
- //for (int i = bulletNumber.Count - 1; i >= 0; i--)
- //{
- // Destroy(bulletNumber[i].gameObject);
- // bulletNumber.RemoveAt(i);
- //}
- RemoveBulletExternally();
- GameObject o = Instantiate(Resources.Load<GameObject>("Common/TipBulletNumber"));
- // ����Transform����
- o.transform.SetParent(parentTran);
- TipBulletNumber tip = o.GetComponent<TipBulletNumber>();
- tip.SetOutTipColor(color);
- tip.SetDisableAutoDelete(disableAutoDelete); // �����Ƿ�����Զ�ɾ��
- bulletNumber.Add(tip);
- // ��ȡRectTransform���
- RectTransform rectTransform = o.GetComponent<RectTransform>();
- // ���������ê���ƫ��λ��
- if (centerPos)
- {
- rectTransform.anchorMin = new Vector2(0.5f, 0.5f);
- rectTransform.anchorMax = new Vector2(0.5f, 0.5f);
- //rectTransform.anchoredPosition = new Vector2(0, rectTransform.rect.height / 2);
- rectTransform.anchoredPosition = new Vector2(0, 0);
- rectTransform.localRotation = Quaternion.identity;
- rectTransform.localScale = Vector3.one;
- }
- else {
- float _posX = 0;
- RectTransform imageRect = o.transform.Find("Image").GetComponent<RectTransform>();
- // 强制刷新它的布局
- LayoutRebuilder.ForceRebuildLayoutImmediate(imageRect);
- float _childX = imageRect.rect.width;
- if (posX > 0)
- {
- _posX = posX - _childX * 0.5f - 80;
- }
- else if(posX < 0) {
- _posX = -(Mathf.Abs(posX) - _childX * 0.5f - 80);
- }
- rectTransform.anchoredPosition = new Vector2(_posX, 120);
- rectTransform.localRotation = Quaternion.identity;
- rectTransform.localScale = Vector3.one;
- }
-
- //o.GetComponentInChildren<Text>().text = number.ToString($"f{CommonConfig.ringsPrecision}");
- }
- }
|