using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
namespace vnxbqy.UI
|
{
|
|
[DisallowMultipleComponent]
|
public class LifeBar : HUDBehaviour
|
{
|
|
[Header("LifeBar")]
|
[SerializeField]
|
MultipleSmoothSlider m_MultipleSlider;
|
public MultipleSmoothSlider multipleSlider
|
{
|
get
|
{
|
return m_MultipleSlider;
|
}
|
}
|
|
[SerializeField]
|
[Range(0, 10)]
|
float m_Delay;
|
public float delay
|
{
|
get
|
{
|
return m_Delay;
|
}
|
}
|
|
[SerializeField]
|
bool m_NeverHide;
|
public bool neverHide
|
{
|
get
|
{
|
return m_NeverHide;
|
}
|
set
|
{
|
m_NeverHide = value;
|
}
|
}
|
|
[SerializeField]
|
[Range(0, 100)]
|
float m_HideInterval;
|
public float hideInterval
|
{
|
get
|
{
|
return m_HideInterval;
|
}
|
set
|
{
|
m_HideInterval = Mathf.Clamp(value, 0, 100);
|
}
|
}
|
|
float m_Value;
|
public float value
|
{
|
get
|
{
|
return m_Value;
|
}
|
set
|
{
|
m_Value = Mathf.Clamp01(value);
|
if (multipleSlider != null)
|
{
|
multipleSlider.value = m_Value;
|
}
|
}
|
}
|
|
Camera m_TargetCamera;
|
public Camera targetCamera
|
{
|
get
|
{
|
return m_TargetCamera;
|
}
|
set
|
{
|
m_TargetCamera = value;
|
if (m_TargetCamera != null && facingCamera != null)
|
{
|
facingCamera.camera = m_TargetCamera;
|
}
|
}
|
}
|
|
float[] reduceHpDelay = new float[2];
|
float[] addHpDelay = new float[2];
|
|
float hideTime = 0f;
|
Pattern m_Pattern = Pattern.Enemy;
|
public Pattern pattern
|
{
|
get { return m_Pattern; }
|
set { m_Pattern = value; }
|
}
|
|
public static LifeBar RequireLifeBar(Transform _target, float _offsetY, Camera _camera)
|
{
|
var lifeBar = LifeBarPool.Require(Pattern.Enemy);
|
lifeBar.camera = _camera;
|
lifeBar.target = _target;
|
lifeBar.offset = new Vector3(0, _offsetY, 0);
|
lifeBar.transform.SetParentEx(WindowCenter.Instance.uiRoot.lifeBarCanvas.transform, Vector3.zero, Quaternion.identity, Vector3.one);
|
if (lifeBar.multipleSlider != null)
|
{
|
lifeBar.multipleSlider.ResetValue(1f);
|
}
|
lifeBar.value = 1f;
|
lifeBar.pattern = Pattern.Enemy;
|
return lifeBar;
|
}
|
|
public static void Recycle(LifeBar _lifeBar)
|
{
|
LifeBarPool.Recycle(_lifeBar.gameObject, _lifeBar.pattern);
|
}
|
|
public void Set(ulong _hp, ulong _maxHp)
|
{
|
var targetValue = _hp / (float)_maxHp;
|
value = targetValue;
|
this.transform.localScale = Vector3.one;
|
hideTime = Time.time + hideInterval;
|
multipleSlider.ResetValue(value);
|
SyncPosition(true);
|
}
|
|
public void Show(ulong _hp, ulong _maxHp)
|
{
|
var targetValue = _hp / (float)_maxHp;
|
if (targetValue < this.value)
|
{
|
multipleSlider.UpdateDelayTimes(reduceHpDelay);
|
}
|
else
|
{
|
multipleSlider.UpdateDelayTimes(addHpDelay);
|
}
|
|
value = targetValue;
|
this.transform.localScale = Vector3.one;
|
hideTime = Time.time + hideInterval;
|
SyncPosition(true);
|
}
|
|
public void Hide()
|
{
|
this.transform.localScale = Vector3.zero;
|
}
|
|
void Awake()
|
{
|
reduceHpDelay[0] = 0f;
|
reduceHpDelay[1] = delay;
|
|
addHpDelay[0] = delay;
|
addHpDelay[1] = 0f;
|
}
|
|
protected override void OnEnable()
|
{
|
base.OnEnable();
|
multipleSlider.ResetValue(value);
|
}
|
|
protected override void LateUpdate()
|
{
|
base.LateUpdate();
|
|
if (Time.time > hideTime && !neverHide)
|
{
|
this.transform.localScale = Vector3.zero;
|
}
|
}
|
|
|
public enum Pattern
|
{
|
Friendly = 1,
|
Pet = 2,
|
Enemy = 3,
|
}
|
|
}
|
|
}
|
|