123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- //------------------------------------------------------------
- // Game Framework
- // Copyright © 2013-2021 Jiang Yin. All rights reserved.
- // Homepage: https://gameframework.cn/
- // Feedback: mailto:ellan@gameframework.cn
- //------------------------------------------------------------
- using System.Collections;
- using UnityEngine;
- using UnityEngine.UI;
- using UnityGameFramework.Runtime;
- namespace MetaClient
- {
- public class HPBarItem : MonoBehaviour
- {
- private const float AnimationSeconds = 0.3f;
- private const float KeepSeconds = 0.4f;
- private const float FadeOutSeconds = 0.3f;
- [SerializeField]
- private Slider m_HPBar = null;
- private Canvas m_ParentCanvas = null;
- private RectTransform m_CachedTransform = null;
- private CanvasGroup m_CachedCanvasGroup = null;
- private Entity m_Owner = null;
- private int m_OwnerId = 0;
- public Entity Owner
- {
- get
- {
- return m_Owner;
- }
- }
- public void Init(Entity owner, Canvas parentCanvas, float fromHPRatio, float toHPRatio)
- {
- if (owner == null)
- {
- Log.Error("Owner is invalid.");
- return;
- }
- m_ParentCanvas = parentCanvas;
- gameObject.SetActive(true);
- StopAllCoroutines();
- m_CachedCanvasGroup.alpha = 1f;
- if (m_Owner != owner || m_OwnerId != owner.Id)
- {
- m_HPBar.value = fromHPRatio;
- m_Owner = owner;
- m_OwnerId = owner.Id;
- }
- Refresh();
- StartCoroutine(HPBarCo(toHPRatio, AnimationSeconds, KeepSeconds, FadeOutSeconds));
- }
- public bool Refresh()
- {
- if (m_CachedCanvasGroup.alpha <= 0f)
- {
- return false;
- }
- if (m_Owner != null && Owner.Available && Owner.Id == m_OwnerId)
- {
- Vector3 worldPosition = m_Owner.CachedTransform.position + Vector3.forward;
- Vector3 screenPosition = GameEntry.Scene.MainCamera.WorldToScreenPoint(worldPosition);
- Vector2 position;
- if (RectTransformUtility.ScreenPointToLocalPointInRectangle((RectTransform)m_ParentCanvas.transform, screenPosition,
- m_ParentCanvas.worldCamera, out position))
- {
- m_CachedTransform.localPosition = position;
- }
- }
- return true;
- }
- public void Reset()
- {
- StopAllCoroutines();
- m_CachedCanvasGroup.alpha = 1f;
- m_HPBar.value = 1f;
- m_Owner = null;
- gameObject.SetActive(false);
- }
- private void Awake()
- {
- m_CachedTransform = GetComponent<RectTransform>();
- if (m_CachedTransform == null)
- {
- Log.Error("RectTransform is invalid.");
- return;
- }
- m_CachedCanvasGroup = GetComponent<CanvasGroup>();
- if (m_CachedCanvasGroup == null)
- {
- Log.Error("CanvasGroup is invalid.");
- return;
- }
- }
- private IEnumerator HPBarCo(float value, float animationDuration, float keepDuration, float fadeOutDuration)
- {
- yield return m_HPBar.SmoothValue(value, animationDuration);
- yield return new WaitForSeconds(keepDuration);
- yield return m_CachedCanvasGroup.FadeToAlpha(0f, fadeOutDuration);
- }
- }
- }
|