using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.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, } } }