using Common.Utility.CombatEvent; using Fort23.Core; using Fort23.UTool; using UnityEngine; namespace Fort23.Mono { [UIBinding(prefab = "HeroHpWidget")] public partial class HeroHpWidget : UIComponent { public CombatHeroEntity combatHeroEntity; private Transform hpTransform; private int size; private void Init() { } public override void AddEvent() { } public override void DelEvent() { } public override void AddButtonEvent() { } public override void DormancyObj() { CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroHpUpdate, HeroHpUpdateEventData); CombatEventManager.Instance.RemoveEventListener(CombatEventType.ClearHeroHp, ClearHeroHp); CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroDie, HeroDie); StaticUpdater.Instance.RemoveRenderUpdateCallBack(Update); base.DormancyObj(); } private void HeroHpUpdateEventData(IEventData iEventData) { HeroHpUpdateEventData heroHpUpdateEventData = iEventData as HeroHpUpdateEventData; if (heroHpUpdateEventData.combatHeroEntity == combatHeroEntity) { UpdateHp(); } } private void UpdateHp() { float v = (combatHeroEntity.CurrCombatHeroInfo.hp.Value * 1f) / combatHeroEntity.MaxCombatHeroInfo.hp.Value; v = Mathf.Clamp(v, 0, 1); if (v < 0.99f && !transform.gameObject.activeSelf) { transform.gameObject.SetActive(true); } hp.rectTransform.sizeDelta = new Vector2(v * size, hp.rectTransform.sizeDelta.y); } private void ClearHeroHp(IEventData iEventData) { HeroHpUpdateEventData heroHpUpdateEventData = iEventData as HeroHpUpdateEventData; if (heroHpUpdateEventData.combatHeroEntity == combatHeroEntity) { GObjectPool.Instance.Recycle(this); } } private void HeroDie(IEventData iEventData) { HeroDieEventData heroHpUpdateEventData = iEventData as HeroDieEventData; if (heroHpUpdateEventData.combatHeroEntity == combatHeroEntity&&combatHeroEntity.IsEnemy) { GObjectPool.Instance.Recycle(this); } } public void Init(CombatHeroEntity combatHeroEntity) { this.combatHeroEntity = combatHeroEntity; CombatEventManager.Instance.AddEventListener(CombatEventType.HeroHpUpdate, HeroHpUpdateEventData); CombatEventManager.Instance.AddEventListener(CombatEventType.ClearHeroHp, ClearHeroHp); CombatEventManager.Instance.AddEventListener(CombatEventType.HeroDie, HeroDie); StaticUpdater.Instance.AddRenderUpdateCallBack(Update); hpTransform = combatHeroEntity.combatHeroGameObject.hpTransform; transform.gameObject.SetActive(false); jy.SetActive(false); if (combatHeroEntity.IsEnemy) { if (combatHeroEntity.CurrCombatHeroInfo.heroType == 2) { hp.icon_name = "btn_l_Red"; size = 100; } else { size = 150; hp.icon_name = "btn_l_Purple"; jy.SetActive(true); } } else { size = 100; hp.icon_name = "btn_l_Green"; } bg.sizeDelta = new Vector2(size, hp.rectTransform.sizeDelta.y); hp.rectTransform.sizeDelta = new Vector2(size, hp.rectTransform.sizeDelta.y); bg.anchoredPosition = new Vector2(-size / 2, 0); hp.rectTransform.anchoredPosition = new Vector2(-size / 2, 0); UpdateHp(); } private void Update() { Vector3 worldPos = hpTransform.position; Vector3 p = UIManager.Instance.CurrCustomCameraStack.camera.WorldToScreenPoint(worldPos); Vector3 p2 = UIManager.Instance.UICamera.ScreenToWorldPoint(p); transform.position = p2; } } }