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;
}
///
/// ����Ҫ�Զ�ɾ��
///
///
public bool bulletZeroNotDelete() {
if (getBulletCount == 0)
{
//�����Զ�ɾ��
Create(parent.transform, bCenter, bulletTipColor,true);
return true;
}
return false;
}
///
/// �ⲿ���ã��ֶ�ɾ������ TipBulletNumber
///
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 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("Common/TipBulletNumber"));
// ����Transform����
o.transform.SetParent(parentTran);
TipBulletNumber tip = o.GetComponent();
tip.SetOutTipColor(color);
tip.SetDisableAutoDelete(disableAutoDelete); // �����Ƿ�����Զ�ɾ��
bulletNumber.Add(tip);
// ��ȡRectTransform���
RectTransform rectTransform = o.GetComponent();
// ���������ê���ƫ��λ��
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();
// 强制刷新它的布局
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 = number.ToString($"f{CommonConfig.ringsPrecision}");
}
}