using System.Collections.Generic;
using UnityEngine;
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() {
if (getBulletCount == 0) {
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)
{
//清空对象
//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 {
rectTransform.anchoredPosition = new Vector2(0, 120);
rectTransform.localRotation = Quaternion.identity;
rectTransform.localScale = Vector3.one;
}
//o.GetComponentInChildren().text = number.ToString($"f{CommonConfig.ringsPrecision}");
}
}