using cfg.CharacterCfg; using cfg.SkillCfg; using DG.Tweening; using Framework; using Gameplay.Net; using NLDPB; using System; using System.Collections; using System.Collections.Generic; using Cysharp.Threading.Tasks; using Gameplay; using PhxhSDK; using TMPro; using UnityEngine; using Button = UnityEngine.UI.Button; using Constants = Framework.Constants; using Image = UnityEngine.UI.Image; using UnityEngine.UI; public class UIAdvanceController : UIWindow { //UI GameObj ///Auto Gen Start/// public Image Image_BG; public Image Image_Poster; public Button Button_Back; public Button Button_Home; public TMP_Text Text_Hp01; public TMP_Text Text_Hp02; public TMP_Text Text_Morale01; public TMP_Text Text_Morale02; public TMP_Text Text_Defense01; public TMP_Text Text_Defense02; public TMP_Text Text_Armor01; public TMP_Text Text_Armor02; public TMP_Text Text_Attack01; public TMP_Text Text_Attack02; public TMP_Text Text_Speed01; public TMP_Text Text_Speed02; public TMP_Text Text_RankLevel01; public TMP_Text Text_Rank_Value01; public Image Image_ArrowToRight; public TMP_Text Text_RankLevel02; public TMP_Text Text_Rank_Value02; public Image Image_Red; public Image Image_Green02; public Button Button_Cannot; public TMP_Text Text_Cannot_Confirm; public Button Button_Confirm; public TMP_Text Text_Confirm; public Button Button_Cancel; public Image Image_AdvanceLogo_Dark; public Image Image_AdvanceLogo; public Image Image_Skill_01; public TMP_Text Text_SkillName01; public TMP_Text Text_SkillInfo01; public Image Image_Arrow; public Image Image_Skill_02; public TMP_Text Text_SkillName02; public TMP_Text Text_SkillInfo02; public TMP_Text Text_SkillName03; public TMP_Text Text_SkillInfo03; ///Auto Gen End/// public static async UniTask Open(CharacterDataInfo characterDataInfo) { await CommonUtils.CaptureScreenshot(); return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UIAdvance, characterDataInfo); } #region 类 /// /// 升级材料 /// private class Materal : UIGameObjectWrapper { private TMP_Text textValue; private GameObject goRed; private GameObject goGreen; private GenericItem genericItem; public Materal(GameObject root) : base(root) { textValue = GetComponent("value"); goRed = FindObj("Image_Red"); goGreen = FindObj("Image_Green02"); genericItem = new(FindObj("item/GenericItem")); } public void SetInfo(int itemId, int count) { textValue.text = $"{Actor.Instance.Item.GetItemCount(itemId)}/{count}"; goRed.IsScaleShow(!(Actor.Instance.Item.GetItemCount(itemId) >= count)); goGreen.IsScaleShow(Actor.Instance.Item.GetItemCount(itemId) >= count); genericItem.SetInfo(itemId, 0); IsScaleShow = true; } public override void Dispose() { base.Dispose(); genericItem.Dispose(); } } /// /// 台词类 /// private class Dialogue : UIGameObjectWrapper { /// /// 角色名 /// private TMP_Text textName; /// /// 角色类型 /// private TMP_Text textContent; public Dialogue(GameObject root) : base(root) { textName = GetComponent("Text_Name"); textContent = GetComponent("Text_Describe"); } public void SetInfo(string name) { textName.text = name; } public void SetDialogue(string content) { textContent.text = content; } } #endregion /// /// 高斯模糊遮罩 /// private RawImage rawImageGaussianBlurMask; CharacterDataInfo mCharacterDataInfo; CharacterAwaking mCharacterAwakeCfg; List mFlagObj; private int mTargetLevel; private int maxLevel; private bool IsMaterial; private List allIconObj; GameObject curLevelLogo; //DataCharacterAwaking curAwakeLevelData; GameObject nextLevelLogo; //DataCharacterAwaking nextAwakeLevelData; private Animator mAnimator; /// /// 升级材料列表 /// private readonly List listMateral = new(3); /// /// 台词语音 /// private AudioInst dialogueAudio; /// /// 台词UI /// private Dialogue dialogue; /// /// 是否正在播放台词语音 /// public bool IsDialoguePlaying { get { return dialogueAudio != null && dialogueAudio.IsPlaying; } } // Use this for initialization public override void PreLoad(object data = null) { base.PreLoad(data); mCharacterDataInfo = data as CharacterDataInfo; #region 预加载等级图标 for (int j = 1; j <= Constants.ADVANCE_FLAG_UI; j++) { var cfg = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)j); DebugUtil.Log("预加载" + cfg.IconLightPath + ", " + cfg.IconDarkPath); AssetManager.Instance.PostPreload(Constants.UI_Cultivata_AwakeIconFolder + cfg.IconLightPath).Forget(); AssetManager.Instance.PostPreload(Constants.UI_Cultivata_AwakeIconFolder + cfg.IconDarkPath).Forget(); } #endregion } public override void OnInit() { //bind UI GameObj UIAdvanceBinder.GetComponents(this); rawImageGaussianBlurMask = GetComponent("GaussianBlurMask"); Transform tsMateralRoot = FindObj("Image_BG/UI_Materals").transform; rawImageGaussianBlurMask.texture = CommonUtils.GetScreenTexture2D(); for (int i = 0; i < tsMateralRoot.childCount; ++i) { listMateral.Add(new Materal(tsMateralRoot.GetChild(i).gameObject)); } dialogue = new(FindObj("Image_BG/Image_ActorLineBG")); BindButton(Button_Back, OnButton_BackClick); BindButton(Button_Confirm, OnButton_Confirm); BindButton(Button_Cancel, OnButton_Cancel); BindButton(Button_Home, OnClickHome); allIconObj = new List(); for (var i = 0; i < 5; i++) { allIconObj.Add(FindObj($"Image_BG/UI_Advance_Logo/{(i + 1).ToString()}")); allIconObj[i].SetActive(false); } mAnimator = this.GetComponent(); Text_SkillName03 = GetComponent("Image_BG/UI_SkillInfo/Image_Skill_03/Text_SkillName03"); Text_SkillInfo03 = GetComponent("Image_BG/UI_SkillInfo/Image_Skill_03/Text_SkillInfo03"); RefreshBase(); //RefreshAdvanceLogo();//OnShowWindow()内,RefreshBreakLevelLvUpAbout()会刷新 RegisterEvent(); } private void OnClickHome() { UIManager.Instance.CloseAllNormalExcept(UINameConst.UI_MainPanel); } private void RefreshAdvanceLogo() { for (var i = 0; i < Constants.ADVANCE_FLAG_UI; i++) { var obj = FindObj($"Image_BG/UI_Advance_Logo/{(i + 1).ToString()}"); //if (i < mCharacterDataInfo.AwakeLevel + 1) //{ // DataCharacterAwaking tempCfg; // if (IsMaxLevel()) // { // var j = (int)mCharacterDataInfo.AwakeLevel - i; // // tempCfg = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)j); // obj.GetComponent().sprite = AssetManager.Instance.GetPreLoadResult(Constants.UI_Cultivata_AwakeIconFolder + tempCfg.IconLightPath); // } // else // { // var j = (int)mCharacterDataInfo.AwakeLevel + 1 - i; // tempCfg = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)j); // // if (i == 0) // { // obj.GetComponent().sprite = AssetManager.Instance.GetPreLoadResult(Constants.UI_Cultivata_AwakeIconFolder + tempCfg.IconDarkPath); // } // else // { // obj.GetComponent().sprite = AssetManager.Instance.GetPreLoadResult(Constants.UI_Cultivata_AwakeIconFolder + tempCfg.IconLightPath); // } // // } // if (i != mCharacterDataInfo.AwakeLevel) //当前等级 // { // var temp5Obj = FindObj("Image_BG/UI_Advance_Logo/5"); // // temp5Obj.GetComponent().sprite = AssetManager.Instance.GetPreLoadResult // (Constants.UI_Cultivata_AwakeIconFolder + tempCfg.IconDarkPath); // temp5Obj.SetActive(false); // } // obj.SetActive(true); //} //else //{ // obj.SetActive(false); //} DataCharacterAwaking tempCfg; if (IsMaxLevel()) { var j = (int)mCharacterDataInfo.AwakeLevel - i; tempCfg = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)j); obj.GetComponent().sprite = AssetManager.Instance.GetPreLoadResult(Constants.UI_Cultivata_AwakeIconFolder + tempCfg.IconDarkPath); curLevelLogo = obj; obj.transform.position = FindObj("Image_BG/UI_Advance_Logo/LastLevelPoint").transform.position; break; } else { if (i > mCharacterDataInfo.AwakeLevel) { obj.SetActive(false); } else if (i == 0)//下一等级标签 { var nextLevel = (int)mCharacterDataInfo.AwakeLevel + 1 - i; tempCfg = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)nextLevel); obj.GetComponent().sprite = AssetManager.Instance.GetPreLoadResult(Constants.UI_Cultivata_AwakeIconFolder + tempCfg.IconLightPath); nextLevelLogo = obj; obj.transform.position = FindObj("Image_BG/UI_Advance_Logo/CurrentLevelPoint").transform.position; obj.SetActive(true); } else if (i == 1)//当前等级标签 { var tagLevel = (int)mCharacterDataInfo.AwakeLevel + 1 - i; tempCfg = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)tagLevel); obj.GetComponent().sprite = AssetManager.Instance.GetPreLoadResult(Constants.UI_Cultivata_AwakeIconFolder + tempCfg.IconDarkPath); curLevelLogo = obj; obj.transform.position = FindObj("Image_BG/UI_Advance_Logo/LastLevelPoint").transform.position; obj.SetActive(true); } else { obj.SetActive(false); } } } } private void OnButton_Cancel() { if (mTargetLevel == (int)mCharacterDataInfo.AwakeLevel + 1) { return; } mTargetLevel = (int)mCharacterDataInfo.AwakeLevel + 1; RefreshBreakLevelLvUpAbout(); } private void OnButton_Confirm() { if (IsMaxLevel()) { return; } if(!IsMaterial) { CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_AwakeMaterialNotFull")); return; } NetHelper.CharacterUpgrade(mCharacterDataInfo.ID, NLDPB.UpgradeType.UtAwake, (uint)mTargetLevel); } private void OnButton_BackClick() { CloseWindow(); } private void RegisterEvent() { EventManager.Instance.Register(EventManager.EventName.EN_CharacterLevelUp, (Action)OnCharacterLevelup); } private IEnumerator coroutine; private IEnumerator coroutine1; /// /// 刷新等级文本 /// private void RefreshFxValue() { var oriCfg = mCharacterAwakeCfg.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.AwakeLevel); if(!IsMaxLevel()) { var targetCfg = mCharacterAwakeCfg.Get((int)mCharacterDataInfo.ID, mTargetLevel); GetComponent("Image_BG/UI_RankLevel/Text_RankLevel02/fixvalue02").text = CommonUtils.GetLocalizeText(targetCfg.Name); } GetComponent("Image_BG/UI_RankLevel/Text_RankLevel01/fixvalue01").text = CommonUtils.GetLocalizeText(oriCfg.Name); } private async void OnCharacterLevelup(UpgradeType type) { if (type != UpgradeType.UtAwake) { return; } //ResetFlagPosition(); mCharacterDataInfo = CharacterDataInfoManager.Instance.GetCharacterInfo(mCharacterDataInfo.ID); mTargetLevel = (int)mCharacterDataInfo.AwakeLevel + 1; RefreshFxValue(); dialogueAudio?.Stop(); dialogueAudio = DialogueManager.Instance.PlayDiaogue((int)mCharacterDataInfo.Uid, cfg.DialogueCfg.E_DialogueType.Awakening, (content) => { dialogue.SetDialogue(content); }); RefreshChangeAttri(); RefreshThirdSkill(); RefreshLvUpItems(); RefreshBreakLvUpBtn(); //RefreshFirstLogo(); PlayLightFx(); await WaitTimeForFx(); //StartCoroutine(coroutine1); } private void RefreshFirstLogo() { GameObject obj = FindObj("Image_BG/UI_Advance_Logo/1"); var cfg = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, mTargetLevel);//(int)mCharacterDataInfo.AwakeLevel obj.GetComponent().sprite = AssetManager.Instance.GetPreLoadResult(Constants.UI_Cultivata_AwakeIconFolder + cfg.IconLightPath); } private async UniTask WaitTimeForFx() { //await UniTask.Delay(800); if (!gameObject) { return; } MoveLogos(); PlayChangeAnimation(); //await WaitTimeRefresh(); //StartCoroutine(coroutine); } /// /// 升级光效 /// private void PlayLightFx() { GameObject fxObj = FindObj("Image_BG/UI_Advance_Logo/1/AdvanceLevelUpUI"); fxObj.SetActive(true); fxObj.GetComponent().Play(); } private void ResetFlagPosition() { //StopAllCoroutines(); for (int i = 0; i < Constants.ADVANCE_FLAG_UI; i++) { allIconObj[i].transform.localPosition = new Vector3(191-85*i, 50-17*i, 0); } } private async void PlayChangeAnimation() { if (IsMaxLevel()) { mAnimator.Play("Default", 0, 0); RefreshSkill(); RefreshTitle(); } else { mAnimator.speed = 1; RefreshTitle(); mAnimator.Play("Advance SkillInfo_Change", 0, 0f); float waitTime = PhxhSDK.Utils.GetAnimatorLength(mAnimator, "Advance SkillInfo_Change"); await WaitTimeRefresh(waitTime); //StartCoroutine(coroutine); } } private async UniTask WaitTimeRefresh(float waitTime) { await UniTask.Delay((int)(waitTime * 1000)); if (!gameObject) { return; } mAnimator.Play("Advance SkillInfo_Change", 0, 0f); mAnimator.speed = 0; RefreshSkill(); } void RefreshThirdSkill() { if (!IsMaxLevel())//被动技能相关信息查表PassiveSkillConfig { DataCharacterAwaking cbreak = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)mCharacterDataInfo.AwakeLevel + 1); if ((cbreak.PassiveSkillID != 0)) { var afterSkill = TableManager.Instance.Tables.PassiveSkillConfig.Get(cbreak.PassiveSkillID);//SkillConfig.Get(cbreak.PassiveSkillID); Text_SkillName03.text = CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkill, afterSkill.ID); Text_SkillInfo03.text = CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, afterSkill.ID); } } } private async UniTask WaitTimeRefresh() { await UniTask.Delay(800); if (!gameObject) { return; } //MoveLogosBack(); RefreshAdvanceLogo(); } Sequence moveLogoAnim; /// /// 标签移动动画 /// private void MoveLogos() { if (mCharacterDataInfo.AwakeLevel >= Constants.ADVANCE_FLAG_UI) { return; } //allIconObj[4].SetActive(true); // //for (int i = 0; i < Constants.ADVANCE_FLAG_UI; i++) //{ // Vector3 dirVector3 = new Vector3(allIconObj[i].transform.localPosition.x - 85, allIconObj[i].transform.localPosition.y - 17, 0); // allIconObj[i].transform.DOLocalMove(dirVector3, 0.8f); //} if (moveLogoAnim != null) { moveLogoAnim.Complete(); moveLogoAnim = null; } moveLogoAnim = DOTween.Sequence(); Button_Confirm.interactable = false;//动画时暂时关闭按钮功能 if (curLevelLogo == null)//如果当前等级图标为空,说明是第一次升级 { curLevelLogo = FindObj("Image_BG/UI_Advance_Logo/4"); curLevelLogo.transform.localPosition = FindObj("Image_BG/UI_Advance_Logo/LastLevelPoint").transform.localPosition; } curLevelLogo.SetActive(false); if (nextLevelLogo != null) { var cfg = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)mCharacterDataInfo.AwakeLevel); var darkSprite = AssetManager.Instance.GetPreLoadResult(Constants.UI_Cultivata_AwakeIconFolder + cfg.IconDarkPath); curLevelLogo.GetComponent().sprite = darkSprite; moveLogoAnim.Append(nextLevelLogo.transform.DOLocalMove(FindObj("Image_BG/UI_Advance_Logo/LastLevelPoint").transform.localPosition, 0.6f)); moveLogoAnim.AppendCallback(() => { curLevelLogo.SetActive(true); nextLevelLogo.SetActive(false); }); if (!IsMaxLevel())//未升到满级仍有下一等级图标 { moveLogoAnim.AppendCallback(() => { RefreshFirstLogo(); nextLevelLogo.transform.localPosition = FindObj("Image_BG/UI_Advance_Logo/CurrentLevelPoint").transform.localPosition + new Vector3(85, 17, 0); }); moveLogoAnim.AppendInterval(0.05f); moveLogoAnim.AppendCallback(() => { nextLevelLogo.SetActive(true); }); moveLogoAnim.Append(nextLevelLogo.transform.DOLocalMove(FindObj("Image_BG/UI_Advance_Logo/CurrentLevelPoint").transform.localPosition, 0.15f)); } moveLogoAnim.OnComplete(() => { Button_Confirm.interactable = true; curLevelLogo.SetActive(true); if (IsMaxLevel()) { nextLevelLogo.SetActive(false); } else { RefreshFirstLogo(); nextLevelLogo.transform.localPosition = FindObj("Image_BG/UI_Advance_Logo/CurrentLevelPoint").transform.localPosition; nextLevelLogo.SetActive(true); } }); } } private void MoveLogosBack() { if (mCharacterDataInfo.AwakeLevel >= Constants.ADVANCE_FLAG_UI) { return; } for (int i = 0; i < Constants.ADVANCE_FLAG_UI; i++) { Vector3 dirVector3 = new Vector3(allIconObj[i].transform.localPosition.x + 85, allIconObj[i].transform.localPosition.y + 17, 0); allIconObj[i].transform.localPosition=dirVector3; } allIconObj[4].SetActive(false); } private void UnRegisterEvent() { EventManager.Instance.Unregister(EventManager.EventName.EN_CharacterLevelUp, (Action)OnCharacterLevelup); } //invoke when open window protected override void OnShowWindow(object data) { LoadCfg(); if (mCharacterDataInfo != null) { mTargetLevel = (int)mCharacterDataInfo.AwakeLevel + 1; maxLevel = mCharacterDataInfo.GetMaxAwakeLevel(); } IsMaterial = true; RefreshBreakLevelLvUpAbout(); dialogue.SetInfo(mCharacterDataInfo.Name); } private void LoadCfg() { mCharacterAwakeCfg = TableManager.Instance.Tables.CharacterAwaking; } private void RefreshBreakLevelLvUpAbout() { RefreshTitle(); RefreshChangeAttri(); RefreshSkill(); RefreshLvUpItems(); RefreshBreakLvUpBtn(); RefreshAdvanceLogo(); } private void RefreshTitle() { DataCharacterAwaking oriCfg = mCharacterAwakeCfg.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.AwakeLevel); if (IsMaxLevel()) { Text_RankLevel01.gameObject.SetActive(false); CommonUtils.GetComponent(Text_RankLevel02.gameObject, "value02").text = CommonUtils.GetLocalizeText(oriCfg.Name); return; } DataCharacterAwaking targetCfg = mCharacterAwakeCfg.Get((int)mCharacterDataInfo.ID, mTargetLevel); //if (mCharacterDataInfo.AwakeLevel == 0) //{ // Text_RankLevel01.gameObject.SetActive(false); // CommonUtils.GetComponent(Text_RankLevel02.gameObject, "value02").text = CommonUtils.GetLocalizeText(targetCfg.Name); // return; //} CommonUtils.GetComponent(Text_RankLevel01.gameObject, "value01").text= CommonUtils.GetLocalizeText(oriCfg.Name); CommonUtils.GetComponent(Text_RankLevel02.gameObject, "value02").text = CommonUtils.GetLocalizeText(targetCfg.Name); Text_RankLevel01.gameObject.SetActive(true); Text_RankLevel02.gameObject.SetActive(true); } private void OnClickFlag(int index) { if ((index + 1) == mTargetLevel) { return; } mTargetLevel = index + 1; RefreshBreakLevelLvUpAbout(); } private void RefreshBreakLvUpBtn() { FindObj("Image_BG/UI_ComfirmAndCancel").SetActive(!IsMaxLevel()); } void RefreshSkillObjActive() { Image_Skill_01.gameObject.SetActive(!IsMaxLevel()); Image_Arrow.gameObject.SetActive(!IsMaxLevel()); Image_Skill_02.gameObject.SetActive(!IsMaxLevel()); FindObj("Image_BG/UI_SkillInfo/Image_Skill_03").SetActive(!IsMaxLevel()); var maxSkill = FindObj("Image_BG/UI_SkillInfo/MaxSkill"); maxSkill.SetActive(IsMaxLevel()); } void RefreshSkill() { RefreshSkillObjActive(); GameObject maxSkill = FindObj("Image_BG/UI_SkillInfo/MaxSkill"); if (IsMaxLevel()) { if (TableManager.Instance.Tables.SkillConfig.Get(mCharacterDataInfo.GetAwakePassiveId()) == null) { maxSkill.SetActive(false); } else { maxSkill.SetActive(true); DataSkill skill = TableManager.Instance.Tables.SkillConfig.Get(mCharacterDataInfo.GetAwakePassiveId()); GetComponent("Image_BG/UI_SkillInfo/MaxSkill/Text_SkillName01").text = CommonUtils.GetLocalizeText(E_LocalizePrefix.skill, skill.ID); GetComponent("Image_BG/UI_SkillInfo/MaxSkill/Text_SkillInfo01").text = CommonUtils.GetLocalizeText(E_LocalizePrefix.skill_desc, skill.ID); } } else { maxSkill.SetActive(false); bool isArrowExist1 = true; bool isArrowExist2 = true; if (TableManager.Instance.Tables.PassiveSkillConfig.Get(mCharacterDataInfo.GetAwakePassiveId()) == null) { Image_Skill_01.gameObject.SetActive(false); isArrowExist1 = false; } else { var skill = TableManager.Instance.Tables.PassiveSkillConfig.Get(mCharacterDataInfo.GetAwakePassiveId()); Image_Skill_01.gameObject.SetActive(true); Image_Arrow.gameObject.SetActive(true); Text_SkillName01.text = CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkill, skill.ID); Text_SkillInfo01.text = CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, skill.ID); } Image_Skill_02.gameObject.SetActive(true); DataCharacterAwaking cbreak = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)mCharacterDataInfo.AwakeLevel + 1); try { if (TableManager.Instance.Tables.PassiveSkillConfig.Get(cbreak.PassiveSkillID) == null) { isArrowExist2 = false; } else { var afterSkill = TableManager.Instance.Tables.PassiveSkillConfig.Get(cbreak.PassiveSkillID); Text_SkillName02.text = CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkill, afterSkill.ID); Text_SkillInfo02.text = CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, afterSkill.ID); } Image_Arrow.gameObject.SetActive(isArrowExist1 && isArrowExist2); } catch (Exception) { // ignored } } } void ForEach(int targetLevel, Action action) { for (int i = (int)mCharacterDataInfo.AwakeLevel + 1; i <= targetLevel; i++) { action(mCharacterAwakeCfg.Get((int)mCharacterDataInfo.ID, i)); } } bool IsMaxLevel() { return mCharacterDataInfo.AwakeLevel >= maxLevel; } async void RefreshLvUpItems() { if (IsMaxLevel()) { FindObj("Image_BG/UI_Materals").SetActive(false); } else { FindObj("Image_BG/UI_Materals").SetActive(true); DataCharacterAwaking awakeCfg = mCharacterAwakeCfg.Get(mCharacterDataInfo.Cfg.RoleID, mTargetLevel); for (int i = 0; i < listMateral.Count; i++) { Materal materal = listMateral[i]; if ((i + 1) <= awakeCfg.CostItems.Count) { materal.SetInfo(awakeCfg.CostItems[i].Id, awakeCfg.CostItems[i].Count); materal.IsActive = true; bool isFull = Actor.Instance.Item.GetItemCount(awakeCfg.CostItems[i].Id) >= awakeCfg.CostItems[i].Count; if (!isFull) IsMaterial = false; } else materal.IsActive = false; } } } private async void RefreshBase() { Image_Poster.gameObject.SetActive(false); var imgPath = CommonUtils.GetCharacterPicPath(mCharacterDataInfo.Cfg.RoleID, CommonUtils.ECharacterPicPathType.LevelUp); var sprite = await LoadAssetAsync(imgPath); CommonUtils.RefreshCharacter2DPic(Image_Poster, sprite); Image_Poster.gameObject.SetActive(true); Image_Poster.SetNativeSize(); } private void RefreshChangeAttri() { int sumAddHp = 0; int sumAddArmor = 0; float sumAddMorale = 0; int sumAddAttack = 0; int sumAddDenfense = 0; float sumAddMoveSpeed = 0; float sumAddShootSpped = 0; float sumAddShootRange = 0; float sumYaZhi = 0; int sumBulletCapacity = 0; float sumReload = 0; float sumDRPerson = 0; float sumCritRate = 0; float sumDRVehicle = 0; float sumCritDamageRate = 0; if(mTargetLevel>maxLevel) { mTargetLevel = maxLevel; } ForEach(mTargetLevel, delegate (DataCharacterAwaking cfg) { sumAddHp += cfg.Hp; sumAddArmor += cfg.Shield; sumAddMorale += cfg.Corrage; sumAddAttack += cfg.Attack; sumAddDenfense += cfg.Defence; sumAddMoveSpeed += cfg.Speed; sumAddShootSpped += cfg.ShootSpeed; sumAddShootRange += cfg.ShootRange; sumYaZhi += cfg.YaZhi; sumBulletCapacity += cfg.ManagazinContain; sumReload += cfg.ChangeBulletTime; sumDRPerson += cfg.DamageToHuman; //sumCritRate += cfg.CriticalRatio; sumDRVehicle = cfg.DamageToCarrier; //sumCritDamageRate = cfg.CriticalDamage; }); //突破暴击相关数值计算方式不同 var tarCfg = mCharacterAwakeCfg.Get((int)mCharacterDataInfo.ID, mTargetLevel); var curCfg = mCharacterAwakeCfg.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel); sumCritRate = Math.Max(tarCfg.CriticalRatio - curCfg.CriticalRatio, 0); sumCritDamageRate = Math.Max(tarCfg.CriticalDamage - curCfg.CriticalDamage, 0); RefreshUpperAttri(FindObj("Image_BG/UI_Info/mask/hp"), mCharacterDataInfo.HP(), sumAddHp); RefreshUpperAttri(FindObj("Image_BG/UI_Info/mask/Morale"), mCharacterDataInfo.Corrage(), sumAddMorale); RefreshUpperAttri(FindObj("Image_BG/UI_Info/mask/Denfense"), mCharacterDataInfo.Defence(), sumAddDenfense); RefreshUpperAttri(FindObj("Image_BG/UI_Info/mask/Armor"), mCharacterDataInfo.Armor(), sumAddArmor); RefreshUpperAttri(FindObj("Image_BG/UI_Info/mask/Attack"), mCharacterDataInfo.Attack(), sumAddAttack); RefreshUpperAttri(FindObj("Image_BG/UI_Info/mask/MoveSpeed"), mCharacterDataInfo.MoveSpeed(), sumAddMoveSpeed); RefreshDownnerAttrt(FindObj("Image_BG/UI_Info/mask/FireSpeed"), mCharacterDataInfo.ShootSpeed(), sumAddShootSpped); RefreshDownnerAttrt(FindObj("Image_BG/UI_Info/mask/FireRange"), mCharacterDataInfo.Cfg.ShootRange, sumAddShootRange); RefreshDownnerAttrt(FindObj("Image_BG/UI_Info/mask/SuppressRate"), mCharacterDataInfo.YaZhi(), sumYaZhi); RefreshDownnerAttrt(FindObj("Image_BG/UI_Info/mask/BulletCapacity"), mCharacterDataInfo.BulletCapacity(), sumBulletCapacity); RefreshDownnerAttrt(FindObj("Image_BG/UI_Info/mask/Reload"), mCharacterDataInfo.ChangeBulletTime(), sumReload); RefreshDownnerAttrt(FindObj("Image_BG/UI_Info/mask/DRPerson"), mCharacterDataInfo.DamageToHuman(), sumDRPerson); RefreshDownnerAttrt(FindObj("Image_BG/UI_Info/mask/CritRate"), mCharacterDataInfo.CriticalRatio(), sumCritRate, true); RefreshDownnerAttrt(FindObj("Image_BG/UI_Info/mask/DRVehicle"), mCharacterDataInfo.DamageToCarrier(), sumDRVehicle, true); RefreshDownnerAttrt(FindObj("Image_BG/UI_Info/mask/CritDamageRate"), mCharacterDataInfo.CriticalDamage(), sumCritDamageRate, true); } void RefreshUpperAttri(GameObject obj, float value, float addValue) { CommonUtils.GetGameObject(obj, "noChange").SetActive(addValue == 0); CommonUtils.GetGameObject(obj, "Change").SetActive(addValue != 0); CommonUtils.GetComponent(obj, "Change/changeValue").text = "+" + addValue; CommonUtils.GetComponent(obj, "noChange/value").text = "" + value; CommonUtils.GetComponent(obj, "Change/value").text = "+" + value; } void RefreshDownnerAttrt(GameObject obj, float value, float addValue, bool isPercent = false) { CommonUtils.GetGameObject(obj, "noChange").SetActive(addValue == 0); CommonUtils.GetGameObject(obj, "Change").SetActive(addValue != 0); if (!isPercent) { CommonUtils.GetComponent(obj, "Change/changeValue").text = "+" + string.Format("{0:F2}", addValue); CommonUtils.GetComponent(obj, "value").text = string.Format("{0:F2}", value); } else { CommonUtils.GetComponent(obj, "Change/changeValue").text = "+" + string.Format("{0:P1}", addValue); CommonUtils.GetComponent(obj, "value").text = string.Format("{0:P1}", value); } } //invoke when reload window protected override void OnReloadWindow(object data = null) { } protected override void OnUpdate() { base.OnUpdate(); dialogue.IsScaleShow = IsDialoguePlaying; } //invoke when close window protected override void OnHideWindow() { EventManager.Instance.Send(EventManager.EventName.EN_UIControllCultivateMainInput, true); AudioManager.Instance.AudioMgrObj.StopAllSounds(); FindObj("Image_BG/UI_Advance_Logo/1/AdvanceLevelUpUI").SetActive(false); } public override void OnRelease() { base.OnRelease(); for (int i = 0; i < listMateral.Count; i++) { listMateral[i].Dispose(); } #region 释放等级图标 for (int j = 0; j < Constants.ADVANCE_FLAG_UI; j++) { var cfg = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)j); AssetManager.Instance.Unload(Constants.UI_Cultivata_AwakeIconFolder + cfg.IconLightPath); AssetManager.Instance.Unload(Constants.UI_Cultivata_AwakeIconFolder + cfg.IconDarkPath); } #endregion UnRegisterEvent(); } }