using System.Collections.Generic; using Animancer; using Animancer.TransitionLibraries; using Core.Language; using Fort23.Core; using Fort23.UTool; using GameLogic.Hero; using UnityEngine; using UnityEngine.AI; namespace Fort23.Mono { [UIBinding(prefab = "HeroInformationPanel")] public partial class HeroInformationPanel : UIPanel { private GameObjectPool modelObj; List HeroAttributeWidgets = new List(); private HeroInfo heroInfo; private void Init() { } protected override void AddEvent() { } protected override void DelEvent() { } public override void AddButtonEvent() { Btn_TuPo.onClick.AddListener(() => { int currentMiao = (int)((TimeHelper.ClientNow() - PlayerManager.Instance.myHero.heroData.upTime) / 1000); int allexp = currentMiao * PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei; if (PlayerManager.Instance.myHero.heroData.exp + allexp < PlayerManager.Instance.myHero.powerUpConfig.levelUpExp) { return; } if (PlayerManager.Instance.myHero.powerUpConfig.jingjie1 == heroInfo.powerUpConfig.jingjie1) { //小突破 if (PlayerManager.Instance.myHero.powerUpConfig.jingjie2 == heroInfo.powerUpConfig.jingjie2) { var heroAttributData = HeroHerlp.GetHeroChageHeroAttributeData(PlayerManager.Instance.myHero, heroInfo); HeroBreakthroughSuccessPanel.OpenPanel(heroAttributData); PlayerManager.Instance.myHero.Upgrade(); CustomInit(); } //大突破 else { PlayerManager.Instance.myHero.Upgrade(); CustomInit(); } } }); Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); }); } public async CTask CustomInit() { ClosePool(); await CreatHero(); heroInfo = new HeroInfo(); heroInfo.InitHero(PlayerManager.Instance.myHero.heroData.heroModelId, PlayerManager.Instance.myHero.heroData.heroPowerId + 1); HeroAttributeWidget heroAttributeWidget = await UIManager.Instance.CreateGComponent(null, AttributeRoot); heroAttributeWidget.CustomInit(new HeroAttributeData("生命", PlayerManager.Instance.myHero.hp.Value.ToString(), "+" + (heroInfo.hp.Value - PlayerManager.Instance.myHero.hp.Value).ToString())); HeroAttributeWidgets.Add(heroAttributeWidget); heroAttributeWidget = await UIManager.Instance.CreateGComponent(null, AttributeRoot); heroAttributeWidget.CustomInit(new HeroAttributeData("攻击", PlayerManager.Instance.myHero.attack.Value.ToString(), "+" + (heroInfo.attack.Value - PlayerManager.Instance.myHero.attack.Value).ToString())); HeroAttributeWidgets.Add(heroAttributeWidget); heroAttributeWidget = await UIManager.Instance.CreateGComponent(null, AttributeRoot); heroAttributeWidget.CustomInit(new HeroAttributeData("防御", PlayerManager.Instance.myHero.defense.Value.ToString(), "+" + (heroInfo.defense.Value - PlayerManager.Instance.myHero.defense.Value).ToString())); HeroAttributeWidgets.Add(heroAttributeWidget); Slider_Exp.maxValue = PlayerManager.Instance.myHero.powerUpConfig.levelUpExp; Slider_Exp.value = PlayerManager.Instance.myHero.heroData.exp; // // heroAttributeWidget = await UIManager.Instance.CreateGComponent(null, AttributeRoot); // heroAttributeWidget.CustomInit("生命", PlayerManager.Instance.myHero.hp.Value.ToString(), (heroInfo.hp.Value - PlayerManager.Instance.myHero.hp.Value).ToString()); // HeroAttributeWidgets.Add(heroAttributeWidget); Text_Jingjie.text = LanguageManager.Instance.Text(PlayerManager.Instance.myHero.powerUpConfig.jingjieLanIDs[0]) + LanguageManager.Instance.Text(PlayerManager.Instance.myHero.powerUpConfig.jingjieLanIDs[1]) + LanguageManager.Instance.Text(PlayerManager.Instance.myHero.powerUpConfig.jingjieLanIDs[2]); Text_Level.text = $"LV{PlayerManager.Instance.myHero.level}"; int currentMiao = (int)((TimeHelper.ClientNow() - PlayerManager.Instance.myHero.heroData.upTime) / 1000); int allexp = currentMiao * PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei; int miao = (PlayerManager.Instance.myHero.powerUpConfig.levelUpExp - (PlayerManager.Instance.myHero.heroData.exp + allexp)) / PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei; if (miao > 0) { Text_Speed.text = $"修炼速度:{PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei}/秒 | 下次突破时间{miao}秒"; } else { Text_Speed.text = $"修炼速度:{PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei}/秒 | 可以突破"; } Text_exp.text = $"{PlayerManager.Instance.myHero.exp}/{PlayerManager.Instance.myHero.powerUpConfig.levelUpExp}"; } [CustomMethod(CustomMethodType.Update)] public void Update() { int currentMiao = (int)((TimeHelper.ClientNow() - PlayerManager.Instance.myHero.heroData.upTime) / 1000); int allexp = currentMiao * PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei; Slider_Exp.value = PlayerManager.Instance.myHero.heroData.exp + allexp; Text_exp.text = $"{PlayerManager.Instance.myHero.heroData.exp + allexp}/{PlayerManager.Instance.myHero.powerUpConfig.levelUpExp}"; int miao = (PlayerManager.Instance.myHero.powerUpConfig.levelUpExp - (PlayerManager.Instance.myHero.heroData.exp + allexp)) / PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei; if (miao > 0) { Text_Speed.text = $"修炼速度:{PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei}/秒 | 下次突破时间{miao}秒"; } else { Text_Speed.text = $"修炼速度:{PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei}/秒 | 可以突破"; } } private async CTask CreatHero() { modelObj = await GObjectPool.Instance.FetchAsync(PlayerManager.Instance.myHero.modelConfig.model + ".prefab", null); modelObj.own.transform.parent = HeroRoot; modelObj.own.transform.localEulerAngles = new Vector3(0, 180, 0); modelObj.own.transform.localPosition = new Vector3(0, -132, 0); modelObj.own.transform.localScale = Vector3.one * 330; ChangeLayerRecursively(modelObj.own, LayerMask.NameToLayer("UI")); var modelAnimComponent = modelObj.own.GetComponent(); int max = modelAnimComponent.Transitions.Library.Count; for (int i = 0; i < max; i++) { if (modelAnimComponent.Transitions.Library.TryGetTransition(i, out TransitionModifierGroup transition)) { var modelIdleClip = transition.Transition as TransitionAsset; if (modelIdleClip != null && modelIdleClip.name == "idle") { modelAnimComponent.Play(modelIdleClip); break; } } } } public void ChangeLayerRecursively(GameObject obj, int newLayer) { if (obj == null || obj.layer == newLayer) return; // 修改当前对象的 Layer obj.layer = newLayer; // 遍历所有子对象,递归修改 foreach (Transform child in obj.transform) { ChangeLayerRecursively(child.gameObject, newLayer); } } public async static CTask OpenPanel() { HeroInformationPanel heroInformationPanel = await UIManager.Instance.LoadAndOpenPanel(null); heroInformationPanel.CustomInit(); return heroInformationPanel; } public override void Close() { ClosePool(); base.Close(); } private void ClosePool() { UIManager.Instance.DormancyGComponent(modelObj); modelObj = null; foreach (var heroAttributeWidget in HeroAttributeWidgets) { UIManager.Instance.DormancyGComponent(heroAttributeWidget); } HeroAttributeWidgets.Clear(); } } }