using Animancer;
using Animancer.TransitionLibraries;
using Common.Utility.CombatEvent;
using Core.Language;
using Core.Utility;
using Excel2Json;
using Fort23.Core;
using Fort23.UTool;
using GameLogic.Bag;
using GameLogic.Hero;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.UI;
using Utility;
namespace Fort23.Mono
{
[UIBinding(prefab = "HeroDetailPanel" )]
public partial class HeroDetailPanel : UIPanel
{
private HeroInfo heroInfo;
private void Init()
{
// InitHeroDetailPanel();
}
protected override void AddEvent()
{
}
protected override void DelEvent()
{
}
public override void AddButtonEvent()
{
btnBack.onClick.AddListener(OnClickClose);
btnUpgrade.onClick.AddListener(OnClickUpgrade);
btnPromote.onClick.AddListener(OnClickPromote);
}
private void OnClickPromote()
{
if (PlayerManager.Instance.gameConstantConfig.maxStar <= heroInfo.star.Value)
{
LogTool.Log("已到达最高星级:" + PlayerManager.Instance.gameConstantConfig.maxStar);
return;
}
// heroInfo.modelConfig.itemID
if (BagController.Instance.DeductItem(heroInfo.modelConfig.itemID, heroInfo.promoteConfig.costCount))
{
heroInfo.Promote();
UpdateAttributeUI();
HeroUITools.SetStarShow(stars, heroInfo.star.Value);
SendEvent(HeroUpType.Promote);
}
}
private void OnClickUpgrade()
{
if (PlayerManager.Instance.gameConstantConfig.maxLv <= heroInfo.level.Value)
{
LogTool.Log("已到达最高等级:" + PlayerManager.Instance.gameConstantConfig.maxLv);
return;
}
if (BagController.Instance.DuctHeroExp(heroInfo.powerUpConfig.levelUpExp))
{
heroInfo.Upgrade();
UpdateAttributeUI();
SendEvent(HeroUpType.Level);
}
}
///
/// 发送英雄提升的事件
///
/// 提升类型:升级、升星等.
private void SendEvent(HeroUpType upType)
{
HeroPowerUpEventData data = new HeroPowerUpEventData();
data.heroModelID = heroInfo.modelID;
data.upType = upType;
PlayerManager.Instance.lastHeroInfo = heroInfo;
EventManager.Instance.Dispatch(CustomEventType.HeroPowerUp, data);
if (upType == HeroUpType.Level)
{
EventManager.Instance.Dispatch(CustomEventType.HeroLvUp, data);
}
else if (upType == HeroUpType.Promote)
{
EventManager.Instance.Dispatch(CustomEventType.HeroPromote, data);
}
}
private void OnClickClose()
{
UIManager.Instance.HideUIUIPanel(this);
GObjectPool.Instance.Recycle(modelObj);
}
private GameObjectPool modelObj;
public async void InitHeroDetailPanel(HeroInfo heroInfo)
{
this.heroInfo = heroInfo;
iconZhiYe.icon_name = heroInfo.iconZhiYe;
heroName.text = LanguageManager.Instance.Text(heroInfo.modelConfig.name);
HeroUITools.SetStarShow(stars, heroInfo.star.Value);
// GameObjectPool poolInterface =
// await GObjectPool.Instance.FetchAsync(heroInfo.modelConfig.model + ".prefab", null);
modelObj = await GObjectPool.Instance.FetchAsync(heroInfo.modelConfig.model + ".prefab",
delegate(GameObjectPool pool)
{
pool.own.GetComponent().enabled = false;
pool.own.transform.parent = ModelPos;
pool.own.transform.localEulerAngles = new Vector3(0, 180, 0);
pool.own.transform.localPosition = new Vector3(0, 0.2f, 0);
AnimancerComponent animancerComponent = pool.own.GetComponent();
int max = animancerComponent.Transitions.Library.Count;
for (int i = 0; i < max; i++)
{
if (animancerComponent.Transitions.Library.TryGetTransition(i,
out TransitionModifierGroup transition))
{
TransitionAsset clipTransition2 = transition.Transition as TransitionAsset;
if (clipTransition2 != null && clipTransition2.name == "idle")
{
animancerComponent.Play(clipTransition2);
break;
}
}
}
HeroUITools.ChangeLayerRecursively(pool.own, LayerMask.NameToLayer("UI"));
});
switch (heroInfo.modelConfig.rarity)
{
case 1:
heroRarity.text = LanguageManager.Instance.Text(32);
break;
case 2:
heroRarity.text = LanguageManager.Instance.Text(31);
break;
case 3:
heroRarity.text = LanguageManager.Instance.Text(30);
break;
default:
LogTool.Error("找不到hero的稀有度:" + heroInfo.modelConfig.ID);
break;
}
UpdateAttributeUI();
}
public void UpdateAttributeUI()
{
txtHP.text = heroInfo.hp.Value.ToStringEx();
txtATK.text = heroInfo.attack.Value.ToStringEx();
txtDEF.text = heroInfo.defense.Value.ToStringEx();
txtSHANBI.text = heroInfo.shanbi.Value.ToStringEx();
txtLv.text = heroInfo.level.Value.ToStringEx();
txtExpGain.text = heroInfo.expGain.Value.ToStringEx();
string redColorStar = "";
string redColorEnd = "";
long curExp = BagController.Instance.GetItemInfo(GlobalParam.Item_HeroExp_ID).count.Value;
long costExp = heroInfo.powerUpConfig.levelUpExp;
if (costExp > curExp)
{
redColorStar = "";
redColorEnd = "";
}
else
{
redColorStar = "";
redColorEnd = "";
}
txtUpgrade.text = redColorStar + curExp + redColorEnd + "/" + costExp;
long curHeroCount = BagController.Instance.GetItemInfo(heroInfo.modelConfig.itemID).count.Value;
long costHeroCount = heroInfo.promoteConfig.costCount;
if (costHeroCount > curHeroCount)
{
redColorStar = "";
redColorEnd = "";
}
else
{
redColorStar = "";
redColorEnd = "";
}
txtPromote.text = redColorStar + curHeroCount + redColorEnd + "/" + costHeroCount;
}
}
}