using System.Collections.Generic;
using System.Threading.Tasks;
using Common.Utility.CombatEvent;
using Core.Language;
using Core.Utility;
using Excel2Json;
using Fort23.Core;
using Fort23.UTool;
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();
LevelUpdate(null);
CheckEquipRedPoint(null);
}
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);
EventManager.Instance.AddEventListener(CustomEventType.LevelUpdate, LevelUpdate);
CombatEventManager.Instance.AddEventListener(CombatEventType.HeroHpUpdate, HeroHpUpdateEventData);
EventManager.Instance.AddEventListener(CustomEventType.ShowBattleExp, ShowBattleExp);
EventManager.Instance.AddEventListener(CustomEventType.StartBossBattle, StartBossBattle);
EventManager.Instance.AddEventListener(CustomEventType.ShowDialogue, ShowDialogue);
EventManager.Instance.AddEventListener(CustomEventType.AlterCombatHero, AlterCombatHero);
EventManager.Instance.AddEventListener(CustomEventType.PlayerUseSkill, PlayerUseSkill);
EventManager.Instance.AddEventListener(CustomEventType.OnCloseHeroPanel, OnHeroPanelClose);
EventManager.Instance.AddEventListener(CustomEventType.Combat_EquipFall, CheckEquipRedPoint);
EventManager.Instance.AddEventListener(CustomEventType.HeroEquip, CheckEquipRedPoint);
EventManager.Instance.AddEventListener(CustomEventType.AlterCombatHero, OnCombatHeroChange);
}
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);
EventManager.Instance.RemoveEventListener(CustomEventType.LevelUpdate, LevelUpdate);
CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroHpUpdate, HeroHpUpdateEventData);
EventManager.Instance.RemoveEventListener(CustomEventType.ShowBattleExp, ShowBattleExp);
EventManager.Instance.RemoveEventListener(CustomEventType.ShowDialogue, ShowDialogue);
EventManager.Instance.RemoveEventListener(CustomEventType.AlterCombatHero, AlterCombatHero);
EventManager.Instance.RemoveEventListener(CustomEventType.OnCloseHeroPanel, OnHeroPanelClose);
EventManager.Instance.RemoveEventListener(CustomEventType.Combat_EquipFall, CheckEquipRedPoint);
EventManager.Instance.RemoveEventListener(CustomEventType.HeroEquip, CheckEquipRedPoint);
EventManager.Instance.RemoveEventListener(CustomEventType.AlterCombatHero, OnCombatHeroChange);
}
///
/// 战斗英雄改变
///
///
private void OnCombatHeroChange(IEventData e)
{
if (PlayerManager.Instance.heroController.heroDicInLead.Count >= 4)
{
box.gameObject.SetActive(true);
}
else
{
box.gameObject.SetActive(false);
}
}
///
/// 检查装备小红点
///
///
private void CheckEquipRedPoint(IEventData e)
{
// Combat_EquipFallEventData data = e as Combat_EquipFallEventData;
bool betterEqs = PlayerManager.Instance.eqController.IsBetterEqs();
if (betterEqs && PlayerManager.Instance.heroController.allHeroDic.Count > 1)
{
alterObj1.SetActive(true);
}
else
{
alterObj1.SetActive(false);
}
}
private void OnHeroPanelClose(IEventData e)
{
int i = 0;
bool b = false;
foreach (WidgetHero widgetHero in widgetHeroes)
{
if (b)
{
break;
}
if (HeroUITools.IsLvUpShowGuild(widgetHero.heroInfo))
{
RectTransform rectTransform = hero_battle[i] as RectTransform;
TxtGuildPanel.OpenTxtGuildPanel(LanguageManager.Instance.Text(154), new Vector2(rectTransform.position.x,
rectTransform.position.y + 0.6f));
b = true;
}
i++;
}
if (!b)
{
TxtGuildPanel.CloseTxtGuildPanel();
}
}
private void PlayerUseSkill(IEventData iEventData)
{
Button_huiQiu_tween.Play("show", false);
}
private void StartBossBattle(IEventData iEventData)
{
UIManager.Instance.LoadAndOpenPanel(null, UILayer.Middle);
}
private void ShowDialogue(IEventData iEventData)
{
ShowDialogueEventData dialogueData = iEventData as ShowDialogueEventData;
string[] dialogueMessaga = dialogueData.dialogueMessaga;
string[] icon = dialogueData.icon;
System.Action finis = dialogueData.finish;
ShowDialogueEventData.MessageShowType messageShowTyp = dialogueData.messageShowType;
DialoguePanel.OpenDialoguePanel(dialogueMessaga, icon, messageShowTyp, finis);
}
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();
}
}
public override void AddButtonEvent()
{
btnHeroBag.onClick.AddListener(OnClickHeroBag);
Button_battleBoss.onClick.AddListener(OnClickButtonBattleBoss);
box.onClick.AddListener(OnOpenBox);
Button_huiQiu.onClick.AddListener(OnClickPlayerSkill);
Icon_HeroExp_button.onClick.AddListener(OnClickIcon_HeroExp_button);
Icon_Coin_button.onClick.AddListener(OnClickIcon_Coin_button);
Icon_Diamon_button.onClick.AddListener(OnClickIcon_Diamon_button);
}
private void OnClickIcon_HeroExp_button()
{
// TipMessagePanel.OpenTipMessagePanel("英雄经验,可用于升级英雄等级(每杀死一个小怪能获得经验,击杀boss能获得大量经验)",
// new Vector2(Icon_HeroExp_button.transform.position.x, Icon_HeroExp_button.transform.position.y - 0.5f));
TipMessagePanel.OpenTipMessagePanel(LanguageManager.Instance.Text(104),
new Vector2(Icon_HeroExp_button.transform.position.x, Icon_HeroExp_button.transform.position.y - 0.5f));
}
private void OnClickIcon_Coin_button()
{
// TipMessagePanel.OpenTipMessagePanel("金币,用于抽取英雄宝箱(每杀死一个小怪有几率获得金币,击杀boss能获得大量金币)",
// new Vector2(Icon_Coin_button.transform.position.x, Icon_Coin_button.transform.position.y - 0.5f));
TipMessagePanel.OpenTipMessagePanel(LanguageManager.Instance.Text(105),
new Vector2(Icon_Coin_button.transform.position.x, Icon_Coin_button.transform.position.y - 0.5f));
}
private void OnClickIcon_Diamon_button()
{
TipMessagePanel.OpenTipMessagePanel(LanguageManager.Instance.Text(106),
new Vector2(Icon_Diamon_button.transform.position.x, Icon_Diamon_button.transform.position.y - 0.5f));
}
private void OnOpenBox()
{
BoxPanel.OpenBoxPanel();
}
private async void OnClickButtonBattleBoss()
{
if (AccountFileInfo.Instance.playerData.isAllHeroDie)
{
LevelBattleCombatType levelBattleCombatType =
CombatController.currActiveCombat.CombatTypeBasic as LevelBattleCombatType;
levelBattleCombatType.StartBossCombat();
Button_battleBoss.gameObject.SetActive(false);
}
}
private async void OnClickPlayerSkill()
{
Debug.Log("显示描述");
RectTransform huoQiu = Button_huiQiu.GetComponent();
// TipMessagePanel.OpenTipMessagePanel("点击屏幕空白处从天空中召唤一个陨石,对怪物造成1点伤害,并有30%概率获得1枚金币(boss怪40%掉落,金币数量+2)",
// new Vector2(huoQiu.position.x, huoQiu.position.y + 0.5f));
TipMessagePanel.OpenTipMessagePanel(LanguageManager.Instance.Text(107),
new Vector2(huoQiu.position.x, huoQiu.position.y + 0.5f));
}
private async void OnClickHeroBag()
{
HeroBagPanel heroBagPanel = await UIManager.Instance.LoadAndOpenPanel(null, isFullUI: true);
heroBagPanel.InitPanel();
}
private void AlterCombatHero(IEventData e)
{
InitHeroWidget();
}
private void OnItemUpdate(IEventData e)
{
ItemUpdateData data = e as ItemUpdateData;
if (data.ItemInfo.itemID == GlobalParam.Item_Coin_ID)
{
txtCoin.text = BagController.Instance.GetItemInfo(GlobalParam.Item_Coin_ID).count.Value.ToStringEx();
}
else if (data.ItemInfo.itemID == GlobalParam.Item_Diamond_ID)
{
txtDiamond.text = BagController.Instance.GetItemInfo(GlobalParam.Item_Diamond_ID).count.Value
.ToStringEx();
}
else if (data.ItemInfo.itemID == GlobalParam.Item_HeroExp_ID)
{
txtHeroExp.text = BagController.Instance.GetItemInfo(GlobalParam.Item_HeroExp_ID).count.Value
.ToStringEx();
}
}
private void LevelUpdate(IEventData eventData)
{
int levelBattle = AccountFileInfo.Instance.playerData.levelBattle;
LevelBattleConfig levelBattleConfig = ConfigComponent.Instance.Get(levelBattle);
levelName.text = levelBattleConfig.levelName;
}
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();
OnHeroPanelClose(null);
}
protected void UpdateBossHp()
{
Slider_Hp_Boss.value = bossHeroEntity.CurrCombatHeroInfo.hp.Value * 1.0f /
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;
if (levelBattleCombatType.exp >= levelBattleCombatType.CurrMaxExp) // 到达目标值,开始打boss
{
if (!levelBattleCombatType.isBossCombat && AccountFileInfo.Instance.playerData.isAllHeroDie)
{
Button_battleBoss.gameObject.SetActive(true);
}
}
else
{
Button_battleBoss.gameObject.SetActive(false);
}
}
// 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;
// }
// }
// }
public List widgetHeroes = new List();
///
/// 把主界面的几个英雄UI归位
///
///
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()
{
Button_battleBoss.gameObject.SetActive(false);
InitHeroWidget();
// RectTransform rectTransform = hero_battle[0] as RectTransform;
}
private async void InitHeroWidget()
{
for (int j = 0; j < widgetHeroes.Count; j++)
{
UIManager.Instance.DormancyGComponent(widgetHeroes[j]);
}
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);
itemHero.own.gameObject.name= "hero_battle"+i;
widgetHeroes.Add(itemHero);
// if (HeroUITools.IsLvUpShowGuild(keyValuePair.Value))
// {
// TxtGuildPanel.OpenTxtGuildPanel("点这里提升英雄", new Vector2(rectTransform.position.x,
// rectTransform.position.y + 0.6f));
// }
i++;
}
OnHeroPanelClose(null);
}
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();
OnCombatHeroChange(null);
}
}
}