| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 | using System.Collections.Generic;using Common.Utility.CombatEvent;using Fort23.Core;using GameLogic.Combat.Hero;using UnityEngine;using Utility;namespace Fort23.Mono{    [UIBinding(prefab = "CombatHPPanel")]    public partial class CombatHPPanel : UIPanel    {        private Map<IHero, int> currTargetHeroHp = new Map<IHero, int>();        private CombatHeroEntity heroFocusEnemy;        private List<DuiPingWidget> _duiPingWidgets = new List<DuiPingWidget>();        public static async CTask OpenCombatHPPanel()        {            await UIManager.Instance.LoadAndOpenPanel<CombatHPPanel>(null, UILayer.Bottom);        }        public static async CTask CloseCombatHPPanel()        {            UIManager.Instance.HideUIUIPanel<CombatHPPanel>();        }        private void Init()        {            isAddStack = false;        }        protected override void AddEvent()        {            CombatEventManager.Instance.AddEventListener(CombatEventType.TargetAlter, AlaterTargetFocus);            CombatEventManager.Instance.AddEventListener(CombatEventType.FaBaoDuiPingStart, FaBaoDuiPingStart);            CombatEventManager.Instance.AddEventListener(CombatEventType.FaBaoDuiPingFinish, FaBaoDuiPingFinish);            EventManager.Instance.AddEventListener(CustomEventType.CreateHeroHp, CreateHeroHp);            StaticUpdater.Instance.AddRenderUpdateCallBack(Update);            TargetFocus.gameObject.SetActive(false);            // CombatEventManager.Instance.AddEventListener(CombatEventType.TargetAlter, TargetAlter);        }        protected override void DelEvent()        {            CombatEventManager.Instance.RemoveEventListener(CombatEventType.FaBaoDuiPingFinish, FaBaoDuiPingFinish);            CombatEventManager.Instance.RemoveEventListener(CombatEventType.FaBaoDuiPingStart, FaBaoDuiPingStart);            EventManager.Instance.RemoveEventListener(CustomEventType.CreateHeroHp, CreateHeroHp);            StaticUpdater.Instance.RemoveRenderUpdateCallBack(Update);            // CombatEventManager.Instance.RemoveEventListener(CombatEventType.TargetAlter, TargetAlter);            CombatEventManager.Instance.RemoveEventListener(CombatEventType.TargetAlter, AlaterTargetFocus);        }        public override void AddButtonEvent()        {        }        private async void CreateHpUI(CombatHeroEntity combatHeroEntity)        {            // CombatHeroEntity combatHeroEntity = createHeroHpEventData.combatHeroEntity;            HeroHpWidget heroHpWidget =                await UIManager.Instance.CreateGComponentForObject<HeroHpWidget>(HeroHpWidget, null, transform,                    isInstance: true);            heroHpWidget.Init(combatHeroEntity);        }        private async void FaBaoDuiPingStart(IEventData iEventData)        {            FaBaoDuiPingStartEventData faBaoDuiPingStartEventData = iEventData as FaBaoDuiPingStartEventData;            DuiPingWidget widget = await UIManager.Instance.CreateGComponentForObject<DuiPingWidget>(DuiPingWidget,                null, transform,                isInstance: true);            widget.ShowWidget(faBaoDuiPingStartEventData.MagicWeaponCollisionInfo.a);            _duiPingWidgets.Add(widget);            widget = await UIManager.Instance.CreateGComponentForObject<DuiPingWidget>(DuiPingWidget, null, transform,                isInstance: true);            widget.ShowWidget(faBaoDuiPingStartEventData.MagicWeaponCollisionInfo.b);            _duiPingWidgets.Add(widget);        }        private async void FaBaoDuiPingFinish(IEventData iEventData)        {            FaBaoDuiPingStartEventData faBaoDuiPingStartEventData = iEventData as FaBaoDuiPingStartEventData;            for (int i = 0; i < _duiPingWidgets.Count; i++)            {                if (_duiPingWidgets[i].combatMagicWeaponEntity ==                    faBaoDuiPingStartEventData.MagicWeaponCollisionInfo.a ||                    _duiPingWidgets[i].combatMagicWeaponEntity == faBaoDuiPingStartEventData.MagicWeaponCollisionInfo.b)                {                    UIManager.Instance.DormancyGComponent(_duiPingWidgets[i]);                    _duiPingWidgets.RemoveAt(i);                    i--;                }            }        }        private void AlaterTargetFocus(IEventData iEventData)        {            CombatHeroTargetAlterEventData combatHeroTargetAlterEventData =                iEventData as CombatHeroTargetAlterEventData;            CombatHeroEntity combatHeroEntity = combatHeroTargetAlterEventData.combatHeroEntity as CombatHeroEntity;            if (!combatHeroEntity.isPlayer || combatHeroTargetAlterEventData.targetCombatHeroEntity == heroFocusEnemy)            {                return;            }            heroFocusEnemy = combatHeroTargetAlterEventData.targetCombatHeroEntity as CombatHeroEntity;            TargetFocus.gameObject.SetActive(heroFocusEnemy != null);            UpdateFocusUI();        }        private async void CreateHeroHp(IEventData iEventData)        {            CreateHeroHpEventData createHeroHpEventData = iEventData as CreateHeroHpEventData;            CombatHeroEntity combatHeroEntity = createHeroHpEventData.combatHeroEntity;            if (!combatHeroEntity.isCreateHeroHp)            {                return;            }            CreateHpUI(combatHeroEntity);        }        private void UpdateFocusUI()        {            if (heroFocusEnemy == null)            {                return;            }            Vector3 worldPos = heroFocusEnemy.combatHeroGameObject.hpTransform.position;            Vector3 p = UIManager.Instance.CurrCustomCameraStack.camera.WorldToScreenPoint(worldPos);            Vector3 p2 = UIManager.Instance.UICamera.ScreenToWorldPoint(p);            Vector3 pos = Vector3.zero;            if (heroFocusEnemy.isCreateHeroHp)            {                pos = new Vector3(0, 0.1f, 0);            }            TargetFocus.position = p2 + pos;        }        public void Update()        {            UpdateFocusUI();            for (int i = 0; i < _duiPingWidgets.Count; i++)            {                _duiPingWidgets[i].UpdateHp();            }        }        public async override CTask Close()        {            _duiPingWidgets.Clear();            UIManager.Instance.DormancyAllGComponent<HeroHpWidget>();            UIManager.Instance.DormancyAllGComponent<DuiPingWidget>();            await base.Close();        }    }}
 |