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 Gameplay; using PhxhSDK; using TMPro; using UnityEngine; using Button = UnityEngine.UI.Button; using Constants = Framework.Constants; using Image = UnityEngine.UI.Image; public class UIAdvanceController : UIWindow { //UI GameObj ///Auto Gen Start/// public Image Image_BG; public Image Image_Poster; public Button Button_Back; public TMP_Text Text_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/// CharacterDataInfo mCharacterDataInfo; CharacterAwaking mCharacterAwakeCfg; List mFlagObj; private int mTargetLevel; private int maxLevel; private bool IsMaterial; private List allIconObj; private Animator mAnimator; // Use this for initialization public override void OnAwake() { //bind UI GameObj UIAdvanceBinder.GetComponents(this); 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()}")); } 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"); } 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(tempCfg.IconLightPath, logo => { obj.GetComponent().sprite = logo; }); }else { var j = (int)mCharacterDataInfo.AwakeLevel + 1 - i; tempCfg = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)j); if (i==0) { AssetManager.Instance.LoadAssetOnCallBack(tempCfg.IconDarkPath, logo => { obj.GetComponent().sprite = logo; }); } else { AssetManager.Instance.LoadAssetOnCallBack(tempCfg.IconLightPath, logo => { obj.GetComponent().sprite = logo; }); } } if (i != mCharacterDataInfo.AwakeLevel) continue; { var temp5Obj = FindObj("Image_BG/UI_Advance_Logo/5"); AssetManager.Instance.LoadAssetOnCallBack(tempCfg.IconDarkPath, logo => { temp5Obj.GetComponent().sprite = logo; }); temp5Obj.SetActive(false); } } 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 void OnCharacterLevelup(UpgradeType type) { if (type != UpgradeType.UtAwake) { return; } ResetFlagPosition(); mCharacterDataInfo = CharacterDataInfoManager.Instance.GetCharacterInfo(mCharacterDataInfo.ID); mTargetLevel = (int)mCharacterDataInfo.AwakeLevel + 1; RefreshFxValue(); RefreshChangeAttri(); RefreshThirdSkill(); RefreshLvUpItems(); RefreshBreakLvUpBtn(); RefreshFirstLogo(); PlayLightFx(); coroutine1 = waitTimeForFx(); StartCoroutine(coroutine1); } private void RefreshFirstLogo() { GameObject obj = FindObj("Image_BG/UI_Advance_Logo/1"); AssetManager.Instance.LoadAssetOnCallBack(TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)mCharacterDataInfo.AwakeLevel).IconLightPath, logo => { obj.GetComponent().sprite = logo; }); } private IEnumerator waitTimeForFx() { yield return new WaitForSeconds(0.8f); MoveLogos(); PlayChangeAnimation(); coroutine = 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 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"); coroutine = WaitTimeRefresh(waitTime); StartCoroutine(coroutine); } } private IEnumerator WaitTimeRefresh(float waitTime) { yield return new WaitForSeconds(waitTime); mAnimator.Play("Advance SkillInfo_Change", 0, 0f); mAnimator.speed = 0; RefreshSkill(); } void RefreshThirdSkill() { if (!IsMaxLevel()) { DataCharacterAwaking cbreak = TableManager.Instance.Tables.CharacterAwaking.Get(mCharacterDataInfo.Cfg.RoleID, (int)mCharacterDataInfo.AwakeLevel + 1); if ((cbreak.PassiveSkillID != 0)) { DataSkill afterSkill = TableManager.Instance.Tables.SkillConfig.Get(cbreak.PassiveSkillID); Text_SkillName03.text = CommonUtils.GetLocalizeText(afterSkill.Name); Text_SkillInfo03.text = CommonUtils.GetLocalizeText(afterSkill.SkillDesc); } } } private IEnumerator WaitTimeRefresh() { yield return new WaitForSeconds(0.8f); MoveLogosBack(); RefreshAdvanceLogo(); } 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); } } 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 OnOpenWindow(object data) { mCharacterDataInfo = data as CharacterDataInfo; LoadCfg(); RefreshBase(); if (mCharacterDataInfo != null) { mTargetLevel = (int)mCharacterDataInfo.AwakeLevel + 1; maxLevel = mCharacterDataInfo.GetMaxAwakeLevel(); } IsMaterial = true; RefreshBreakLevelLvUpAbout(); RegisterEvent(); CommonUtils.SetImageBlur(GetComponent("blurObj")); } 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(skill.Name); GetComponent("Image_BG/UI_SkillInfo/MaxSkill/Text_SkillInfo01").text = CommonUtils.GetLocalizeText(skill.SkillDesc); } } else { maxSkill.SetActive(false); bool isArrowExist1 = true; bool isArrowExist2 = true; if (TableManager.Instance.Tables.SkillConfig.Get(mCharacterDataInfo.GetAwakePassiveId()) == null) { Image_Skill_01.gameObject.SetActive(false); isArrowExist1 = false; } else { DataSkill skill = TableManager.Instance.Tables.SkillConfig.Get(mCharacterDataInfo.GetAwakePassiveId()); Image_Skill_01.gameObject.SetActive(true); Image_Arrow.gameObject.SetActive(true); Text_SkillName01.text = CommonUtils.GetLocalizeText(skill.Name); ; Text_SkillInfo01.text = CommonUtils.GetLocalizeText(skill.SkillDesc); } 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.SkillConfig.Get(cbreak.PassiveSkillID) == null) { isArrowExist2 = false; } else { DataSkill afterSkill = TableManager.Instance.Tables.SkillConfig.Get(cbreak.PassiveSkillID); Text_SkillName02.text = CommonUtils.GetLocalizeText(afterSkill.Name); Text_SkillInfo02.text = CommonUtils.GetLocalizeText(afterSkill.SkillDesc); } 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 < 3; i++) { GameObject itemParent = FindObj(string.Format("Image_BG/UI_Materals/{0}", (i + 1).ToString())); CommonUtils.DestoryAllChildGameObject(CommonUtils.GetGameObject(itemParent, "item")); if ((i + 1) <= awakeCfg.CostItems.Count) { itemParent.SetActive(true); ItemObj itemObj = new ItemObj(awakeCfg.CostItems[i].Id, CommonUtils.GetGameObject(itemParent, "item"),ItemObj.UIType.cultivate); await itemObj.Init(); CommonUtils.GetComponent(itemParent, "value").text = Actor.Instance.Item.GetItemCount(awakeCfg.CostItems[i].Id) + "/" + awakeCfg.CostItems[i].Count; bool isFull = Actor.Instance.Item.GetItemCount(awakeCfg.CostItems[i].Id) >= awakeCfg.CostItems[i].Count; CommonUtils.GetGameObject(itemParent, "Image_Red").SetActive(!(isFull)); CommonUtils.GetGameObject(itemParent, "Image_Green02").SetActive(isFull); if (!isFull) { IsMaterial = false; } } else { itemParent.SetActive(false); } } } } private void RefreshBase() { CommonUtils.RefreshCharacter2DPic(Image_Poster, mCharacterDataInfo.Cfg.RoleID, CommonUtils.ECharacterPicPathType.LevelUp); 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; }); 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) { } //invoke when close window protected override void OnCloseWindow() { EventManager.Instance.Send(EventManager.EventName.EN_UIControllCultivateMainInput, true); UnRegisterEvent(); FindObj("Image_BG/UI_Advance_Logo/1/AdvanceLevelUpUI").SetActive(false); } }