using UnityEngine.UI;
|
using UnityEngine;
|
using Core.Utilities;
|
using DG.Tweening;
|
using TMPro;
|
|
/**
|
* 无尽模式boss血量管理器
|
* @Author: chenxin
|
* @Date: 2020-10-16 20:00:56
|
*/
|
namespace KTGMGemClient
|
{
|
public class EndlessBossHPManager : Singleton<EndlessBossHPManager>
|
{
|
/// <summary>
|
/// 血条1
|
/// </summary>
|
public Image HPImage1;
|
|
/// <summary>
|
/// 血条2
|
/// </summary>
|
public Image HPImage2;
|
|
/// <summary>
|
/// boss形象
|
/// </summary>
|
public Image BossImage;
|
|
private string path = "UI/Endless/Blood/";
|
|
private string bossPath = "UI/Endless/Boss/";
|
|
/// <summary>
|
/// 血条底图
|
/// </summary>
|
public Sprite BaseBlood;
|
|
/// <summary>
|
/// 当前的进度值
|
/// </summary>
|
private float current;
|
|
/// <summary>
|
/// 目标进度值
|
/// </summary>
|
private float target;
|
|
/// <summary>
|
/// 血条消失速度
|
/// </summary>
|
public float Speed = 50f;
|
|
/// <summary>
|
/// 当前颜色索引
|
/// </summary>
|
private int index;
|
|
private Tween tween;
|
|
public TextMeshProUGUI WaveNumText;
|
|
/// <summary>
|
/// 血条7种颜色
|
/// </summary>
|
private int count = 7;
|
|
/// <summary>
|
/// boss信息,名字和等级
|
/// </summary>
|
public Text BossInfo;
|
|
// Start is called before the first frame update
|
private void Start()
|
{
|
InitHP();
|
}
|
|
/// <summary>
|
/// 显示血条
|
/// </summary>
|
public void ShowHP()
|
{
|
gameObject.SetActive(true);
|
}
|
|
/// <summary>
|
/// 隐藏血条
|
/// </summary>
|
public void HideHP()
|
{
|
gameObject.SetActive(false);
|
}
|
|
/// <summary>
|
/// 设置当前进度百分比
|
/// </summary>
|
/// <param name="progress"></param>
|
public void SetCurrentProgress(float progress)
|
{
|
target = progress;
|
tween = DOTween.To(() => HPImage2.fillAmount, (v) => HPImage2.fillAmount = v, target, 0.3f);
|
tween.Play();
|
}
|
|
/// <summary>
|
/// 重置进度
|
/// </summary>
|
private void ResetProgress()
|
{
|
current = 1f;
|
target = 1f;
|
HPImage1.fillAmount = 1;
|
HPImage2.fillAmount = 1;
|
index = index % count;
|
}
|
|
/// <summary>
|
/// 切换血条显示
|
/// </summary>
|
/// <param name="end"></param>
|
public void SwitchHP(bool end = false)
|
{
|
tween.Pause();
|
HPImage2.fillAmount = 0;
|
index = ++index % count;
|
ChangeHPImageIndex();
|
ResetProgress();
|
SetHPColor(end);
|
}
|
|
/// <summary>
|
/// 初始化血条
|
/// </summary>
|
public void InitHP()
|
{
|
index = 0;
|
ResetProgress();
|
SetHPColor();
|
}
|
|
/// <summary>
|
/// 更新波次
|
/// </summary>
|
/// <param name="wave"></param>
|
public void UpdateWave(int wave)
|
{
|
WaveNumText.text = $"x{wave}";
|
}
|
|
/// <summary>
|
/// 设置boss信息
|
/// </summary>
|
/// <param name="info"></param>
|
public void SetBossInfo(string info)
|
{
|
BossInfo.text = info;
|
}
|
|
/// <summary>
|
/// 切换两血条的显示层级
|
/// </summary>
|
private void ChangeHPImageIndex()
|
{
|
int index1 = HPImage1.transform.GetSiblingIndex();
|
int index2 = HPImage2.transform.GetSiblingIndex();
|
HPImage1.transform.SetSiblingIndex(index2);
|
HPImage2.transform.SetSiblingIndex(index1);
|
// 始终保持 HPImage2在上面
|
Image tmp = HPImage1;
|
HPImage1 = HPImage2;
|
HPImage2 = tmp;
|
}
|
|
/// <summary>
|
/// 设置血条颜色
|
/// </summary>
|
/// <param name="end">是否是最终的血条显示</param>
|
private void SetHPColor(bool end = false)
|
{
|
if (end)
|
{
|
HPImage2.sprite = GetSprite(index);
|
HPImage1.sprite = Resources.Load($"{path}di", typeof(Sprite)) as Sprite;
|
}
|
else
|
{
|
HPImage2.sprite = GetSprite(index);
|
HPImage1.sprite = GetSprite((index + 1) % count);
|
}
|
}
|
|
/// <summary>
|
/// 根据索引获得sprite
|
/// </summary>
|
/// <param name="index"></param>
|
private Sprite GetSprite(int index)
|
{
|
return Resources.Load($"{path}{index}", typeof(Sprite)) as Sprite;
|
}
|
|
/// <summary>
|
/// 设置boss形象
|
/// </summary>
|
/// <param name="resId"></param>
|
public void SetBossImage(int resId)
|
{
|
resId = (resId + 1) % 2 + 1;
|
BossImage.sprite = Resources.Load<Sprite>($"{bossPath}{resId}");
|
BossImage.SetNativeSize();
|
}
|
}
|
}
|