123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- using GameFramework.Event;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityGameFramework.Runtime;
- /// <summary>
- /// 描述:血条管理者
- /// 作者:WJ
- /// </summary>
- public class HpbarManager : MonoBehaviour
- {
- /// <summary>
- /// 单键
- /// </summary>
- private static HpbarManager m_Instance;
- /// <summary>
- /// 血条模版
- /// </summary>
- private GameObject mHPTemp = null;
- /// <summary>
- /// 英雄血条模版
- /// </summary>
- private GameObject mHeroHPTemp = null;
- /// <summary>
- /// 提示模版
- /// </summary>
- private GameObject mTipTemp = null;
- /// <summary>
- /// 暴击提示模版
- /// </summary>
- private GameObject mCirTipTemp = null;
- /// <summary>
- /// 名称模板
- /// </summary>
- private GameObject mItemNameTemp = null;
- /// <summary>
- /// Missing模板
- /// </summary>
- private GameObject mMissingTemp = null;
- /// <summary>
- /// 血条
- /// </summary>
- private Dictionary<int, Hpbar> mHPs = new Dictionary<int, Hpbar>();
- /// <summary>
- /// Canvas
- /// </summary>
- private Canvas _canvas = null;
- /// <summary>
- /// 物品名称
- /// </summary>
- private Dictionary<Transform, DropItemName> mItemNames = new Dictionary<Transform, DropItemName>();
- /// <summary>
- /// 单键
- /// </summary>
- public static HpbarManager Instance
- {
- get
- {
- if (m_Instance == null)
- {
- m_Instance = GameObject.Find("HpbarManager").AddComponent<HpbarManager>();
- m_Instance.Init();
- }
- return m_Instance;
- }
- }
- /// <summary>
- /// 唤醒
- /// </summary>
- 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<Canvas>();
- // 注册
- EventComponent eventCmpt = GameEntry.GetComponent<EventComponent>();
- eventCmpt.Subscribe(HeroHPMPRefreshEvent.EventId, HPMPEvent);
- }
- private void OnDestroy()
- {
- // 注销
- EventComponent eventCmpt = GameEntry.GetComponent<EventComponent>();
- 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);
- }
- /// <summary>
- /// /// <summary>
- /// 更新血条
- /// </summary>
- /// </summary>
- /// <param name="bAttrType">角色ID</param>
- /// <param name="role">角色</param>
- /// <param name="camp">阵营</param>
- /// <param name="val">值</param>
- 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<Hpbar>();
- hp.Init(transform as RectTransform, role, progressVal);
- mHPs.Add(role.mData.UID, hp);
- }
- }
- /// <summary>
- /// 创建血条文字提示
- /// </summary>
- 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<HpbarTip>();
- // 加血
- 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);
- }
- }
- /// <summary>
- /// /// <summary>
- /// 显示道具名称
- /// </summary>
- /// </summary>
- /// <param name="_target">目标</param>
- /// <param name="_name">名称</param>
- /// <param name="_quality">品质</param>
- 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<DropItemName>();
- itemName.Init(transform as RectTransform, _target, _name, _quality);
- mItemNames.Add(_target, itemName);
- }
- }
- /// <summary>
- /// 隐藏名字
- /// </summary>
- /// <param name="_target">目标</param>
- public void HideItemName(Transform _target)
- {
- if (mItemNames.ContainsKey(_target))
- {
- mItemNames[_target].gameObject.SetActive(false);
- }
- }
- /// <summary>
- /// 设置显示状态
- /// </summary>
- /// <param name="b"></param>
- public void SetShowState(bool b)
- {
- _canvas.enabled = b;
- }
- }
|