298 lines
7.4 KiB
C#
298 lines
7.4 KiB
C#
// ***********************************************************************
|
||
// Assembly : Unity
|
||
// Author : Kimch
|
||
// Created : 2020-05-31
|
||
// Description :
|
||
// Last Modified By : Kimch
|
||
// Last Modified On :
|
||
// ***********************************************************************
|
||
// <copyright file= "BloodBoard" company="kunpo"></copyright>
|
||
// <summary></summary>
|
||
// ***********************************************************************
|
||
namespace G
|
||
{
|
||
using TMPro;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
public class BloodBoard : KUIWidget
|
||
{
|
||
[KUIFlag]
|
||
#pragma warning disable CS0649 // 从未对字段“BloodBoard._tmpName”赋值,字段将一直保持其默认值 null
|
||
private TextMeshProUGUI _tmpName;
|
||
#pragma warning restore CS0649 // 从未对字段“BloodBoard._tmpName”赋值,字段将一直保持其默认值 null
|
||
[KUIFlag]
|
||
#pragma warning disable CS0649 // 从未对字段“BloodBoard._tmpHpValue”赋值,字段将一直保持其默认值 null
|
||
private TextMeshProUGUI _tmpHpValue;
|
||
#pragma warning restore CS0649 // 从未对字段“BloodBoard._tmpHpValue”赋值,字段将一直保持其默认值 null
|
||
[KUIFlag]
|
||
#pragma warning disable CS0649 // 从未对字段“BloodBoard._imgIcon”赋值,字段将一直保持其默认值 null
|
||
private Image _imgIcon;
|
||
#pragma warning restore CS0649 // 从未对字段“BloodBoard._imgIcon”赋值,字段将一直保持其默认值 null
|
||
[KUIFlag]
|
||
#pragma warning disable CS0649 // 从未对字段“BloodBoard._sliHp”赋值,字段将一直保持其默认值 null
|
||
private Slider _sliHp;
|
||
#pragma warning restore CS0649 // 从未对字段“BloodBoard._sliHp”赋值,字段将一直保持其默认值 null
|
||
[KUIFlag]
|
||
#pragma warning disable CS0649 // 从未对字段“BloodBoard._imgHpFill”赋值,字段将一直保持其默认值 null
|
||
private Image _imgHpFill;
|
||
#pragma warning restore CS0649 // 从未对字段“BloodBoard._imgHpFill”赋值,字段将一直保持其默认值 null
|
||
[KUIFlag]
|
||
#pragma warning disable CS0649 // 从未对字段“BloodBoard._imgHpFill2”赋值,字段将一直保持其默认值 null
|
||
private Image _imgHpFill2;
|
||
#pragma warning restore CS0649 // 从未对字段“BloodBoard._imgHpFill2”赋值,字段将一直保持其默认值 null
|
||
[KUIFlag]
|
||
#pragma warning disable CS0649 // 从未对字段“BloodBoard._tmpName”赋值,字段将一直保持其默认值 null
|
||
private TextMeshProUGUI _tmpPropValue;
|
||
#pragma warning restore CS0649 // 从未对字段“BloodBoard._tmpName”赋值,字段将一直保持其默认值 null
|
||
|
||
private RectTransform _rectTransform;
|
||
|
||
public bool fixedPoint
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
#region Unity
|
||
|
||
private void Awake()
|
||
{
|
||
SetViewData();
|
||
_rectTransform = this.GetComponent<RectTransform>();
|
||
}
|
||
|
||
public void Reset()
|
||
{
|
||
this.gameObject.SetActive(false);
|
||
}
|
||
|
||
private void LateUpdate()
|
||
{
|
||
if (fixedPoint)
|
||
{
|
||
UpdateMultiHp();
|
||
}
|
||
else
|
||
{
|
||
if (_target)
|
||
{
|
||
_position = _target.position;
|
||
_position += _targetOffset;
|
||
}
|
||
Vector3 screenPosition = RectTransformUtility.WorldToScreenPoint(Camera.main, _position);
|
||
_rectTransform.anchoredPosition = BoardManager.ScreenPointToLocalPointInRectangle(screenPosition);
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region Method
|
||
|
||
public void SetIcon(Sprite sprite)
|
||
{
|
||
if (_imgIcon)
|
||
{
|
||
_imgIcon.gameObject.SetActive(true);
|
||
_imgIcon.overrideSprite = sprite;
|
||
}
|
||
}
|
||
|
||
public void SetName(string name)
|
||
{
|
||
if (_tmpName)
|
||
{
|
||
_tmpName.gameObject.SetActive(true);
|
||
_tmpName.text = name;
|
||
}
|
||
}
|
||
/// <summary>
|
||
///
|
||
/// </summary>
|
||
public void HideName()
|
||
{
|
||
_tmpName.gameObject.SetActive(false);
|
||
}
|
||
|
||
public void HidePropValue()
|
||
{
|
||
_tmpPropValue.gameObject.SetActive(false);
|
||
}
|
||
/// <summary>
|
||
///
|
||
/// </summary>
|
||
public void HideSlider()
|
||
{
|
||
_sliHp.gameObject.SetActive(false);
|
||
}
|
||
|
||
public void SetHpValue(int curValue, int maxValue)
|
||
{
|
||
_tmpHpValue.text = $"{curValue}/{maxValue}";
|
||
_sliHp.value = curValue / (float)maxValue;
|
||
}
|
||
|
||
private int _curValue;
|
||
private int _maxValue;
|
||
private int _unitValue;
|
||
private int _targetValue;
|
||
private int _maxMulti;
|
||
|
||
/// <summary>
|
||
///
|
||
/// </summary>
|
||
/// <param name="curValue"></param>
|
||
/// <param name="maxValue"></param>
|
||
/// <param name="unitValue"></param>
|
||
public void SetMultiHp(int curValue, int maxValue, int unitValue = 1000)
|
||
{
|
||
unitValue = 1000;
|
||
_unitValue = unitValue;
|
||
_targetValue = Mathf.Max(0, curValue);
|
||
_maxValue = Mathf.Max(1, maxValue);
|
||
_maxMulti = Mathf.CeilToInt(_maxValue / (float)unitValue);
|
||
if (curValue == maxValue)
|
||
{
|
||
_curValue = Mathf.Max(0, curValue);
|
||
UpdateMultiHp(true);
|
||
}
|
||
}
|
||
|
||
static readonly Color[] _RomdomColor = new Color[]
|
||
{
|
||
Color.red,
|
||
Color.yellow,
|
||
Color.green,
|
||
Color.cyan,
|
||
Color.magenta,
|
||
};
|
||
|
||
private void UpdateMultiHp(bool force = false)
|
||
{
|
||
if (_curValue != _targetValue)
|
||
{
|
||
int unit = (int)(_unitValue * Time.deltaTime);
|
||
int diff = _curValue - _targetValue;
|
||
if (Mathf.Abs(diff) >= unit)
|
||
{
|
||
_curValue = (int)Mathf.Lerp(_curValue, _targetValue, 0.1f);
|
||
}
|
||
else
|
||
{
|
||
_curValue = _targetValue;
|
||
if (_curValue <= 0)
|
||
{
|
||
|
||
}
|
||
}
|
||
}
|
||
else if (!force)
|
||
{
|
||
return;
|
||
}
|
||
float cmv_f = _curValue / (float)_unitValue;
|
||
float sv = cmv_f - (int)cmv_f;
|
||
if (sv == 0)
|
||
sv = 1f;
|
||
_sliHp.value = sv;
|
||
int cmv_i = Mathf.CeilToInt(cmv_f);
|
||
if (cmv_f < 1f)
|
||
{
|
||
_tmpHpValue.text = "";
|
||
}
|
||
else
|
||
{
|
||
#if UNITY_EDITOR
|
||
_tmpHpValue.text = $"{_targetValue}/{_maxValue}(x{cmv_i})";
|
||
#else
|
||
_tmpHpValue.text = $"x{cmv_i}";
|
||
#endif
|
||
}
|
||
int col_i = Mathf.Max(0, _maxMulti - cmv_i);
|
||
_imgHpFill.color = _RomdomColor[col_i % _RomdomColor.Length];
|
||
_imgHpFill2.color = cmv_i <= 1 ? Color.clear : _RomdomColor[(col_i + 1) % _RomdomColor.Length];
|
||
}
|
||
|
||
public void SetMultProp(int curValue)
|
||
{
|
||
_tmpPropValue.gameObject.SetActive(true);
|
||
_tmpPropValue.text = $"+{curValue}";
|
||
}
|
||
|
||
Transform _target;
|
||
Vector3 _targetOffset;
|
||
public void SetTarget(Transform target, Vector3 offset = default)
|
||
{
|
||
_target = target;
|
||
_targetOffset = offset;
|
||
}
|
||
|
||
Vector3 _position;
|
||
public void SetFixedPosition(Vector3 position)
|
||
{
|
||
fixedPoint = true;
|
||
_position = position;
|
||
}
|
||
|
||
public void SetFixedPosition()
|
||
{
|
||
fixedPoint = true;
|
||
}
|
||
|
||
#endregion
|
||
|
||
|
||
public void SetHpValue(int curValue, int maxValue, Color color)
|
||
{
|
||
//_tmpHpValue.text = $"{curValue}/{maxValue}";
|
||
_sliHp.gameObject.SetActive(true);
|
||
_sliHp.value = curValue / (float)maxValue;
|
||
if (color != default)
|
||
_imgHpFill.color = color;
|
||
}
|
||
|
||
public void SetHpValue(int curValue, int maxValue, float height, int index)
|
||
{
|
||
//_tmpHpValue.text = $"{curValue}/{maxValue}";
|
||
_sliHp.gameObject.SetActive(true);
|
||
_sliHp.value = curValue / (float)maxValue;
|
||
|
||
_targetOffset = Vector3.up * height;
|
||
if (index == 0)
|
||
{
|
||
_imgHpFill.color = Color.red;
|
||
}
|
||
else if (index == 1)
|
||
{
|
||
_imgHpFill.color = Color.green;
|
||
}
|
||
else if (index == 2)
|
||
{
|
||
_imgHpFill.color = Color.grey;
|
||
}
|
||
}
|
||
|
||
public void Init()
|
||
{
|
||
this.gameObject.SetActive(true);
|
||
}
|
||
|
||
public void Release()
|
||
{
|
||
BoardManager.Instance.ReturnBoard(this);
|
||
}
|
||
|
||
public void ReleaseWaitFinish()
|
||
{
|
||
StartCoroutine(ReleaseWaitAnimCO());
|
||
}
|
||
|
||
private System.Collections.IEnumerator ReleaseWaitAnimCO()
|
||
{
|
||
_targetValue = 0;
|
||
yield return new WaitForSeconds(0.2f);
|
||
BoardManager.Instance.ReturnBoard(this);
|
||
}
|
||
}
|
||
}
|