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

596 lines
21 KiB
C#

using cfg.CharacterCfg;
using cfg.SkillCfg;
using DG.Tweening;
using Framework;
using Gameplay.Net;
using NLDPB;
using System;
using System.Collections;
using Cysharp.Threading.Tasks;
using Gameplay;
using PhxhSDK;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using Button = UnityEngine.UI.Button;
using Constants = Framework.Constants;
using Image = UnityEngine.UI.Image;
public class UIRankController : UIWindow
{
//UI GameObj
///Auto Gen Start///
public Image Image_BG;
public Image Image_RankPic_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_Armor_Value02;
public TMP_Text Text_Change_Armor02;
public TMP_Text Text_Attack01;
public TMP_Text Text_Attack02;
public TMP_Text Text_Speed01;
public TMP_Text Text_Speed02;
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;
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_Materal01;
public Image Image_Red;
public TMP_Text Text_Materal_Value01;
public Image Image_Materal02;
public Image Image_Green02;
public TMP_Text Text_Materal_Value02;
public Image Image_Materal03;
public TMP_Text Text_Materal_Value03;
public Button Button_Cannot;
public TMP_Text Text_Cannot_Confirm;
public Button Button_Confirm;
public TMP_Text Text_Confirm;
public Button Button_Cancel;
///Auto Gen End///
CharacterDataInfo mCharacterDataInfo;
CharacterBreak mCharacterBreakCfg;
private int mTargetLevel;
private int maxLevel;
private GameObject mLightRectObj;
private Animator mAnimator;
// Use this for initialization
public override void OnInit()
{
//bind UI GameObj
UIRankBinder.GetComponents(this);
mLightRectObj = FindObj("Image_BG/LightRect/1");
for (int i = 0; i < Constants.BREAK_FLAG_UI; i++)
{
GameObject tempFlagObj = FindObj(string.Format("Image_BG/Image_RankPic_Bg/{0}", (i + 1)));
BindButton(CommonUtils.GetComponent<Button>(tempFlagObj, "Col"), OnClickFlag, i);
}
BindButton(Button_Back, OnButton_BackClick);
BindButton(Button_Confirm, OnButton_Confirm);
BindButton(Button_Cancel, OnButton_Cancel);
BindButton(Button_Home, OnClickHome);
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");
RegisterEvent();
}
private void OnClickHome()
{
UIManager.Instance.CloseAllNormalExcept(UINameConst.UI_MainPanel);
}
private void OnButton_Cancel()
{
if (mTargetLevel == (int)mCharacterDataInfo.BreakLevel + 1)
{
return;
}
mTargetLevel = (int)mCharacterDataInfo.BreakLevel + 1;
RefreshBreakLevelLvUpAbout();
}
private void OnButton_Confirm()
{
if (IsMaxLevel())
{
return;
}
NetHelper.CharacterUpgrade(mCharacterDataInfo.ID, NLDPB.UpgradeType.UtBreak, (uint)mTargetLevel);
}
private void OnButton_BackClick()
{
CloseWindow();
}
private void RegisterEvent()
{
EventManager.Instance.Register(EventManager.EventName.EN_CharacterLevelUp, (Action<UpgradeType>)OnCharacterLevelup);
}
private void OnCharacterLevelup(UpgradeType type)
{
if (type != UpgradeType.UtBreak)
{
return;
}
//StopAllCoroutines();
mCharacterDataInfo = CharacterDataInfoManager.Instance.GetCharacterInfo(mCharacterDataInfo.ID);
mTargetLevel = (int)mCharacterDataInfo.BreakLevel + 1;
RefreshFxValue();
RefreshFlag();
PlayLightFx();
RefreshChangeAttri();
RefreshLvUpItems();
RefreshBreakLvUpBtn();
RefreshThirdSkill();
PlayChangeAnimation();
}
private void RefreshThirdSkill()
{
if (IsMaxLevel()) return;
DataCharacterBreak cbreak = TableManager.Instance.Tables.CharacterBreak.Get(mCharacterDataInfo.Cfg.RoleID, (int)mCharacterDataInfo.BreakLevel + 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 coroutine;
private async void PlayChangeAnimation()
{
if(IsMaxLevel())
{
mAnimator.Play("Default", 0, 0);
RefreshSkill();
RefreshTitle();
}
else
{
mAnimator.speed = 1;
mAnimator.Play("RankInfo_Change",0,0f);
float waitTime = PhxhSDK.Utils.GetAnimatorLength(mAnimator, "RankInfo_Change");
await WaitTimeRefresh(waitTime);
//StartCoroutine(coroutine);
}
}
private IEnumerator coroutine1;
private async void PlayLightFx()
{
var breaklv = (int)mCharacterDataInfo.BreakLevel;
if(breaklv>Constants.ADVANCE_FLAG_UI)
{
breaklv = Constants.ADVANCE_FLAG_UI;
}
GameObject tempObj = FindObj(string.Format("Image_BG/Image_RankPic_Bg/{0}/RankLevel", (breaklv).ToString()));
tempObj.SetActive(true);
tempObj.GetComponent<ParticleSystem>().Play();
await WaitTimeRefreshRect(1,breaklv);
//4(coroutine1);
}
private async UniTask WaitTimeRefreshRect(int v,int breaklv)
{
await UniTask.Delay(v * 1000);
MoveLightRect(mTargetLevel);
RefreshFlag();
FindObj(string.Format("Image_BG/Image_RankPic_Bg/{0}/RankLevel", (breaklv).ToString())).SetActive(false);
}
private async UniTask WaitTimeRefresh(float waitTime)
{
await UniTask.Delay((int)waitTime * 1000);
mAnimator.Play("RankInfo_Change",0,0f);
mAnimator.speed=0;
RefreshSkill();
RefreshTitle();
}
private void UnRegisterEvent()
{
EventManager.Instance.Unregister(EventManager.EventName.EN_CharacterLevelUp, (Action<UpgradeType>)OnCharacterLevelup);
}
//invoke when open window
protected override void OnShowWindow(object data = null)
{
mCharacterDataInfo = data as CharacterDataInfo;
LoadCfg();
RefreshBase();
if (mCharacterDataInfo != null)
{
mTargetLevel = (int)mCharacterDataInfo.BreakLevel + 1;
maxLevel = mCharacterDataInfo.GetMaxBreakLevel();
}
RefreshBreakLevelLvUpAbout();
CommonUtils.SetImageBlur(GetComponent<Image>("blurObj"));
}
private void RefreshFxValue()
{
DataCharacterBreak oriCfg = mCharacterBreakCfg.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel);
GetComponent<TMP_Text>("Image_BG/UI_RankLevel/Text_RankLevel01/fxValue01").text = CommonUtils.GetLocalizeText(oriCfg.Name);
if (IsMaxLevel()) return;
DataCharacterBreak targetCfg = mCharacterBreakCfg.Get((int)mCharacterDataInfo.ID, mTargetLevel);
GetComponent<TMP_Text>("Image_BG/UI_RankLevel/Text_RankLevel02/fxValue02").text = CommonUtils.GetLocalizeText(targetCfg.Name);
}
private void LoadCfg()
{
mCharacterBreakCfg = TableManager.Instance.Tables.CharacterBreak;
}
private void RefreshTitle()
{
DataCharacterBreak oriCfg = mCharacterBreakCfg.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel);
if (IsMaxLevel())
{
Text_RankLevel01.gameObject.SetActive(false);
CommonUtils.GetComponent<TMP_Text>(Text_RankLevel02.gameObject, "value02").text = CommonUtils.GetLocalizeText(oriCfg.Name);
return;
}
DataCharacterBreak targetCfg = mCharacterBreakCfg.Get((int)mCharacterDataInfo.ID, mTargetLevel);
if (mCharacterDataInfo.BreakLevel == 0)
{
Text_RankLevel01.gameObject.SetActive(false);
CommonUtils.GetComponent<TMP_Text>(Text_RankLevel02.gameObject, "value02").text = CommonUtils.GetLocalizeText(targetCfg.Name);
return;
}
Text_RankLevel01.gameObject.SetActive(true);
Text_RankLevel02.gameObject.SetActive(true);
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);
}
private void RefreshFlag()
{
for (int i = 0; i < Constants.BREAK_FLAG_UI; i++)
{
DataCharacterBreak breakCfg = mCharacterBreakCfg.Get(mCharacterDataInfo.Cfg.RoleID, i + 1);
GameObject flag = FindObj(string.Format("Image_BG/Image_RankPic_Bg/{0}", (i + 1).ToString()));
if ((i + 1) <= mCharacterDataInfo.BreakLevel+1)
{
AssetManager.Instance.LoadAssetOnCallBack<Sprite>(Constants.UI_Cultivata_BreakIconFolder+ breakCfg.IconPathLight, spr =>
{
CommonUtils.GetComponent<Image>(flag, "Icon").sprite = spr;
});
}
else
{
AssetManager.Instance.LoadAssetOnCallBack<Sprite>(Constants.UI_Cultivata_BreakIconFolder + breakCfg.IconPathDark, spr =>
{
CommonUtils.GetComponent<Image>(flag, "Icon").sprite = spr;
})
;
}
CommonUtils.GetGameObject(flag, "RankLevel").SetActive(false);
}
}
private void RefreshBreakLevelLvUpAbout()
{
RefreshTitle();
RefreshFlag();
MoveLightRect(mTargetLevel);
RefreshChangeAttri();
RefreshSkill();
RefreshLvUpItems();
RefreshBreakLvUpBtn();
}
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());
GameObject 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.GetBreakPassiveId()) == null)
{
maxSkill.SetActive(false);
}
else
{
maxSkill.SetActive(true);
DataSkill skill = TableManager.Instance.Tables.SkillConfig.Get(mCharacterDataInfo.GetBreakPassiveId());
GetComponent<TMP_Text>("Image_BG/UI_SkillInfo/MaxSkill/Text_SkillName01").text = CommonUtils.GetLocalizeText(skill.Name);
GetComponent<TMP_Text>("Image_BG/UI_SkillInfo/MaxSkill/Text_SkillInfo01").text = CommonUtils.GetLocalizeText(skill.SkillDesc);
}
}
else
{
bool isArrowExist1 = true;
bool isArrowExist2 = true;
if ((mCharacterDataInfo.GetBreakPassiveId()) == 0)
{
Image_Skill_01.gameObject.SetActive(false);
isArrowExist1 = false;
}
else
{
DataSkill skill = TableManager.Instance.Tables.SkillConfig.Get(mCharacterDataInfo.GetBreakPassiveId());
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);
DataCharacterBreak cbreak = TableManager.Instance.Tables.CharacterBreak.Get(mCharacterDataInfo.Cfg.RoleID, (int)mCharacterDataInfo.BreakLevel + 1);
if (cbreak.PassiveSkillID ==0)
{
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);
}
}
void ForEach(int targetLevel, Action<DataCharacterBreak> action)
{
for (int i = (int)mCharacterDataInfo.BreakLevel + 1; i <= targetLevel; i++)
{
action(mCharacterBreakCfg.Get((int)mCharacterDataInfo.ID, i));
}
}
bool IsMaxLevel()
{
return mCharacterDataInfo.BreakLevel >= maxLevel;
}
private void MoveLightRect(int index)
{
if(index>Constants.BREAK_FLAG_UI)
{
index = Constants.BREAK_FLAG_UI;
}
mLightRectObj.transform.DOLocalMoveX((-235 + (index - 1) * 156),1);
}
async void RefreshLvUpItems()
{
if (IsMaxLevel())
{
FindObj("Image_BG/UI_Materals").SetActive(false);
}
else
{
FindObj("Image_BG/UI_Materals").SetActive(true);
DataCharacterBreak breakCfg = mCharacterBreakCfg.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) <= breakCfg.CostItems.Count)
{
itemParent.SetActive(true);
ItemObj itemObj = new ItemObj(breakCfg.CostItems[i].Id, CommonUtils.GetGameObject(itemParent, "item"), ItemObj.UIType.cultivate);
await itemObj.Init();
CommonUtils.GetComponent<TMP_Text>(itemParent, "value").text = Actor.Instance.Item.GetItemCount(breakCfg.CostItems[i].Id) + "/" + breakCfg.CostItems[i].Count;
CommonUtils.GetGameObject(itemParent, "Image_Red").SetActive(!(Actor.Instance.Item.GetItemCount(breakCfg.CostItems[i].Id) >= breakCfg.CostItems[i].Count));
CommonUtils.GetGameObject(itemParent, "Image_Green02").SetActive(Actor.Instance.Item.GetItemCount(breakCfg.CostItems[i].Id) >= breakCfg.CostItems[i].Count);
}
else
{
itemParent.SetActive(false);
}
}
LayoutRebuilder.ForceRebuildLayoutImmediate((FindObj("Image_BG/UI_Materals").transform as RectTransform));
}
}
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 (DataCharacterBreak 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<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)
{
}
//invoke when close window
protected override void OnHideWindow()
{
EventManager.Instance.Send(EventManager.EventName.EN_UIControllCultivateMainInput, true);
}
public override void OnRelease()
{
base.OnRelease();
UnRegisterEvent();
}
}