| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 | using System.Collections.Generic;using Common.Utility.CombatEvent;using Fort23.Core;using GameLogic.Combat.CombatTool;using GameLogic.Combat.Hero;using GameLogic.Combat.Hero.Turntable;using GameLogic.Combat.Skill;using UnityEngine;using Utility;namespace Fort23.Mono{    [UIBinding(prefab = "BossHpWidget")]    public partial class BossHpWidget : UIComponent    {        private CombatHeroEntity combatHeroEntity;        private CombatHeroSkillControl combatHeroSkillControl;        protected BetterList<EnemyGf_skill> currShowGfWidget = new BetterList<EnemyGf_skill>();        private HeroHpWidget heroHpWidget;        private string bossWidgetKey="bossWidget";        private string bossFaBaoKey="bossFaBao";        private void Init()        {            bossWidgetKey= "bossWidget"+UtilTools.GetLOGGUID();            bossFaBaoKey= "bossFaBao"+UtilTools.GetLOGGUID();        }        public override void AddEvent()        {            CombatEventManager.Instance.AddEventListener(CombatEventType.UseSkill, UseSkill);            CombatEventManager.Instance.AddEventListener(CombatEventType.AddUseGongFa, AddUseGongFa);            CombatEventManager.Instance.AddEventListener(CombatEventType.UseSkillFinish, UseSkillFinish);            StaticUpdater.Instance.AddRenderUpdateCallBack(Update);        }        public override void DelEvent()        {            StaticUpdater.Instance.RemoveRenderUpdateCallBack(Update);            CombatEventManager.Instance.RemoveEventListener(CombatEventType.AddUseGongFa, AddUseGongFa);            CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseSkill, UseSkill);            CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseSkillFinish, UseSkillFinish);            UIManager.Instance.DormancyGComponent(heroHpWidget);            heroHpWidget = null;            UIManager.Instance.DormancyAllGComponent<EnemyGf_skill>(bossWidgetKey);            UIManager.Instance.DormancyAllGComponent<MagicWeaponWidget>(bossFaBaoKey);        }        public override void AddButtonEvent()        {        }        private void AddUseGongFa(IEventData iEventData)        {            AddUseGongFaEventData addUseGongFaEventData = iEventData as AddUseGongFaEventData;            if (addUseGongFaEventData.SkillBasic.CombatHeroEntity == combatHeroEntity)            {                ReshSkill();            }        }        private void UseSkill(IEventData iEventData)        {            CombatUseSkillEventData combatUseSkillEventData = iEventData as CombatUseSkillEventData;            if (combatUseSkillEventData.useSkill.CombatHeroEntity == combatHeroEntity)            {                currUseSkillIcon.icon_name = combatUseSkillEventData.useSkill.SelfSkillConfig.icon;                currUseSkillQuan.color =                    CombatCalculateTool.Instance.GetColor(combatUseSkillEventData.useSkill.wuXingType);                currUseSkillIcon.gameObject.SetActive(true);                ReshSkill();            }        }        private void UseSkillFinish(IEventData iEventData)        {            UseSkillFinishEventData combatUseSkillEventData = iEventData as UseSkillFinishEventData;            if (combatUseSkillEventData.SkillBasic.CombatHeroEntity == combatHeroEntity)            {                currUseSkillIcon.gameObject.SetActive(false);                currUseSkillQuan.color = Color.white;                ReshSkill();            }        }        private async CTask ReshSkill()        {            currShowGfWidget.Clear();            UIManager.Instance.DormancyAllGComponent<EnemyGf_skill>(bossWidgetKey);            int maxCount = 2;            SkillBasic[] skillQueue = combatHeroSkillControl.GetSkillQueue();            for (int i = 0; i < combatHeroSkillControl.useSkillCount; i++)            {                if (maxCount <= 0)                {                    break;                }                SkillBasic skillBasic=  skillQueue[i];                maxCount--;                EnemyGf_skill gfWidget = await UIManager.Instance.CreateGComponentForObject<EnemyGf_skill>(                    this.gf_widget,                    null,                    SkillRoot, poolName: bossWidgetKey, isInstance: true);                gfWidget.InitSkillWidget(skillBasic, combatHeroEntity);                gfWidget.transform.SetAsLastSibling();                currShowGfWidget.Add(gfWidget);            }            if (maxCount > 0)            {                float minA = float.MaxValue;                SkillSlots minSlots = null;                List<SkillSlots> showSkillSlots = new List<SkillSlots>();                for (int j = 0; j < maxCount; j++)                {                    minSlots = null;                    minA = float.MaxValue;                    for (int i = 0; i < combatHeroSkillControl.SkillTurntable.allSkillSlots.Count; i++)                    {                        SkillSlots skillSlots = combatHeroSkillControl.SkillTurntable.allSkillSlots[i];                        if (skillSlots.SkillBasic != null && skillSlots.SkillBasic.SelfSkillConfig.SkillType != 1)                        {                            continue;                        }                        float angle = skillSlots.GetFinishAngle();                        if (angle < minA && !showSkillSlots.Contains(skillSlots))                        {                            minA = angle;                            minSlots = skillSlots;                        }                    }                    if (minSlots != null)                    {                        showSkillSlots.Add(minSlots);                        EnemyGf_skill gfWidget = await UIManager.Instance.CreateGComponentForObject<EnemyGf_skill>(                            this.gf_widget,                            null,                            SkillRoot, poolName: bossWidgetKey, isInstance: true);                        gfWidget.InitWidget(minSlots, combatHeroEntity);                        gfWidget.transform.SetAsLastSibling();                        currShowGfWidget.Add(gfWidget);                    }                }            }        }        public async CTask ShowWidget(CombatHeroEntity combatHeroEntity)        {            this.combatHeroEntity = combatHeroEntity;            combatHeroSkillControl =                combatHeroEntity.CombatHeroSkillControl as CombatHeroSkillControl;            heroHpWidget =                await UIManager.Instance.CreateGComponentForObject<HeroHpWidget>(HeroHpWidget, null);            heroHpWidget.size = 330;            heroHpWidget.shieldSize = 100;            heroHpWidget.isFollowTarget = false;            heroHpWidget.Init(combatHeroEntity);            ReshSkill();            InitMagicWeapon();        }        private async CTask InitMagicWeapon()        {            int c = combatHeroEntity.heroMagicWeaponControl.MagicWeaponCount;            CombatMagicWeaponEntity[] combatMagicWeaponEntities =                combatHeroEntity.heroMagicWeaponControl.AllMagicWeapon;            for (int i = 0; i < c; i++)            {                CombatMagicWeaponEntity combatMagicWeaponEntity = combatMagicWeaponEntities[i];                MagicWeaponWidget shengShiEventWidget =                    await UIManager.Instance.CreateGComponentForObject<MagicWeaponWidget>(MagicWeaponWidget, null,                        FaBaoRoot,                        isInstance: true, poolName: bossFaBaoKey);                shengShiEventWidget.InitWidget(combatMagicWeaponEntity);            }        }        public void Update()        {            if (combatHeroEntity == null)            {                return;            }            for (int i = 0; i < currShowGfWidget.Count; i++)            {                currShowGfWidget[i].Update();            }        }    }}
 |