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 currTargetHeroHp = new Map(); private CombatHeroEntity heroFocusEnemy; private List _duiPingWidgets = new List(); public static async CTask OpenCombatHPPanel() { await UIManager.Instance.LoadAndOpenPanel(null, UILayer.Bottom); } public static async CTask CloseCombatHPPanel() { UIManager.Instance.HideUIUIPanel(); } 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, 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, null, transform, isInstance: true); widget.ShowWidget(faBaoDuiPingStartEventData.MagicWeaponCollisionInfo.a); _duiPingWidgets.Add(widget); widget = await UIManager.Instance.CreateGComponentForObject(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 override void Close() { _duiPingWidgets.Clear(); UIManager.Instance.DormancyAllGComponent(); UIManager.Instance.DormancyAllGComponent(); base.Close(); } } }