using GameFramework.Event; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityGameFramework.Runtime; /// /// 描述:血条管理者 /// 作者:WJ /// public class HpbarManager : MonoBehaviour { /// /// 单键 /// private static HpbarManager m_Instance; /// /// 血条模版 /// private GameObject mHPTemp = null; /// /// 英雄血条模版 /// private GameObject mHeroHPTemp = null; /// /// 提示模版 /// private GameObject mTipTemp = null; /// /// 暴击提示模版 /// private GameObject mCirTipTemp = null; /// /// 名称模板 /// private GameObject mItemNameTemp = null; /// /// Missing模板 /// private GameObject mMissingTemp = null; /// /// 血条 /// private Dictionary mHPs = new Dictionary(); /// /// Canvas /// private Canvas _canvas = null; /// /// 物品名称 /// private Dictionary mItemNames = new Dictionary(); /// /// 单键 /// public static HpbarManager Instance { get { if (m_Instance == null) { m_Instance = GameObject.Find("HpbarManager").AddComponent(); m_Instance.Init(); } return m_Instance; } } /// /// 唤醒 /// public void Init() { mHPTemp = transform.Find("HP").gameObject; mHeroHPTemp = transform.Find("HeroHP").gameObject; mTipTemp = transform.Find("Tip").gameObject; mCirTipTemp = transform.Find("CirTip").gameObject; mItemNameTemp = transform.Find("ItemName").gameObject; mMissingTemp = transform.Find("Missing").gameObject; _canvas = transform.GetComponent(); // 注册 EventComponent eventCmpt = GameEntry.GetComponent(); eventCmpt.Subscribe(HeroHPMPRefreshEvent.EventId, HPMPEvent); } private void OnDestroy() { // 注销 EventComponent eventCmpt = GameEntry.GetComponent(); if (eventCmpt.Check(HeroHPMPRefreshEvent.EventId, HPMPEvent)) { eventCmpt.Unsubscribe(HeroHPMPRefreshEvent.EventId, HPMPEvent); } } public void HPMPEvent(object sender, GameEventArgs e) { HeroHPMPRefreshEvent refreshEvent = e as HeroHPMPRefreshEvent; RoleManager.Instance.UpdatePlayerDate(); Role r = RoleManager.Instance.GetPlayer(); // 英雄升级,血量加满 if (refreshEvent.sourceType == Enum_EventType.HeroLvlUp) { r.mData.ResetHpMp(); } else { BattleCanvas.Instance.ShowPlayerHP(r.mData.HP_Final, r.mData.MaxHP_Final); } BattleCanvas.Instance.ShowPlayerPower(r.mData.MP_Final, r.mData.MaxMP_Final); } /// /// /// /// 更新血条 /// /// /// 角色ID /// 角色 /// 阵营 /// 值 public void UpdateHpbar(Role role, float progressVal, int Damage) { if (!(progressVal > 0 || progressVal < 0)) { return; } // 设置战斗状态 if (UI_BaseMainWindow.Instance() != null) { UI_BaseMainWindow.Instance().SetFightingState(true); } if (mHPs.ContainsKey(role.mData.UID)) { if (mHPs[role.mData.UID] == null) { mHPs.Remove(role.mData.UID); } else { mHPs[role.mData.UID].gameObject.SetActive(true); mHPs[role.mData.UID].UpdateHPProgress(progressVal); } } else { GameObject obj = null; if (role.mData.mIsHero) { obj = Instantiate(mHeroHPTemp, transform); } else { obj = Instantiate(mHPTemp, transform); } obj.SetActive(true); Hpbar hp = obj.AddComponent(); hp.Init(transform as RectTransform, role, progressVal); mHPs.Add(role.mData.UID, hp); } } /// /// 创建血条文字提示 /// public void CreateHpTip(Role role, int val, bool isCrit, float weakness, bool updateUI = true) { if (val == 0) { return; } GameObject obj = Instantiate(mCirTipTemp, transform); obj.SetActive(true); HpbarTip tip = obj.AddComponent(); // 加血 if (val > 0) { tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Up, Color.green); } // 掉血 else { if (isCrit && weakness < 0.99f) { // 暴击 弱点 tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Up, new Color(1.0f, 0.5f, 0, 1.0f)); } else if (isCrit && weakness > 1.0f) { // 暴击 抵抗 tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Up, new Color(0.6f, 0.6f, 0.6f, 1.0f)); } else if (isCrit) { // 暴击(红) tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Up, Color.red); } else if (weakness < 0.99f) { // 抵抗 tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Down, new Color(0.6f, 0.6f, 0.6f, 1.0f)); } else if (weakness > 1.0f) { // 弱点 tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.High, new Color(1.0f, 0.5f, 0, 1.0f)); } else { // 普通伤害 if (role.mData.mIsHero) { tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Default, Color.white); } else { tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Default, Color.yellow); } } } if (role.IsHero && updateUI) { BattleCanvas.Instance.ShowPlayerHP(role.mData.HP_Final, role.mData.MaxHP_Final); } } /// /// /// /// 显示道具名称 /// /// /// 目标 /// 名称 /// 品质 public void ShowItemName(Transform _target, string _name, int _quality) { if (mItemNames.ContainsKey(_target)) { mItemNames[_target].gameObject.SetActive(true); } else { GameObject obj = Instantiate(mItemNameTemp, transform); obj.SetActive(true); DropItemName itemName = obj.AddComponent(); itemName.Init(transform as RectTransform, _target, _name, _quality); mItemNames.Add(_target, itemName); } } /// /// 隐藏名字 /// /// 目标 public void HideItemName(Transform _target) { if (mItemNames.ContainsKey(_target)) { mItemNames[_target].gameObject.SetActive(false); } } /// /// 设置显示状态 /// /// public void SetShowState(bool b) { _canvas.enabled = b; } }