950 lines
35 KiB
C#
950 lines
35 KiB
C#
|
||
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<UIWindow> Open(CharacterDataInfo characterDataInfo)
|
||
{
|
||
CommonUtils.CaptureScreenshot();
|
||
|
||
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UIAdvance, characterDataInfo);
|
||
}
|
||
|
||
#region 类
|
||
/// <summary>
|
||
/// 升级材料
|
||
/// </summary>
|
||
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<TMP_Text>("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();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 台词类
|
||
/// </summary>
|
||
private class Dialogue : UIGameObjectWrapper
|
||
{
|
||
/// <summary>
|
||
/// 角色名
|
||
/// </summary>
|
||
private TMP_Text textName;
|
||
/// <summary>
|
||
/// 角色类型
|
||
/// </summary>
|
||
private TMP_Text textContent;
|
||
|
||
public Dialogue(GameObject root) : base(root)
|
||
{
|
||
textName = GetComponent<TMP_Text>("Text_Name");
|
||
textContent = GetComponent<TMP_Text>("Text_Describe");
|
||
}
|
||
|
||
public void SetInfo(string name)
|
||
{
|
||
textName.text = name;
|
||
}
|
||
|
||
public void SetDialogue(string content)
|
||
{
|
||
textContent.text = content;
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
/// <summary>
|
||
/// 高斯模糊遮罩
|
||
/// </summary>
|
||
private RawImage rawImageGaussianBlurMask;
|
||
|
||
CharacterDataInfo mCharacterDataInfo;
|
||
CharacterAwaking mCharacterAwakeCfg;
|
||
|
||
List<GameObject> mFlagObj;
|
||
private int mTargetLevel;
|
||
private int maxLevel;
|
||
private bool IsMaterial;
|
||
private List<GameObject> allIconObj;
|
||
GameObject curLevelLogo;
|
||
//DataCharacterAwaking curAwakeLevelData;
|
||
GameObject nextLevelLogo;
|
||
//DataCharacterAwaking nextAwakeLevelData;
|
||
|
||
private Animator mAnimator;
|
||
|
||
/// <summary>
|
||
/// 升级材料列表
|
||
/// </summary>
|
||
private readonly List<Materal> listMateral = new(3);
|
||
/// <summary>
|
||
/// 台词语音
|
||
/// </summary>
|
||
private AudioInst dialogueAudio;
|
||
/// <summary>
|
||
/// 台词UI
|
||
/// </summary>
|
||
private Dialogue dialogue;
|
||
|
||
/// <summary>
|
||
/// 是否正在播放台词语音
|
||
/// </summary>
|
||
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<Sprite>(Constants.UI_Cultivata_AwakeIconFolder + cfg.IconLightPath).Forget();
|
||
AssetManager.Instance.PostPreload<Sprite>(Constants.UI_Cultivata_AwakeIconFolder + cfg.IconDarkPath).Forget();
|
||
}
|
||
#endregion
|
||
}
|
||
public override void OnInit()
|
||
{
|
||
//bind UI GameObj
|
||
UIAdvanceBinder.GetComponents(this);
|
||
|
||
rawImageGaussianBlurMask = GetComponent<RawImage>("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<GameObject>();
|
||
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<Animator>();
|
||
|
||
Text_SkillName03 = GetComponent<TMP_Text>("Image_BG/UI_SkillInfo/Image_Skill_03/Text_SkillName03");
|
||
Text_SkillInfo03 = GetComponent<TMP_Text>("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<Image>().sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(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<Image>().sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(Constants.UI_Cultivata_AwakeIconFolder + tempCfg.IconDarkPath);
|
||
// }
|
||
// else
|
||
// {
|
||
// obj.GetComponent<Image>().sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(Constants.UI_Cultivata_AwakeIconFolder + tempCfg.IconLightPath);
|
||
// }
|
||
//
|
||
// }
|
||
// if (i != mCharacterDataInfo.AwakeLevel) //当前等级
|
||
// {
|
||
// var temp5Obj = FindObj("Image_BG/UI_Advance_Logo/5");
|
||
//
|
||
// temp5Obj.GetComponent<Image>().sprite = AssetManager.Instance.GetPreLoadResult<Sprite>
|
||
// (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<Image>().sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(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<Image>().sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(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<Image>().sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(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;
|
||
}
|
||
AudioManager.Instance.PlayAudio(Constants.Sound.COMMON_CLICK);
|
||
|
||
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<UpgradeType>)OnCharacterLevelup);
|
||
}
|
||
private IEnumerator coroutine;
|
||
private IEnumerator coroutine1;
|
||
|
||
/// <summary>
|
||
/// 刷新等级文本
|
||
/// </summary>
|
||
private void RefreshFxValue()
|
||
{
|
||
var oriCfg = mCharacterAwakeCfg.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.AwakeLevel);
|
||
if(!IsMaxLevel())
|
||
{
|
||
var targetCfg = mCharacterAwakeCfg.Get((int)mCharacterDataInfo.ID, mTargetLevel);
|
||
GetComponent<TMP_Text>("Image_BG/UI_RankLevel/Text_RankLevel02/fixvalue02").text = CommonUtils.GetLocalizeText(targetCfg.Name);
|
||
}
|
||
GetComponent<TMP_Text>("Image_BG/UI_RankLevel/Text_RankLevel01/fixvalue01").text = CommonUtils.GetLocalizeText(oriCfg.Name);
|
||
|
||
}
|
||
private async void OnCharacterLevelup(UpgradeType type)
|
||
{
|
||
if (type != UpgradeType.UtAwake)
|
||
{
|
||
return;
|
||
}
|
||
AudioManager.Instance.PlayAudio(Framework.Constants.Sound.CHARACTER_LEVEL_UP);
|
||
//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<Image>().sprite =
|
||
AssetManager.Instance.GetPreLoadResult<Sprite>(Constants.UI_Cultivata_AwakeIconFolder + cfg.IconLightPath);
|
||
}
|
||
private async UniTask WaitTimeForFx()
|
||
{
|
||
//await UniTask.Delay(800);
|
||
if (!gameObject)
|
||
{
|
||
return;
|
||
}
|
||
MoveLogos();
|
||
PlayChangeAnimation();
|
||
|
||
//await WaitTimeRefresh();
|
||
//StartCoroutine(coroutine);
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 升级光效
|
||
/// </summary>
|
||
private void PlayLightFx()
|
||
{
|
||
GameObject fxObj = FindObj("Image_BG/UI_Advance_Logo/1/AdvanceLevelUpUI");
|
||
fxObj.SetActive(true);
|
||
fxObj.GetComponent<ParticleSystem>().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;
|
||
/// <summary>
|
||
/// 标签移动动画
|
||
/// </summary>
|
||
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<Sprite>(Constants.UI_Cultivata_AwakeIconFolder + cfg.IconDarkPath);
|
||
curLevelLogo.GetComponent<Image>().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<UpgradeType>)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<TMP_Text>(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<TMP_Text>(Text_RankLevel02.gameObject, "value02").text = CommonUtils.GetLocalizeText(targetCfg.Name);
|
||
// return;
|
||
//}
|
||
CommonUtils.GetComponent<TMP_Text>(Text_RankLevel01.gameObject, "value01").text= CommonUtils.GetLocalizeText(oriCfg.Name);
|
||
CommonUtils.GetComponent<TMP_Text>(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<TMP_Text>("Image_BG/UI_SkillInfo/MaxSkill/Text_SkillName01").text = CommonUtils.GetLocalizeText(E_LocalizePrefix.skill, skill.ID);
|
||
GetComponent<TMP_Text>("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<DataCharacterAwaking> 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, (int)mCharacterDataInfo.SkinID);
|
||
var sprite = await LoadAssetAsync<Sprite>(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;
|
||
});
|
||
//相关数值计算方式不同并非累加,而是相较于0级的差值
|
||
var tarCfg = mCharacterAwakeCfg.Get((int)mCharacterDataInfo.ID, mTargetLevel);
|
||
var curCfg = mCharacterAwakeCfg.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.AwakeLevel);
|
||
|
||
sumAddHp = Math.Max(tarCfg.Hp - curCfg.Hp, 0);
|
||
sumAddArmor = Math.Max(tarCfg.Shield - curCfg.Shield, 0);
|
||
sumAddMorale = Math.Max(tarCfg.Corrage - curCfg.Corrage, 0);
|
||
sumAddAttack = Math.Max(tarCfg.Attack - curCfg.Attack, 0);
|
||
sumCritRate = Math.Max(tarCfg.CriticalRatio - curCfg.CriticalRatio, 0);
|
||
sumCritDamageRate = Math.Max(tarCfg.CriticalDamage - curCfg.CriticalDamage, 0);
|
||
|
||
RefreshUpperAttri(FindObj("UI_LiuHaiLeft/UI_Info/mask/hp"), mCharacterDataInfo.HP(), sumAddHp);
|
||
RefreshUpperAttri(FindObj("UI_LiuHaiLeft/UI_Info/mask/Morale"), mCharacterDataInfo.Corrage(), sumAddMorale);
|
||
RefreshUpperAttri(FindObj("UI_LiuHaiLeft/UI_Info/mask/Denfense"), mCharacterDataInfo.Defence(), sumAddDenfense);
|
||
RefreshUpperAttri(FindObj("UI_LiuHaiLeft/UI_Info/mask/Armor"), mCharacterDataInfo.Armor(), sumAddArmor);
|
||
RefreshUpperAttri(FindObj("UI_LiuHaiLeft/UI_Info/mask/Attack"), mCharacterDataInfo.Attack(), sumAddAttack);
|
||
RefreshUpperAttri(FindObj("UI_LiuHaiLeft/UI_Info/mask/MoveSpeed"), mCharacterDataInfo.MoveSpeed(), sumAddMoveSpeed);
|
||
RefreshDownnerAttrt(FindObj("UI_LiuHaiLeft/UI_Info/mask/FireSpeed"), mCharacterDataInfo.ShootSpeed(), sumAddShootSpped);
|
||
RefreshDownnerAttrt(FindObj("UI_LiuHaiLeft/UI_Info/mask/FireRange"), mCharacterDataInfo.Cfg.ShootRange, sumAddShootRange);
|
||
RefreshDownnerAttrt(FindObj("UI_LiuHaiLeft/UI_Info/mask/SuppressRate"), mCharacterDataInfo.YaZhi(), sumYaZhi);
|
||
RefreshDownnerAttrt(FindObj("UI_LiuHaiLeft/UI_Info/mask/BulletCapacity"), mCharacterDataInfo.BulletCapacity(), sumBulletCapacity);
|
||
RefreshDownnerAttrt(FindObj("UI_LiuHaiLeft/UI_Info/mask/Reload"), mCharacterDataInfo.ChangeBulletTime(), sumReload);
|
||
RefreshDownnerAttrt(FindObj("UI_LiuHaiLeft/UI_Info/mask/DRPerson"), mCharacterDataInfo.DamageToHuman() * mCharacterDataInfo.DamageToHp(), sumDRPerson, true);
|
||
RefreshDownnerAttrt(FindObj("UI_LiuHaiLeft/UI_Info/mask/DRArmor"), mCharacterDataInfo.DamageToHuman() * mCharacterDataInfo.DamageToArmor(), sumDRPerson, true);
|
||
RefreshDownnerAttrt(FindObj("UI_LiuHaiLeft/UI_Info/mask/CritRate"), mCharacterDataInfo.CriticalRatio(), sumCritRate, true);
|
||
RefreshDownnerAttrt(FindObj("UI_LiuHaiLeft/UI_Info/mask/DRVehicle"), mCharacterDataInfo.DamageToCarrier(), sumDRVehicle, true);
|
||
RefreshDownnerAttrt(FindObj("UI_LiuHaiLeft/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<TMP_Text>(obj, "Change/changeValue").text = "+" + addValue;
|
||
CommonUtils.GetComponent<TMP_Text>(obj, "noChange/value").text = "" + value;
|
||
CommonUtils.GetComponent<TMP_Text>(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<TMP_Text>(obj, "Change/changeValue").text = "+" + string.Format("{0:F2}", addValue);
|
||
CommonUtils.GetComponent<TMP_Text>(obj, "value").text = string.Format("{0:F2}", value);
|
||
}
|
||
else
|
||
{
|
||
CommonUtils.GetComponent<TMP_Text>(obj, "Change/changeValue").text = "+" + string.Format("{0:P1}", addValue);
|
||
CommonUtils.GetComponent<TMP_Text>(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();
|
||
}
|
||
} |