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 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.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.98f && !transform.gameObject.activeSelf) { transform.gameObject.SetActive(true); } hp.rectTransform.sizeDelta = new Vector2(v * 60, hp.rectTransform.sizeDelta.y); } private void HeroDie(IEventData iEventData) { HeroDieEventData heroDieEventData = iEventData as HeroDieEventData; if (heroDieEventData.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.HeroDie, HeroDie); StaticUpdater.Instance.AddRenderUpdateCallBack(Update); hpTransform = combatHeroEntity.combatHeroGameObject.hpTransform; transform.gameObject.SetActive(false); if (combatHeroEntity.IsEnemy) { hp.color = new Color(0.56f, 0f, 0f); } else { hp.color = new Color(0.06f, 0.56f, 0.06f); } 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; } } }