NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/ShowAllCharacter/UIAdvanceController.cs

950 lines
35 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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();
}
}