// ***********************************************************************
// Assembly : Unity
// Author : Kimch
// Created : 2020-05-31
// Description :
// Last Modified By : Kimch
// Last Modified On :
// ***********************************************************************
//
//
// ***********************************************************************
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();
}
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;
}
}
///
///
///
public void HideName()
{
_tmpName.gameObject.SetActive(false);
}
public void HidePropValue()
{
_tmpPropValue.gameObject.SetActive(false);
}
///
///
///
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;
///
///
///
///
///
///
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);
}
}
}