using System.Collections.Generic; using System.Threading.Tasks; using Common.Utility.CombatEvent; using Core.Utility; using Fort23.Core; using GameLogic.Bag; using GameLogic.Combat.CombatTool; using GameLogic.Combat.CombatType; using GameLogic.Hero; using UnityEngine; using Utility; namespace Fort23.Mono { [UIBinding(prefab = "MainUIPanel")] public partial class MainUIPanel : UIPanel { private CombatHeroEntity bossHeroEntity; private void Init() { InitRes(); InitBattleHeroWidget(); } protected override void AddEvent() { CombatEventManager.Instance.AddEventListener(CombatEventType.CombatExpAlter, CombatExpAlter); EventManager.Instance.AddEventListener(CustomEventType.HeroPowerUp, OnHeroPowerUp); EventManager.Instance.AddEventListener(CustomEventType.ItemUpdate, OnItemUpdate); EventManager.Instance.AddEventListener(CustomEventType.ShowBossHp, ShowBossHp); CombatEventManager.Instance.AddEventListener(CombatEventType.HeroHpUpdate, HeroHpUpdateEventData); EventManager.Instance.AddEventListener(CustomEventType.ShowBattleExp, ShowBattleExp); EventManager.Instance.AddEventListener(CustomEventType.StartBossBattle, StartBossBattle); } private void StartBossBattle(IEventData iEventData) { UIManager.Instance.LoadAndOpenPanel(null, UILayer.Top); } private void ShowBattleExp(IEventData iEventData) { bossHp.SetActive(false); Slider_Exp_Process.SetActive(true); bossHeroEntity = null; } private void HeroHpUpdateEventData(IEventData iEventData) { HeroHpUpdateEventData heroHpUpdateEventData = iEventData as HeroHpUpdateEventData; if (heroHpUpdateEventData.combatHeroEntity == bossHeroEntity) { UpdateBossHp(); } } protected override void DelEvent() { CombatEventManager.Instance.RemoveEventListener(CombatEventType.CombatExpAlter, CombatExpAlter); EventManager.Instance.RemoveEventListener(CustomEventType.HeroPowerUp, OnHeroPowerUp); EventManager.Instance.RemoveEventListener(CustomEventType.ItemUpdate, OnItemUpdate); EventManager.Instance.RemoveEventListener(CustomEventType.ShowBossHp, ShowBossHp); CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroHpUpdate, HeroHpUpdateEventData); EventManager.Instance.RemoveEventListener(CustomEventType.ShowBattleExp, ShowBattleExp); } public override void AddButtonEvent() { } private void OnItemUpdate(IEventData e) { ItemUpdateData data = e as ItemUpdateData; if (data.ItemInfo.ID == GlobalParam.Item_Coin_ID) { txtCoin.text = BagController.Instance.GetItemInfo(GlobalParam.Item_Coin_ID).count.Value.ToStringEx(); } else if (data.ItemInfo.ID == GlobalParam.Item_Diamond_ID) { txtDiamond.text = BagController.Instance.GetItemInfo(GlobalParam.Item_Diamond_ID).count.Value.ToStringEx(); } else if (data.ItemInfo.ID == GlobalParam.Item_HeroExp_ID) { txtHeroExp.text = BagController.Instance.GetItemInfo(GlobalParam.Item_HeroExp_ID).count.Value.ToStringEx(); } } private void ShowBossHp(IEventData eventData) { ShowBossHpEventData showBossHpEventData = eventData as ShowBossHpEventData; bossHeroEntity = showBossHpEventData.boss; bossHp.SetActive(true); Slider_Exp_Process.SetActive(false); bossName.text = bossHeroEntity.CurrCombatHeroInfo.heroName; UpdateBossHp(); } protected void UpdateBossHp() { Slider_Hp_Boss.value = bossHeroEntity.CurrCombatHeroInfo.hp.Value * 1.0f / bossHeroEntity.MaxCombatHeroInfo.hp.Value; bossHpText.text = bossHeroEntity.CurrCombatHeroInfo.hp.Value + "/" + bossHeroEntity.MaxCombatHeroInfo.hp.Value; } private void CombatExpAlter(IEventData eventData) { ExpAlter(); } private void ExpAlter() { if (CombatController.currActiveCombat == null || CombatController.currActiveCombat.CombatTypeBasic == null) { return; } LevelBattleCombatType levelBattleCombatType = CombatController.currActiveCombat.CombatTypeBasic as LevelBattleCombatType; float bl = (levelBattleCombatType.exp * 1.0f) / levelBattleCombatType.CurrMaxExp; exp.value = bl; TextExp.text = levelBattleCombatType.exp + "/" + levelBattleCombatType.CurrMaxExp; } private void OnHeroPowerUp(IEventData eventData) { HeroPowerUpEventData data = eventData as HeroPowerUpEventData; HeroInfo heroInfo = (HeroInfo)PlayerManager.Instance.heroController.GetHeroInfo(data.heroModelID); foreach (WidgetHero widgetHero in widgetHeroes) { if (widgetHero.heroInfo.modelID == heroInfo.modelID) { widgetHero.UpdateWidgetUI(heroInfo); break; } } } private List widgetHeroes = new List(); public void RestWidgetHeroPos(WidgetHero wh) { Vector3 v; Vector3 origin; foreach (WidgetHero w in widgetHeroes) { if (wh != null && w.Equals(wh)) { continue; } v = w.transform.parent.localPosition; if (v.y > 0) { origin = new Vector3(v.x, 0, v.z); w.transform.parent.localPosition = origin; w.SetMoreBtnActive(false); } } } private async void InitBattleHeroWidget() { widgetHeroes.Clear(); int i = 0; foreach (KeyValuePair keyValuePair in PlayerManager.Instance.heroController.heroDicInLead) { RectTransform rectTransform = hero_battle[i] as RectTransform; WidgetHero itemHero = await UIManager.Instance.CreateGComponent(null, poolName: "WidgetHero", root: rectTransform); itemHero.InitHero(keyValuePair.Value); widgetHeroes.Add(itemHero); i++; } } private void InitRes() { txtDiamond.text = BagController.Instance.GetItemInfo(GlobalParam.Item_Diamond_ID).count.Value.ToStringEx(); txtCoin.text = BagController.Instance.GetItemInfo(GlobalParam.Item_Coin_ID).count.Value.ToStringEx(); txtHeroExp.text = BagController.Instance.GetItemInfo(GlobalParam.Item_HeroExp_ID).count.Value.ToStringEx(); } } }